Windows 中一個程序運行時其可執行文件是鎖定狀態,pip.exe 就沒法更新自己:
> Get-Command pip
CommandType Name Version Source
----------- ---- ------- ------
Application pip.exe 0.0.0.0 D:\src\venv\Scripts\pip.exe
> pip install -U pip
ERROR: Could not install packages due to an OSError: [WinError 5] 拒絕訪問。: 'd:\\src\\venv\\scripts\\pip.exe'
Check the permissions.
而且如果貿然這麼做,會發現接下來 pip 找不到自己了:
> pip install -U wheel setuptools
Traceback (most recent call last):
File "C:\Python39\lib\runpy.py", line 197, in _run_module_as_main
return _run_code(code, main_globals, None,
File "C:\Python39\lib\runpy.py", line 87, in _run_code
exec(code, run_globals)
File "D:\src\venv\Scripts\pip.exe\__main__.py", line 4, in <module>
ModuleNotFoundError: No module named 'pip'
遇到這種情況先使用 ensurepip 恢復:
> python -m ensurepip --upgrade
Requirement already satisfied: setuptools in d:\src\venv\lib\site-packages (60.9.3)
Processing c:\users\my\appdata\local\temp\2\tmpwjrpp76v\pip-21.2.3-py3-none-any.whl
Installing collected packages: pip
Successfully installed pip-21.2.3
再繞開 pip.exe 更新:
> python -m pip install -U pip
Requirement already satisfied: pip in d:\src\venv\lib\site-packages (21.2.3)
Collecting pip
Installing collected packages: pip
Attempting uninstall: pip
Found existing installation: pip 21.2.3
Uninstalling pip-21.2.3:
Successfully uninstalled pip-21.2.3
Successfully installed pip-22.0.4