# venv vs virtualenv

When working with Python, you will often encounter two similar tools for creating isolated environments: `venv` and `virtualenv`. While they serve the same primary purpose, there are key historical and functional differences.

## 1. venv (The Standard)

`venv` is the standard Python module for creating virtual environments.

*   **Built-in:** It has been included in the Python standard library since Python 3.3. You do not need to install anything extra.
*   **Usage:** `python -m venv .venv`
*   **Limitation:** It can only create environments for the version of Python that is currently running. It cannot create an environment for Python 3.8 if you are running the command with Python 3.10.
*   **Recommendation:** It is the recommended tool for creating virtual environments in Python 3.

## 2. virtualenv (The Third-Party Tool)

`virtualenv` is a third-party package that predates `venv`.

*   **Installation Required:** You must install it via pip (`pip install virtualenv`).
*   **Speed:** It is often faster than `venv` because of how it handles file copying/symlinking.
*   **Python 2 Support:** It supports Python 2.7, whereas `venv` does not.
*   **Version Selection:** It can create environments for arbitrary Python versions (e.g., `virtualenv -p python3.8 myenv`), provided that version is installed on your system.
*   **Extendability:** It has a richer API for tools that want to build upon it.

## Summary Comparison

| Feature | `venv` | `virtualenv` |
| :--- | :--- | :--- |
| **Source** | Standard Library (Python 3.3+) | Third-party (PyPI) |
| **Installation** | None required | `pip install virtualenv` |
| **Python 2 Support** | No | Yes |
| **Speed** | Good | Faster |
| **Upgradability** | Tied to Python version | Can be upgraded via pip |

## Which one should I use?

*   **Use `venv`** for almost all standard Python 3 development. It is built-in, guaranteed to be available, and sufficient for 99% of use cases.
*   **Use `virtualenv`** if you are stuck working with Python 2, or if you are building a tool that needs to generate environments programmatically with specific requirements that `venv` doesn't cover.

*Note: Modern dependency managers like [[programming/python/poetry|Poetry]] or Pipenv often use `virtualenv` or `venv` under the hood automatically.*

See also:
*   [[programming/python/modules/venv-module|Python Venv Module]]
*   [[programming/windows-11-python-venv|Creating Venvs on Windows 11]]

[[programming/python/python]]