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
Section titled “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
Section titled “Adding or removing a package”To add or remove packages you can run the following commandss:
# native versionuv add <package_name>uv remove <package_name>
# docker versionmake 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 buildmake restart
The make requirements
command can also be used to sync your uv.lock
file and rebuild / restart your containers.
Upgrading a package
Section titled “Upgrading a package”You can upgrade a package with:
# native version - update the lockfileuv lock --upgrade-package <package_name># native version - update the lockfile and sync the virtual environmentuv sync --upgrade-package <package_name>
# docker versionmake uv "lock --upgrade-package wagtail"
You can upgrade all packages with:
# native version - update the lockfileuv lock --upgrade# native version - update the lockfile and sync the virtual environmentuv sync --upgrade
# docker versionmake 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 buildmake restart