Implement uv run --directory (#5566)

## Summary

uv run --directory <path> means that one doesn't have to change to a
project's directory to run programs from it. It makes it possible to use
projects as if they are tool installations.

To support this, first the code reading .python-version was updated so
that
it can read such markers outside the current directory. Note the minor
change this causes (if I'm right), described in the commit.

## Test Plan

One test has been added.

## --directory

Not sure what the name of the argument should be, but it's following uv
sync's directory for now.

Other alternatives could be "--project". Uv run and uv tool run should
probably find common agreement on this (relevant for project-locked
tools).

I've implemented this same change in Rye, some time ago, and then we
went
with --pyproject `<`path to pyproject.toml file`>`. I think using
pyproject.toml file path and not directory was probably a mistake, an
overgeneralization one doesn't need.
This commit is contained in:
bluss 2024-07-29 21:53:10 +02:00 committed by GitHub
parent cf94a10054
commit e46c24d3cf
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 119 additions and 22 deletions

View file

@ -1932,6 +1932,10 @@ pub struct RunArgs {
/// - `/home/ferris/.local/bin/python3.10` uses the exact Python at the given path.
#[arg(long, short, env = "UV_PYTHON", verbatim_doc_comment)]
pub python: Option<String>,
/// The path to the project. Defaults to the current working directory.
#[arg(long, hide = true)]
pub directory: Option<PathBuf>,
}
#[derive(Args)]