mirror of
https://github.com/astral-sh/uv.git
synced 2025-10-11 11:02:04 +00:00
Write project guide (#5195)
## Summary Write the project guide that was added in https://github.com/astral-sh/uv/pull/5135. I tried to expand on details as much as I felt was necessary for someone new to python package managers (which was myself a couple months ago).
This commit is contained in:
parent
5d6f793101
commit
360079fd05
2 changed files with 112 additions and 8 deletions
|
@ -23,7 +23,7 @@ These commands are intended for managing development of a Python project. In the
|
||||||
- `uv sync`
|
- `uv sync`
|
||||||
- `uv lock`
|
- `uv lock`
|
||||||
|
|
||||||
See the documentation on [projects](./projects.md) for more details on getting started.
|
See the [project guide](./guides/projects.md) for more details on getting started.
|
||||||
|
|
||||||
### Toolchain management
|
### Toolchain management
|
||||||
|
|
||||||
|
|
|
@ -1,32 +1,136 @@
|
||||||
# Working on projects
|
# Working on projects
|
||||||
|
|
||||||
|
uv can manage the development of a Python project from the ground up.
|
||||||
|
|
||||||
## Creating a new project
|
## Creating a new project
|
||||||
|
|
||||||
|
You can create a new Python project using the `uv init` command:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ uv init hello-world
|
||||||
|
$ cd hello-world
|
||||||
```
|
```
|
||||||
uv init
|
|
||||||
|
Alternatively, you can initialize a project in the working directory:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ cd hello-world
|
||||||
|
$ uv init
|
||||||
|
```
|
||||||
|
|
||||||
|
This will create the following directory structure:
|
||||||
|
|
||||||
|
```
|
||||||
|
.
|
||||||
|
├── pyproject.toml
|
||||||
|
├── README.md
|
||||||
|
└── src
|
||||||
|
└── hello-world
|
||||||
|
└── __init__.py
|
||||||
```
|
```
|
||||||
|
|
||||||
### Working on an existing project
|
### Working on an existing project
|
||||||
|
|
||||||
<!-- What makes a project compatible with uv commands? What are my alternatives? -->
|
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 the lockfile and virtual environment the first time they are run.
|
||||||
|
|
||||||
|
If you are migrating from an alternative Python package manager, you may need to
|
||||||
|
edit your `pyproject.toml` manually to use uv. uv uses the `[tool.uv]` section
|
||||||
|
of the `pyproject.toml` to support non-standard features, such as development
|
||||||
|
dependencies. Alternative Python package managers may use different sections,
|
||||||
|
or a custom format altogether.
|
||||||
|
|
||||||
|
## Project structure
|
||||||
|
|
||||||
|
A project consists of a few important parts that work together and allow uv to
|
||||||
|
manage your project. Along with the files created by `uv init`, uv will create a
|
||||||
|
virtual environment and `uv.lock` file in the root of your project the first time you
|
||||||
|
run a project command.
|
||||||
|
|
||||||
|
### `pyproject.toml`
|
||||||
|
|
||||||
|
The `pyproject.toml` contains metadata about your project:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[project]
|
||||||
|
name = "hello-world"
|
||||||
|
version = "0.1.0"
|
||||||
|
description = "Add your description here"
|
||||||
|
readme = "README.md"
|
||||||
|
dependencies = []
|
||||||
|
|
||||||
|
[tool.uv]
|
||||||
|
dev-dependencies = []
|
||||||
|
```
|
||||||
|
|
||||||
|
This is where you specify dependencies, as well as details about the project
|
||||||
|
such as it's description or license. You can edit this file manually, or use
|
||||||
|
commands like `uv add` and `uv remove` to manage your project through the
|
||||||
|
CLI.
|
||||||
|
|
||||||
|
### `.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.
|
||||||
|
|
||||||
|
### `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 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
|
## 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
|
||||||
```
|
```
|
||||||
uv run
|
|
||||||
|
Alternatively, you can use `uv sync` to manually synchronize the lockfile and
|
||||||
|
virtual environment before executing a command:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ uv sync
|
||||||
|
$ python my_script.py
|
||||||
```
|
```
|
||||||
|
|
||||||
## Managing dependencies
|
## Managing dependencies
|
||||||
|
|
||||||
```
|
You can add dependencies to your `pyproject.toml` with the `uv add` command.
|
||||||
uv add
|
This will also update the lockfile and virtual environment:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ uv add requests
|
||||||
```
|
```
|
||||||
|
|
||||||
|
You can also specify version constraints or alternative sources:
|
||||||
|
|
||||||
|
```console
|
||||||
|
# Specify a version constraint
|
||||||
|
$ uv add 'requests==2.31.0'
|
||||||
|
|
||||||
|
# Add a git dependency
|
||||||
|
$ uv add requests --git https://github.com/psf/requests
|
||||||
```
|
```
|
||||||
uv remove
|
|
||||||
|
To remove a package, you can use `uv remove`:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ uv remove requests
|
||||||
```
|
```
|
||||||
|
|
||||||
## Next steps
|
## Next steps
|
||||||
|
|
||||||
See the [projects concept](../projects.md) documentation for more details on projects.
|
See the [projects concept](../projects.md) documentation for more details about
|
||||||
|
projects.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue