virtualenv --no-site-packages and pip still finding global packages?
I had a problem like this, until I realized that (long before I had discovered virtualenv), I had gone adding directories to the PYTHONPATH in my .bashrc file. As it had been over a year beforehand, I didn't think of that straight away.
You have to make sure you are running the pip
binary in the virtual environment you created, not the global one.
env/bin/pip freeze
See a test:
We create the virtualenv with the --no-site-packages
option:
$ virtualenv --no-site-packages -p /usr/local/bin/python mytest
Running virtualenv with interpreter /usr/local/bin/python
New python executable in mytest/bin/python
Installing setuptools, pip, wheel...done.
We check the output of freeze
from the newly created pip
:
$ mytest/bin/pip freeze
argparse==1.3.0
wheel==0.24.0
But if we do use the global pip
, this is what we get:
$ pip freeze
...
pyxdg==0.25
...
range==1.0.0
...
virtualenv==13.1.2
That is, all the packages that pip
has installed in the whole system. By checking which pip
we get (at least in my case) something like /usr/local/bin/pip
, meaning that when we do pip freeze
it is calling this binary instead of mytest/bin/pip
.
Eventually I found that, for whatever reason, pip -E was not working. However, if I actually activate the virtualenv, and use easy_install provided by virtualenv to install pip, then use pip directly from within, it seems to work as expected and only show the packages in the virtualenv
Temporarily clear the PYTHONPATH
with:
export PYTHONPATH=
Then create and activate the virtual environment:
virtualenv foo
. foo/bin/activate
Only then:
pip freeze