Python Virtual Environments (venv and pipenv): A Complete Beginner-to-Advanced Guide


Table of Contents

  • Introduction
  • Why Use a Virtual Environment?
  • What is venv?
    • Creating a Virtual Environment with venv
    • Activating and Deactivating venv
    • Installing Packages Inside venv
    • Deleting a Virtual Environment
  • What is pipenv?
    • Why Use pipenv Over venv?
    • Installing pipenv
    • Creating and Managing a pipenv Environment
    • Pipfile and Pipfile.lock Explained
  • Differences Between venv and pipenv
  • Best Practices for Managing Python Environments
  • Common Errors and Troubleshooting
  • Final Thoughts

Introduction

As Python developers, we often work on multiple projects at the same time. Each project might require different versions of libraries or even different versions of Python itself. This can lead to dependency conflicts and major headaches.

The solution? Virtual Environments.
Using virtual environments like venv and pipenv ensures that each project has its own isolated workspace, free from interference with other projects or the system Python installation.

In this guide, we’ll explore venv and pipenv in detail, with step-by-step examples and best practices.


Why Use a Virtual Environment?

  • Avoid Dependency Conflicts: Different projects can require different versions of libraries.
  • Isolate Environments: Keep your global Python environment clean.
  • Reproducibility: Others can replicate your environment easily.
  • Ease of Deployment: Deployments often expect isolated environments.
  • Security: Minimize risks by installing only the needed packages for each project.

Imagine working on two projects:

  • Project A needs Django 3.2.
  • Project B needs Django 4.1.
    Without virtual environments, you’d face version conflicts that could break both projects.

What is venv?

Python 3.3+ comes with a built-in module called venv for creating virtual environments.

It allows you to create lightweight, isolated environments containing their own Python binaries and pip packages.


Creating a Virtual Environment with venv

Navigate to your project directory and run:

python3 -m venv myenv

Here, myenv is the name of your virtual environment folder. You can name it anything.

A new folder myenv/ will be created with a copy of the Python interpreter and a fresh pip.


Activating and Deactivating venv

On Windows:

myenv\Scripts\activate

On macOS/Linux:

source myenv/bin/activate

You’ll notice your terminal prompt changes, showing the environment name like this:

(myenv) $

To deactivate:

deactivate

This brings you back to the system’s Python environment.


Installing Packages Inside venv

After activation, use pip normally:

pip install requests

Packages are installed only inside the virtual environment, not globally.


Deleting a Virtual Environment

Simply delete the folder:

rm -rf myenv

or on Windows:

rmdir /s myenv

What is pipenv?

pipenv is a packaging tool that automatically creates and manages a virtual environment for your project, as well as adding/removing packages to a Pipfile as you install or uninstall packages.

It combines pip and venv in one tool.


Why Use pipenv Over venv?

  • Simplified dependency management: No need to manually manage requirements.txt.
  • Automatic environment creation: No need to manually activate/deactivate environments.
  • Pipfile and Pipfile.lock: Provides clear tracking of dependencies and exact versions.
  • Better security: Lock files make environments more reproducible.

Installing pipenv

Install via pip globally:

pip install pipenv

Confirm installation:

pipenv --version

Creating and Managing a pipenv Environment

Navigate to your project directory and install a package:

pipenv install requests
  • A virtual environment is automatically created.
  • A Pipfile is generated to track project dependencies.
  • A Pipfile.lock is created to ensure reproducibility.

To activate the environment shell:

pipenv shell

Now you can install more packages:

pipenv install flask

If you exit the shell:

exit

Pipfile and Pipfile.lock Explained

  • Pipfile: Human-readable list of top-level packages you requested.
  • Pipfile.lock: Machine-generated, records exact versions of all installed packages (including subdependencies).

Example of a Pipfile:

[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[packages]
requests = "*"
flask = "*"

[dev-packages]
pytest = "*"

Differences Between venv and pipenv

Featurevenvpipenv
Built-in?Yes (Python 3.3+)No (Needs separate install)
Manages dependencies?NoYes
Handles Pipfile.lock?NoYes
Ease of useManualMore automated
Popular for large projects?LessMore

Short Answer:

  • If you need simple isolation: use venv.
  • If you need isolation + dependency management: use pipenv.

Best Practices for Managing Python Environments

  • Always create a virtual environment for every project.
  • Never install project dependencies globally.
  • Use version control (git) to track your Pipfile, but not the virtual environment folder itself.
  • Regenerate environments on new machines using Pipfile.lock for exact dependency versions.
  • Regularly update dependencies using:
pipenv update

Common Errors and Troubleshooting

ErrorCauseSolution
command not found: pipenvpipenv not installed globallypip install pipenv
ModuleNotFoundError after installationEnvironment not activatedActivate the environment or install in the right one
Permission errors on LinuxInstalling without sudo when neededUse virtual environments; avoid sudo if possible

Tip: Always double-check which Python interpreter is active by:

which python

or

where python

inside the environment.


Final Thoughts

Understanding and using virtual environments effectively is one of the most critical skills for any Python developer.
Whether you choose the built-in simplicity of venv or the automated, dependency-tracking capabilities of pipenv, using a virtual environment will make your projects more manageable, reproducible, and professional.

Master this, and you’ll not only avoid common pitfalls but also be able to confidently work across multiple projects without worrying about conflicting dependencies.

Syskoolhttps://syskool.com/
Articles are written and edited by the Syskool Staffs.