Pipenv is a tool that aims to bring the best of all packaging worlds (bundler, composer, npm, cargo, yarn, etc.) to the Python world. Windows is a first-class citizen, in our world.
It automatically creates and manages a virtualenv for your projects, as well as adds/removes packages from your Pipfile
as you install/uninstall packages. It also generates the ever-important Pipfile.lock
, which is used to produce deterministic builds.
Pipenv is primarily meant to provide users and developers of applications with an easy method to setup a working environment. For the distinction between libraries and applications and the usage of setup.py
vs Pipfile
to define dependencies, see :ref:`pipfile-vs-setuppy`.
The problems that Pipenv seeks to solve are multi-faceted:
- You no longer need to use
pip
andvirtualenv
separately. They work together. - Managing a
requirements.txt
file can be problematic, so Pipenv usesPipfile
andPipfile.lock
to separate abstract dependency declarations from the last tested combination. - Hashes are used everywhere, always. Security. Automatically expose security vulnerabilities.
- Strongly encourage the use of the latest versions of dependencies to minimize security risks arising from outdated components.
- Give you insight into your dependency graph (e.g.
$ pipenv graph
). - Streamline development workflow by loading
.env
files.
You can quickly play with Pipenv right in your browser:
If you're on MacOS, you can install Pipenv easily with Homebrew. You can also use Linuxbrew on Linux using the same command:
$ brew install pipenv
Or, if you're using Fedora 28:
$ sudo dnf install pipenv
Otherwise, refer to the :ref:`installing-pipenv` chapter for instructions.
✨🍰✨
.. toctree:: :maxdepth: 2 install changelog
- David Gang—
- This package manager is really awesome. For the first time I know exactly what my dependencies are which I installed and what the transitive dependencies are. Combined with the fact that installs are deterministic, makes this package manager first class, like cargo.
- Justin Myles Holmes—
- Pipenv is finally an abstraction meant to engage the mind instead of merely the filesystem.
- Enables truly deterministic builds, while easily specifying only what you want.
- Generates and checks file hashes for locked dependencies.
- Automatically install required Pythons, if
pyenv
is available. - Automatically finds your project home, recursively, by looking for a
Pipfile
. - Automatically generates a
Pipfile
, if one doesn't exist. - Automatically creates a virtualenv in a standard location.
- Automatically adds/removes packages to a
Pipfile
when they are installed or uninstalled. - Automatically loads
.env
files, if they exist.
The main commands are install
, uninstall
, and lock
, which generates a Pipfile.lock
. These are intended to replace $ pip install
usage, as well as manual virtualenv management (to activate a virtualenv, run $ pipenv shell
).
- A virtualenv will automatically be created, when one doesn't exist.
- When no parameters are passed to
install
, all packages[packages]
specified will be installed. - To initialize a Python 3 virtual environment, run
$ pipenv --three
. - To initialize a Python 2 virtual environment, run
$ pipenv --two
. - Otherwise, whatever virtualenv defaults to will be the default.
graph
will show you a dependency graph of your installed dependencies.shell
will spawn a shell with the virtualenv activated. This shell can be deactivated by usingexit
.run
will run a given command from the virtualenv, with any arguments forwarded (e.g.$ pipenv run python
or$ pipenv run pip freeze
).check
checks for security vulnerabilities and asserts that PEP 508 requirements are being met by the current environment.
.. toctree:: :maxdepth: 2 basics advanced cli diagnose
.. toctree:: :maxdepth: 2 dev/philosophy dev/contributing