Working with Python Packages (uv)#
Recent versions of Pegasus use uv to manage Python packages.
It provides all the functionality of pip-tools
while being much faster and offering more flexibility
and features.
Requirements Files#
uv
uses two files to manage requirements. The first is a pyproject.toml
file, which contains the
base list of packages. The pyproject.toml
file also supports dependency groups, which are used
for development and production requirements.
pyproject.toml
replaces the previous requirements.in
, dev-requirements.in
, and prod-requirements.in
files.
The second file is the uv.lock
file. This file contains the pinned versions of dependencies
that are used by the project’s environment.
This file is automatically generated from the pyproject.toml
file and should not be edited by hand.
uv.lock
replaces the previous requirements.txt
, dev-requirements.txt
, and prod-requirements.txt
files.
Adding or removing a package#
To add or remove packages you can run the following commandss:
# native version
uv add <package_name>
uv remove <package_name>
# docker version
make uv add <package_name>
make uv remove <package_name>
If you’re using natively this is all you have to do! The command will update your pyproject.toml
file,
your uv.lock
file, and sync your virtual environment.
On Docker, you will have to also rebuild the container. You can do that with:
make build
make restart
The make requiements
command can also be used to sync your uv.lock
file and rebuild / restart your containers.
Upgrading a package#
You can upgrade a package with:
# native version - update the lockfile
uv lock --upgrade-package <package_name>
# native version - update the lockfile and sync the virtual environment
uv sync --upgrade-package <package_name>
# docker version
make uv "lock --upgrade-package wagtail"
You can upgrade all packages with:
# native version - update the lockfile
uv lock --upgrade
# native version - update the lockfile and sync the virtual environment
uv sync --upgrade
# docker version
make uv "lock --upgrade"
Like with adding packages, if you’re using Docker, you’ll have to rebuild and restart Docker containers for the updated environment to work:
make build
make restart