问题
I'm setting up virtual env. I was getting warnings about an outdated pip (19.2) so I updated pip on my (macos) system globally, sudo -H python3 -m pip install --upgrade pip. It seems to have worked, but when I make a new venv, I'm still getting the old pip version.
% pip --version
pip 20.1 from /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pip (python 3.8)
% python3 -m pip --version
pip 20.1 from /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pip (python 3.8)
% rm -rf .venv # make sure
% python3 -m venv .venv
% . .venv/bin/activate
(.venv) % python3 -m pip --version
pip 19.2.3 from /Users/marvin/.venv/lib/python3.8/site-packages/pip (python 3.8)
(.venv) % pip --version
pip 19.2.3 from /Users/marvin/.venv/lib/python3.8/site-packages/pip (python 3.8)
Where is the older version coming from?
回答1:
Pip is installed anew in any freshly created venv. The venv's default pip version is associated with the Python version, and is completely independent from whatever pip version you may have installed on the system. The older version comes from a wheel file bundled with the stdlib ensurepip module. This allows users to create a venv even with no internet connection available, as the venv docs mention:
Unless the
--without-pipoption is given,ensurepipwill be invoked to bootstrappipinto the virtual environment
You can check the bundled pip version with ensurepip.version:
>>> import ensurepip
>>> ensurepip.version()
'19.2.3'
Python 3.8 is currently vendoring pip 19.2.3 and setuptools 41.2.0, matching what you've seen.
To create venvs directly with the latest pip version, rather than creating them with an older pip and then upgrading the pip version, refer to this answer:
How to get “python -m venv” to directly install latest pip version
来源:https://stackoverflow.com/questions/61553778/why-is-my-venv-using-a-different-pip-version-than-i-have-installed