Recently I have started to use virtualenv
, and it has changed my life, and made so many things so much easier. However, some packages I would like available in all virtualenvs, and I haven't figured out how to do this. Is there a way to have pip install certain packages every time I create a new virtualenv?

- 16,408
- 8
- 64
- 87
3 Answers
From documentation: If you build with virtualenv --system-site-packages ENV, your virtual environment will inherit packages from /usr/lib/python2.7/site-packages (or wherever your global site-packages directory is).

- 7,596
- 3
- 27
- 39
If there is a particular set you always want, which is distinct from the global site-packages collection, you could write a simple wrapper script which sets up the env, activates it, and installs those packages.
#!/bin/sh
virtualenv "$1"
. "$1"/bin/activate
pip install six # f'rinstance
If you save this as venvwrapper
you cound alias virtualenv=venvwrapper
in your .bashrc
or similar.

- 175,061
- 34
- 275
- 318
While the other answers to this question are both very valuable and informative, I was looking for a solution similar to that suggested by @Sergey Gornostaev. However, I am on Ubuntu and install most of my Python packages (at least the ones I want available globally) through apt
. That means my packages end up in dist-packages
while site-packages
remains empty, so I can't use @Sergey's solution. Instead, I used the solution in this answer.
Basically, I install the packages I want available in all environments through apt
if possible. Then I add the following (or some variation of it) to my .bashrc
:
export PYTHONPATH=/usr/lib/python2.7/dist-packages:/usr/local/lib/python2.7/dist-packages
This way all those packages are available, and then I can install indivdual packages sepecifc to a given virtual environment through pip
from within the virtualenv
. It might not be an ideal solution, but it meets my current needs, so this is what I will be using for now.