Pipenv: Python Dev Workflow for Humans¶
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.
The problems that Pipenv seeks to solve are multi-faceted:
- You no longer need to use
pipandvirtualenvseparately. They work together. - Managing a
requirements.txtfile can be problematic, so Pipenv usesPipfileandPipfile.lockto 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
.envfiles.
You can quickly play with Pipenv right in your browser:
Install Pipenv Today!¶
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 ☤ Installing Pipenv chapter for instructions.
✨🍰✨
User Testimonials¶
- Jannis Leidel, former pip maintainer—
- Pipenv is the porcelain I always wanted to build for pip. It fits my brain and mostly replaces virtualenvwrapper and manual pip calls for me. Use it.
- 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.
☤ Pipenv Features¶
- Enables truly deterministic builds, while easily specifying only what you want.
- Generates and checks file hashes for locked dependencies.
- Automatically install required Pythons, if
pyenvis 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
Pipfilewhen they are un/installed. - Automatically loads
.envfiles, 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).
Basic Concepts¶
- 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.
Other Commands¶
graphwill show you a dependency graph of your installed dependencies.shellwill spawn a shell with the virtualenv activated. This shell can be deactivated by usingexit.runwill run a given command from the virtualenv, with any arguments forwarded (e.g.$ pipenv run pythonor$ pipenv run pip freeze).checkchecks for security vulnerabilities and asserts that PEP 508 requirements are being met by the current environment.
Further Documentation Guides¶
- Basic Usage of Pipenv
- ☤ Example Pipfile & Pipfile.lock
- ☤ General Recommendations & Version Control
- ☤ Example Pipenv Workflow
- ☤ Example Pipenv Upgrade Workflow
- ☤ Importing from requirements.txt
- ☤ Specifying Versions of a Package
- ☤ Specifying Versions of Python
- ☤ Editable Dependencies (e.g.
-e .) - ☤ Environment Management with Pipenv
- ☤ About Shell Configuration
- ☤ A Note about VCS Dependencies
- ☤ Pipfile.lock Security Features
- Advanced Usage of Pipenv
- ☤ Caveats
- ☤ Specifying Package Indexes
- ☤ Using a PyPI Mirror
- ☤ Injecting credentials into Pipfiles via environment variables
- ☤ Specifying Basically Anything
- ☤ Using pipenv for Deployments
- ☤ Pipenv and Other Python Distributions
- ☤ Generating a
requirements.txt - ☤ Detection of Security Vulnerabilities
- ☤ Community Integrations
- ☤ Open a Module in Your Editor
- ☤ Automatic Python Installation
- ☤ Automatic Loading of
.env - ☤ Custom Script Shortcuts
- ☤ Support for Environment Variables
- ☤ Configuration With Environment Variables
- ☤ Custom Virtual Environment Location
- ☤ Testing Projects
- ☤ Shell Completion
- ☤ Working with Platform-Provided Python Components
- ☤ Pipfile vs setup.py
- ☤ Changing Pipenv’s Cache Location
- ☤ Changing Default Python Versions
- Frequently Encountered Pipenv Problems
- ☤ Your dependencies could not be resolved
- ☤ No module named <module name>
- ☤ My pyenv-installed Python is not found
- ☤ Pipenv does not respect pyenv’s global and local Python versions
- ☤ ValueError: unknown locale: UTF-8
- ☤ /bin/pip: No such file or directory
- ☤
shelldoes not show the virtualenv’s name in prompt - ☤ Pipenv does not respect dependencies in setup.py
- ☤ Using
pipenv runin Supervisor program - ☤ An exception is raised during
Locking dependencies…
Contribution Guides¶
☤ Pipenv Usage¶
pipenv¶
pipenv [OPTIONS] COMMAND [ARGS]...
Options
-
--where¶ Output project home information.
-
--venv¶ Output virtualenv information.
-
--py¶ Output Python interpreter information.
-
--envs¶ Output Environment Variable options.
-
--rm¶ Remove the virtualenv.
-
--bare¶ Minimal output.
-
--completion¶ Output completion (to be eval’d).
-
--man¶ Display manpage.
-
--support¶ Output diagnostic information for use in GitHub issues.
-
--site-packages¶ Enable site-packages for the virtualenv.
-
--python<python>¶ Specify which version of Python virtualenv should use.
-
--three,--two¶ Use Python 3/2 when creating virtualenv.
-
--clear¶ Clears caches (pipenv, pip, and pip-tools).
-
-v,--verbose¶ Verbose mode.
-
--pypi-mirror<pypi_mirror>¶ Specify a PyPI mirror.
-
--version¶ Show the version and exit.
check¶
Checks for security vulnerabilities and against PEP 508 markers provided in Pipfile.
pipenv check [OPTIONS] [ARGS]...
Options
-
--unused<unused>¶ Given a code path, show potentially unused dependencies.
-
-i,--ignore<ignore>¶ Ignore specified vulnerability during safety checks.
-
--python<python>¶ Specify which version of Python virtualenv should use.
-
--three,--two¶ Use Python 3/2 when creating virtualenv.
-
--clear¶ Clears caches (pipenv, pip, and pip-tools).
-
-v,--verbose¶ Verbose mode.
-
--pypi-mirror<pypi_mirror>¶ Specify a PyPI mirror.
-
--system¶ System pip management.
Arguments
-
ARGS¶ Optional argument(s)
clean¶
Uninstalls all packages not specified in Pipfile.lock.
pipenv clean [OPTIONS]
Options
-
--bare¶ Minimal output.
-
--dry-run¶ Just output unneeded packages.
-
-v,--verbose¶ Verbose mode.
-
--three,--two¶ Use Python 3/2 when creating virtualenv.
-
--python<python>¶ Specify which version of Python virtualenv should use.
graph¶
Displays currently-installed dependency graph information.
pipenv graph [OPTIONS]
Options
-
--bare¶ Minimal output.
-
--json¶ Output JSON.
-
--json-tree¶ Output JSON in nested tree.
-
--reverse¶ Reversed dependency graph.
install¶
Installs provided packages and adds them to Pipfile, or (if no packages are given), installs all packages from Pipfile.
pipenv install [OPTIONS] [PACKAGES]...
Options
-
--system¶ System pip management.
-
-c,--code<code>¶ Import from codebase.
-
--deploy¶ Abort if the Pipfile.lock is out-of-date, or Python version is wrong.
-
--skip-lock¶ Skip locking mechanisms and use the Pipfile instead during operation.
-
-e,--editable<editable>¶ An editable python package URL or path, often to a VCS repo.
-
--ignore-pipfile¶ Ignore Pipfile when installing, using the Pipfile.lock.
-
--selective-upgrade¶ Update specified packages.
-
--pre¶ Allow pre-releases.
-
-r,--requirements<requirements>¶ Import a requirements.txt file.
-
--extra-index-url<extra_index_url>¶ URLs to the extra PyPI compatible indexes to query for package lookups.
-
-i,--index<index>¶ Target PyPI-compatible package index url.
-
--sequential¶ Install dependencies one-at-a-time, instead of concurrently.
-
--keep-outdated¶ Keep out-dated dependencies from being updated in Pipfile.lock.
-
--pre¶ Allow pre-releases.
-
-d,--dev¶ Install both develop and default packages.
-
--python<python>¶ Specify which version of Python virtualenv should use.
-
--three,--two¶ Use Python 3/2 when creating virtualenv.
-
--clear¶ Clears caches (pipenv, pip, and pip-tools).
-
-v,--verbose¶ Verbose mode.
-
--pypi-mirror<pypi_mirror>¶ Specify a PyPI mirror.
Arguments
-
PACKAGES¶ Optional argument(s)
Environment variables
-
PIPENV_SKIP_LOCK¶ Provide a default for
--skip-lock
-
PIP_EXTRA_INDEX_URL¶ Provide a default for
--extra-index-url
lock¶
Generates Pipfile.lock.
pipenv lock [OPTIONS]
Options
-
-r,--requirements¶ Generate output in requirements.txt format.
-
--keep-outdated¶ Keep out-dated dependencies from being updated in Pipfile.lock.
-
--pre¶ Allow pre-releases.
-
-d,--dev¶ Install both develop and default packages.
-
--python<python>¶ Specify which version of Python virtualenv should use.
-
--three,--two¶ Use Python 3/2 when creating virtualenv.
-
--clear¶ Clears caches (pipenv, pip, and pip-tools).
-
-v,--verbose¶ Verbose mode.
-
--pypi-mirror<pypi_mirror>¶ Specify a PyPI mirror.
open¶
View a given module in your editor.
This uses the EDITOR environment variable. You can temporarily override it, for example:
EDITOR=atom pipenv open requests
pipenv open [OPTIONS] MODULE
Options
-
--python<python>¶ Specify which version of Python virtualenv should use.
-
--three,--two¶ Use Python 3/2 when creating virtualenv.
-
--clear¶ Clears caches (pipenv, pip, and pip-tools).
-
-v,--verbose¶ Verbose mode.
-
--pypi-mirror<pypi_mirror>¶ Specify a PyPI mirror.
Arguments
-
MODULE¶ Required argument
run¶
Spawns a command installed into the virtualenv.
pipenv run [OPTIONS] COMMAND [ARGS]...
Options
-
--python<python>¶ Specify which version of Python virtualenv should use.
-
--three,--two¶ Use Python 3/2 when creating virtualenv.
-
--clear¶ Clears caches (pipenv, pip, and pip-tools).
-
-v,--verbose¶ Verbose mode.
-
--pypi-mirror<pypi_mirror>¶ Specify a PyPI mirror.
Arguments
-
COMMAND¶ Required argument
-
ARGS¶ Optional argument(s)
shell¶
Spawns a shell within the virtualenv.
pipenv shell [OPTIONS] [SHELL_ARGS]...
Options
-
--fancy¶ Run in shell in fancy mode (for elegantly configured shells).
-
--anyway¶ Always spawn a subshell, even if one is already spawned.
-
--pypi-mirror<pypi_mirror>¶ Specify a PyPI mirror.
-
--three,--two¶ Use Python 3/2 when creating virtualenv.
-
--python<python>¶ Specify which version of Python virtualenv should use.
Arguments
-
SHELL_ARGS¶ Optional argument(s)
sync¶
Installs all packages specified in Pipfile.lock.
pipenv sync [OPTIONS]
Options
-
--bare¶ Minimal output.
-
--sequential¶ Install dependencies one-at-a-time, instead of concurrently.
-
--keep-outdated¶ Keep out-dated dependencies from being updated in Pipfile.lock.
-
--pre¶ Allow pre-releases.
-
-d,--dev¶ Install both develop and default packages.
-
--python<python>¶ Specify which version of Python virtualenv should use.
-
--three,--two¶ Use Python 3/2 when creating virtualenv.
-
--clear¶ Clears caches (pipenv, pip, and pip-tools).
-
-v,--verbose¶ Verbose mode.
-
--pypi-mirror<pypi_mirror>¶ Specify a PyPI mirror.
uninstall¶
Un-installs a provided package and removes it from Pipfile.
pipenv uninstall [OPTIONS] [PACKAGES]...
Options
-
--all-dev¶ Un-install all package from [dev-packages].
-
--all¶ Purge all package(s) from virtualenv. Does not edit Pipfile.
-
-e,--editable<editable>¶ An editable python package URL or path, often to a VCS repo.
-
--skip-lock¶ Skip locking mechanisms and use the Pipfile instead during operation.
-
--keep-outdated¶ Keep out-dated dependencies from being updated in Pipfile.lock.
-
--pre¶ Allow pre-releases.
-
-d,--dev¶ Install both develop and default packages.
-
--python<python>¶ Specify which version of Python virtualenv should use.
-
--three,--two¶ Use Python 3/2 when creating virtualenv.
-
--clear¶ Clears caches (pipenv, pip, and pip-tools).
-
-v,--verbose¶ Verbose mode.
-
--pypi-mirror<pypi_mirror>¶ Specify a PyPI mirror.
Arguments
-
PACKAGES¶ Optional argument(s)
Environment variables
-
PIPENV_SKIP_LOCK¶ Provide a default for
--skip-lock
update¶
Runs lock, then sync.
pipenv update [OPTIONS] [PACKAGES]...
Options
-
--bare¶ Minimal output.
-
--outdated¶ List out-of-date dependencies.
-
--dry-run¶ List out-of-date dependencies.
-
-e,--editable<editable>¶ An editable python package URL or path, often to a VCS repo.
-
--ignore-pipfile¶ Ignore Pipfile when installing, using the Pipfile.lock.
-
--selective-upgrade¶ Update specified packages.
-
--pre¶ Allow pre-releases.
-
-r,--requirements<requirements>¶ Import a requirements.txt file.
-
--extra-index-url<extra_index_url>¶ URLs to the extra PyPI compatible indexes to query for package lookups.
-
-i,--index<index>¶ Target PyPI-compatible package index url.
-
--sequential¶ Install dependencies one-at-a-time, instead of concurrently.
-
--keep-outdated¶ Keep out-dated dependencies from being updated in Pipfile.lock.
-
--pre¶ Allow pre-releases.
-
-d,--dev¶ Install both develop and default packages.
-
--python<python>¶ Specify which version of Python virtualenv should use.
-
--three,--two¶ Use Python 3/2 when creating virtualenv.
-
--clear¶ Clears caches (pipenv, pip, and pip-tools).
-
-v,--verbose¶ Verbose mode.
-
--pypi-mirror<pypi_mirror>¶ Specify a PyPI mirror.
Arguments
-
PACKAGES¶ Optional argument(s)
Environment variables
-
PIP_EXTRA_INDEX_URL¶ Provide a default for
--extra-index-url