Improve the project guide (#5626)

This commit is contained in:
Zanie Blue 2024-07-30 19:26:23 -04:00 committed by GitHub
parent 38c232e466
commit cbb13e6584
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -33,14 +33,15 @@ This will create the following directory structure:
### Working on an existing project
If your project already contains a standard `pyproject.toml`, you can start using uv without any
extra work. Commands like `uv add` and `uv run` will create a lockfile and virtual environment the
If your project already contains a standard `pyproject.toml`, you can start using uv immediately.
Commands like `uv add` and `uv run` will create a [lockfile](#uvlock) and [environment](#venv) the
first time they are used.
If you are migrating from an alternative Python package manager, you may need to edit your
`pyproject.toml` manually before using uv. uv uses a `[tool.uv]` section in the `pyproject.toml` to
support features that are not yet included in the `pyproject.toml` standard, such as development
dependencies. Alternative Python package managers may use different sections or format.
`pyproject.toml` manually before using uv. Most Python package managers extend the `pyproject.toml`
standard to support common features, such as development dependencies. These extensions are specific
to each package manager and will need to be converted to uv's format. See the documentation on
[project dependencies](../concepts/dependencies.md) for more details.
## Project structure
@ -70,50 +71,33 @@ remove` to manage your project through the CLI.
!!! tip
See the official [`pyproject.toml` guide](https://packaging.python.org/en/latest/guides/writing-pyproject-toml/) for more details on getting started with the `pyproject.toml` format.
See the official [`pyproject.toml` guide](https://packaging.python.org/en/latest/guides/writing-pyproject-toml/)
for more details on getting started with the `pyproject.toml` format.
### `.venv`
The `.venv` folder contains your project's virtual environment, a Python environment that is
isolated from the rest of your system. This is where uv will install your project's dependencies.
See the [project environment](../concepts/projects.md#project-environments) documentation for more
details.
### `uv.lock`
`uv.lock` is a cross-platform lockfile that contains exact information about your project's
dependencies. Unlike the `pyproject.toml` which is used to specify the broad requirements of your
project, the lockfile contains the exact resolved versions that are installed in the virtual
project, the lockfile contains the exact resolved versions that are installed in the project
environment. This file should be checked into version control, allowing for consistent and
reproducible installations across machines.
`uv.lock` is a human-readable TOML file but is managed by uv and should not be edited manually.
## Running commands
`uv run` can be used to run arbitrary scripts or commands in your project environment. This ensures
that the lockfile and virtual environment are up-to-date before executing a given command:
```console
$ uv run python my_script.py
$ uv run flask run -p 3000
```
Alternatively, you can use `uv sync` to manually synchronize the lockfile and virtual environment
before executing a command:
```console
$ uv sync
$ source .venv/bin/activate
$ python my_script.py
```
!!! note
The virtual environment must be active to run scripts and commands in the project without `uv run`. Virtual environment activation differs per shell and platform.
See the [lockfile](../concepts/projects.md#lock-file) documentation for more details.
## Managing dependencies
You can add dependencies to your `pyproject.toml` with the `uv add` command. This will also update
the lockfile and virtual environment:
the lockfile and project environment:
```console
$ uv add requests
@ -135,6 +119,53 @@ To remove a package, you can use `uv remove`:
$ uv remove requests
```
See the documentation on [managing dependencies](../concepts/projects.md#managing-dependencies) for
more details.
## Running commands
`uv run` can be used to run arbitrary scripts or commands in your project environment. This ensures
that the lockfile and project environment are up-to-date before executing a given command.
For example, to use `flask`:
```console
$ uv add flask
$ uv run -- flask run -p 3000
```
Or, to run a script:
```python title="example.py"
# Require a project dependency
import flask
print("hello world")
```
```console
$ uv run example.py
```
Alternatively, you can use `uv sync` to manually update the environment then activate it before
executing a command:
```console
$ uv sync
$ source .venv/bin/activate
$ flask run -p 3000
$ python example.py
```
!!! note
The virtual environment must be active to run scripts and commands in the project without `uv run`. Virtual environment activation differs per shell and platform.
See the documentation on [running commands](../concepts/projects.md#running-commands) and [running
scripts](../concepts/projects.md#running-scripts) in projects for more details.
## Next steps
See the [projects concept](../concepts/projects.md) documentation for more details about projects.
See the [projects concept](../concepts/projects.md) documentation for more details about working
with projects.