When running the system-installed python, I can find pip:
% which python3
/usr/local/bin/python3
% python3 --version
Python 3.9.7
% /usr/local/bin/python3 -m pip --version
pip 21.3.1 from /usr/local/lib/python3.9/site-packages/pip (python 3.9)
However, if I create a virtualenv with this python3
and activate it, then I can no longer find pip
:
% which python3
~/venv/bin/python3
% ls -la `which python3`
~/venv/bin/python3 -> /usr/local/bin/python3
% python3 -m pip --version
~/venv/bin/python3: No module named pip
I am completely baffled by this.
What is it about reading through a symlink that could make pip
disappear?
CodePudding user response:
The python's venv
module introduced in python 3.3 is different from virtualenv
and has a subset of virtualenv
's features.
From https://virtualenv.pypa.io/en/latest/
The
venv
module does not offer all features of this library, to name just a few more prominent:
- is slower (by not having the app-data seed method)
- is not as extendable, cannot create virtual environments for arbitrarily installed python versions (and automatically discover
these),- is not upgrade-able via pip,
- does not have as rich programmatic API (describe virtual environments without creating them).
So an environment created using venv
does not have a separate pip
installed so I would recommend using virtualenv
instead.
You can install the virtualenv
module by running
pip3 install virtualenv
python3 -m env_name .
or if you have virualenv
installed already and is in your path, you can also use
virtualenv env_name -p python3