Why pipenv > venv

Why pipenv > venv

kjljlk

Pipenv was first released as an experiment way back in January of 2017 by Kenneth Reitz. Even though pipenv is a package that attempts to marry the best of pip and virtualenv into one single toolchain and include a replacement for requirements.txt, it didn’t get much love. But this year, the Python community has welcomed pipenv as the far better way to create virtual environments, especially when it comes to dependency management.

For example, previously, in order to create virtual environments so you could run multiple projects on the same computer you’d need:

  • A tool for creating a virtual environment (like virtualenv or venv)
  • A utility for installing packages (like pip or easy_install)
  • A tool/utility for managing virtual environments (like virtualenvwrapper or pyenv)
  • All the commands associated with the libraries used

Pipenv includes all of the above, and more, out of the box. It essentially gives you package management and virtual environment support in a single tool. Let’s break it down.

 

Install, Load and Lock

You can simply pip install pipenv to get started, and then pipenv myvenv to create your virtual environment. From now on you want to use pipenv (rather than pip) to install all of your packages because pipenv:

  • Allows you to specify into which environment you install the package (e.g. use --dev to install a package that will be used only in a dev environment);
  • Integrates directly with PyPI, but can also be redirected to a local repository;
  • Creates a single Pipfile with separate sections for each environment, a simpler implementation than previously having to create one requirements.txt per environment;
  • Allows you to pipenv lock your virtual environment, which will create a Pipfile.lock file that resolves all dependencies required for a build AND uses hashes to ensure deterministic builds for specific environments.

 

Dependency Management for Free

One of the most exciting things about Pipenv is how it handles dependency management compared to requirements.txt and pip freeze. To be fair, Pipenv performs just like pip when it comes to installing all the required sub-dependencies for your packages. And just like pip, if you get a conflict, you’re still stuck manually trying to figure it all out (although you can issue pipenv graph to view a full dependency tree, which should help).

But once you‘ve solved the issue, Pipfile.lock keeps track of all of your application’s interdependencies, including their versions, for each environment so you can basically forget about interdependencies.

In practice, this means you can continue working in development until you’ve got a set of packages/versions that work for you. Now you can simply issue pipenv lock and Pipenv will lock all the dependencies/interdependencies your project requires, pinning their versions and hashing the results so you can deterministically replicate your build in production.

 

The Way Forward

While venv is still the official virtual environment tool that ships with the latest version of Python, Pipenv is gaining ground in the Python Community and with the Python Packaging Authority (PyPA). ActiveState has also included it in our latest ActivePython 3.6.6 release.

While Pipenv may not end up being the virtual environment tool of choice for all Python users, the fact that Pipenv means you no longer need to manually create and manage your virtual environments is a significant step forward.

Our Suggestion? Stop pip installing into your virtual environments and start pipenv installing. You won’t regret it.

Agree? Disagree? Join the discussion below.

Watch a 5-minute live-coding video that shows you how to use our Platform to work with Pipenv.

 

 

Pete Garcin

Pete Garcin

Senior Product Manager. Pete has over 15 years in software development in both web and games having shipped over 40 titles in roles ranging from Programmer to Audio Director to Executive Producer. He earned his undergraduate degree at University of Waterloo, and an MA in Communication from Carleton University in Ottawa. He’s passionate about engaging with communities and dedicated to enhancing developers’ experiences with ActiveState products.