# What is the difference between virtualenv, pipenv & venv?

***Note: If you are looking for a Full Stack Developer (Django+React), then connect with me on*** [***LinkedIn***](https://www.linkedin.com/in/mnamegaurav/) ***or contact me through my*** [***portfolio***](https://gaurav.devjunction.in/)***.***

# Introduction:

`virtualenv`, `pipenv`, `venv` all serves the same purpose, **isolating** your third party packages installed by **Python** package manager `pip` in a **virtual** **environment**, separated from your system level **Python** dependencies.

But they have certain set of differences in terms of the way how they store your environments and also the speed at which they complete the task for you.

## `virtualenv`:

It is the by far the most used **virtual** **environment** tool to manage your pip packages in an **isolated** **environment**.

It works by installing a bunch of files in a directory (e.g. `env/`), and then modifying the PATH environment variable to prefix it with a custom bin directory (e.g. `env/bin/`).

To use it, all you have to do is **install** it, create an **environment**, then **activate** it, and you are ready to **install** the **pip** packages.

To share your **pip** packages across multiple systems, we need to create a `requirements.txt` file, which can be easily done with this command:

```bash
pip freeze > requirements.txt
```

## `pipenv`:

`pipenv` is similar to `virtualenv`, it has one extra feature, which is `Pipfile`, `Pipfile` is similat to what we see as `packages.json` in `npm`.

`Pipfile` contains all the **installed** packages in the current environment, and automatically updates itself if you install a new package inside the same environment.

Although in my personal opinion, `pipenv` is kinda slow compared to `virtualenv` but it comes with some extra features.

Basically, `pipenv` aims to combine `Pipfile`, `pip` and `virtualenv` into one command.

## `venv`:

It serves the same purpose as `virtualenv`, but only has a subset of its features. As per official docs:

> `*venv` provides support for creating lightweight **virtual environments** with their own site directories in isolation.\*

In many **Linux** distributions, `venv` comes preinstalled with **Python 3,** you can verify it using this command:

```bash
python3 -m venv -h
```

# Conclusion:

All of them are good, go for `virtualenv` as it is most easy to use, and efficient tool. Otherwise, you have other choices, spend some more time with each of them, even there are some more like `pyenv` , `pyenv-virtualenv`, `virtualenvwrapper` etc.

It's your personal choice, but you give a try to at least few of them.

> ***For more such crispy blogs daily, follow Dev.Junction, subscribe to our newsletter and get notified.***

## Social Links

* **LinkedIn:** [https://www.linkedin.com/in/mnamegaurav/](https://www.linkedin.com/in/mnamegaurav/)
    
* **YouTube:** [https://www.youtube.com/c/devjunction](https://www.youtube.com/c/devjunction)
    
* **Website:** [https://gaurav.devjunction.in/](https://gaurav.devjunction.in/)
    
* **GitHub:** [https://github.com/mnamegaurav](https://github.com/mnamegaurav)
    
* **Instagram:** [https://www.instagram.com/mnamegaurav/](https://www.instagram.com/mnamegaurav/)
    
* **Twitter:** [https://twitter.com/mnamegaurav](https://twitter.com/mnamegaurav)
