Arch-Linux

為什麼 Python 的 pip 在每個新的虛擬環境中都會重置為 10.0.1 版本?

  • August 25, 2018

tl;dr:為什麼每次我創建新的虛擬環境時 pip 的版本都會重置為 10.0.1,而不是從我的全域 18.0 安裝中自動複製?

每次我創建一個新的虛擬環境時,我都會被告知我的環境pip已經過時了。我跑

$ pip install --upgrade pip

並得到以下輸出:

Collecting pip
 Using cached https://files.pythonhosted.org/packages/5f/25/e52d3f31441505a5f3af41213346e5b6c221c9e086a166f3703d2ddaf940/pip-18.0-py2.py3-none-any.whl
Installing collected packages: pip
 Found existing installation: pip 10.0.1
   Uninstalling pip-10.0.1:
     Successfully uninstalled pip-10.0.1
Successfully installed pip-18.0

pip -V在虛擬環境之外執行返回

pip 18.0 from /usr/lib/python3.7/site-packages/pip (python 3.7)

所以只有在我創建新的虛擬環境時才會創建過時的版本。

這是python虛擬環境模組的一個特性嗎?

作為記錄,我執行創建新虛擬環境的命令是:

$ python -m venv <venv>

我通過執行安裝它

$ pacman -S python python-pip

我在 Arch 中執行它,輸出python -VPython 3.7.0.

pip創建新的虛擬環境時不會重置。當您創建一個新的虛擬環境時,在這個環境中venv執行一個新的安裝。版本從哪裡來?當您執行時,安裝是引導新安裝的模組的責任。您可以查看Python 3.7 捆綁的版本:pip``setuptools``pip``python -m venv``pipensurepippip``pip

$ python3 -c "import ensurepip; print(ensurepip.version())"
10.0.1

這不是您可以自己更新或修改的內容;該模組是標準庫的一部分。Python 3.7 發佈時,最新pip的是 10.0.1 版本,所以它被捆綁了(相關問題)。版本 18 稍後發布。下一次,它可能會在下一個 Python 版本(3.7.1)中更新。

替代方案:使用virtualenv

如果您希望pip在全新的虛擬環境中安裝最新版本,您可以切換到virtualenv

$ pip install --user virtualenv

或使用安裝系統範圍pacman

$ pacman -S python-virtualenv

virtualenv比 Python 更新的更頻繁,所以最新版本安裝了最新的包。使用範例:

$ virtualenv myenv --python=python3 --quiet
$ source myenv/bin/activate
(myenv) $ pip --version
pip 18.0 from /Users/hoefling/.virtualenvs/myenv/lib/python3.7/site-packages/pip (python 3.7)

引用自:https://unix.stackexchange.com/questions/464671