Pipenv Crash Course
Posted: December 05 2022 (Updated: May 24 2023)
Installing packages
You can install packages with pipenv install
.
The first time you do this it will create:
- A new virtual environment
- A file named
Pipfile
- A file named
Pipfile.lock
pipenv install rich
pipenv install rich==12.6.0
pipenv install "rich<=12.5.1"
The Pipfile
and Pipfile.lock
The Pipfile
defines all of your dependencies and any versions you want to pin.
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[packages]
rich = "*"
[dev-packages]
[requires]
The Pipfile.lock
keeps track of the installed versions of your dependencies and any transitive dependencies, as well as hashes of the downloaded files.
You should never need to touch this file, it is managed by pipenv
.
Updating
You can use pipenv update
to update all dependencies and re-generate your lock file.
If your Pipfile
does not specify any version constraints then the latest versions will be installed.
You can use pipenv upgrade <some-package>
to upgrade a specific package, only that package and it's dependencies will be updated.
Deploying
You should use pipenv sync
when deploying your code to install dependencies as specified in the Pipenv.lock
.
You can use pipenv sync --system
to install the packages without a virtual environment too.
Installing from another repository
One of the main benefits over regular pip
is that you can specify where to install each individual dependency from, here is an example from the pipenv documentation:
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[[source]]
url = "https://download.pytorch.org/whl/cu113/"
verify_ssl = false
name = "pytorch"
[dev-packages]
[packages]
torch = {version="*", index="pytorch"}
numpy = {version="*"}
This helps to avoid dependency confusion, an issue which recently bit pytorch.