Pipenv: Python Dev Workflow for Humans

https://img.shields.io/pypi/v/pipenv.svg https://img.shields.io/pypi/l/pipenv.svg https://img.shields.io/pypi/pyversions/pipenv.svg

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 ☤ Pipfile vs setup.py.

a short animation of pipenv at work

The problems that Pipenv seeks to solve are multi-faceted:

  • You no longer need to use pip and virtualenv separately. They work together.

  • Managing a requirements.txt file can be problematic, so Pipenv uses Pipfile and Pipfile.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:

Try in browser

Install Pipenv Today!

The recommended way to install pipenv on most platforms is to install from pypi using pip:

$ pip install --user pipenv

Or, if you’re using Fedora 28:

$ sudo dnf install pipenv

More detailed installation instructions can be found in the ☤ Installing Pipenv chapter.


Pipenv Features

  • Enables truly deterministic builds, while easily specifying only what you want.

  • Generates and checks file hashes for locked dependencies when installing from Pipfile.lock.

  • Automatically install required Python version when 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 customizable location.

  • Automatically adds/removes packages to a Pipfile when they are installed or uninstalled.

  • Automatically loads .env files to support customization and overrides.

Basic Commands and Concepts

Pipenv uses a set of commands to manage your Project’s dependencies and custom scripts. It replaces the use of Makefile, direct calls to pip and python -m venv or virtualenv. to create virtual environments and install packages in them. Pipenv uses two files to do this: Pipfile and Pipfile.lock (which will look familiar if you are used to packages manager like yarn or npm).

The main commands are:

  • install -

    Will create a virtual env and install dependencies (if it does not exist already) The dependencies will be installed inside.

  • install package==0.2 -

    Will add the package in version 0.2 to the virtual environment and to Pipfile and Pipfile.lock

  • uninstall - Will remove the dependency

  • lock - Regenerate Pipfile.lock and updates the dependencies inside it.

These are intended to replace $ pip install usage, as well as manual virtualenv management.

Other Commands

  • 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 using exit.

  • 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.

Further Documentation Guides

Indices and tables