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). This can be used if you have control over the global site-packages directory, and you want to depend on the packages there.
Show activity on this post. You can list only packages in the virtualenv by pip freeze --local or pip list --local . This option works irrespective of whether you have global site packages visible in the virtualenv .
These are almost completely interchangeable, the difference being that virtualenv supports older python versions and has a few more minor unique features, while venv is in the standard library.
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
I know this is a very old question but for those arriving here looking for a solution:
Don't forget to activate the virtualenv (source bin/activate
) before running pip freeze
. Otherwise you'll get a list of all global packages.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With