簡體   English   中英

`pip install --upgrade pip` 在 Windows virtualenv 中失敗,“訪問被拒絕”

[英]`pip install --upgrade pip` fails inside a Windows virtualenv with "Access denied"

在 Windows 上,如果您嘗試使用pip升級自身,在 virtualenv 中,您可能會收到一個神秘的“訪問被拒絕”錯誤。 例如:

D:\scratch\> C:\Program Files\Python\3.7.4\x64\python.exe -m venv D:\scratch\my-venv
D:\scratch\> D:\scratch\my-venv\Scripts\activate
(my-venv) D:\scratch\> pip install --upgrade pip

Collecting pip
  Downloading pip-19.3.1-py2.py3-none-any.whl (1.4MB)
Installing collected packages: pip
  Found existing installation: pip 19.0.3
    Uninstalling pip-19.0.3:
Could not install packages due to an EnvironmentError: 
  [WinError 5] Access is denied: 'd:\\scratch\\my-venv\\scripts\\pip.exe'
Consider using the `--user` option or check the permissions.

無論命令提示符是否具有管理權限,都會發生這種情況。 我們知道我們對d:\scratch\my-venv中的所有內容都有寫訪問權限,因為我們剛剛使用初始python -m venv命令創建了它。 使用--user選項的建議沒有幫助,因為我們想在 virtualenv中升級 pip 的版本,而--user不會這樣做。

可能出了什么問題,在 Windows 上的 virtualenv 中升級 pip 的正確方法是什么?

我不知道這是否是發生這種情況的唯一原因,但請注意d:\scratch\my-venv\scripts\pip.exe處的“訪問被拒絕”錯誤點。 pip 正在嘗試替換自身,而 Windows 不允許您以任何方式修改正在運行的 EXE 文件。

此特定問題的解決方法是使用python -m pip install --upgrade pip代替。 這樣, pip.exe沒有運行,所以 Windows 將允許它被替換。 This action doesn't try to overwrite d:\scratch\my-venv\scripts\python.exe , and Windows doesn't care what pip does to all the other files belonging to the pip package.

有關詳細信息,請參閱https://github.com/pypa/pip/issues/188https://github.com/pypa/pip/issues/1299

您必須在 windows 中安裝與虛擬環境中相同版本的pip 我認為這就是虛擬環境中Access Denied錯誤的原因。

很快,

python -m pip install --upgrade pip

位於虛擬環境的Scripts文件夾下,在venv中執行更新命令升級pip

我會將此放在對 zwol 答案的評論中,但我還沒有足夠的聲譽。

我只是想像我一樣添加到其他可能從谷歌遇到這個問題的人中, python -m pip install --upgrade pip確實為我解決了這個問題。 但是,如果您在此之前嘗試pip install --upgrade pip ,那么在您遇到訪問被拒絕錯誤之前的過程中會發生一些事情,這會弄亂 pip。 我個人在嘗試以正常方式升級后遇到ModuleNotFoundError: No module named 'pip'

一旦我刪除並重新啟動了我的virtualenv並且第一個命令是python -m pip install --upgrade pip它工作得很好。

我希望這可以幫助像我一樣掙扎的其他新手:)

對我來說同樣的錯誤,但在兩種情況下:我的系統 pip 和 virtualenv pip。 所以,當我嘗試升級我的系統 pip 時,希望它不會被完全刪除,我仍然可以使用“pip”命令。 但是我知道升級系統 pip 失敗了。 當我再次嘗試該命令時,它說 pip 是最新版本 也許這只是一個小故障。 我相信虛擬環境(virtualenv,venv)也是如此。 當我升級系統 pip 時,我收到此錯誤:

ERROR: Could not install packages due to an OSError: [WinError 5] Access is denied: 'C:\\Users\\heewo\\AppData\\Local\\Temp\\pip-uninstall-8ob_krif\\pip.exe'
Consider using the `--user` option or check the permissions.

我知道這不正常。 但是,與 virtualenv 不同的是,仍然安裝了“pip”。 我相信這仍然是可以忽略的,因為這只是一個已知問題,這里的大多數人都知道這個話題。 對我來說, python -m pip install --upgrade pip在這個 Z9ED39E2EA9312586B6A985A9 中不起作用
我嘗試了這種方法,這確實對我有用。

virtualenv --pip [VERSION]

並將VERSION替換為 pip 上可用的最新版本。 當您收到錯誤時,這會打印出您嘗試升級到的版本。
這應該可以解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM