`pip install --upgrade pip` не работает в Windows virtualenv с« Отказано в доступе » - PullRequest
0 голосов
/ 30 октября 2019

В 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 бесполезен, так как мы хотим обновить версию pip внутри virtualenv , чего не будет делать --user.

Что может быть не так,и как правильно обновить pip внутри virtualenv в Windows?

1 Ответ

2 голосов
/ 30 октября 2019

Я не знаю, является ли это только причиной, по которой это может произойти, но обратите внимание, что ошибка "Доступ запрещен" указывает на d:\scratch\my-venv\scripts\pip.exe. pip пытается заменить сам , и Windows не позволяет вам каким-либо образом изменять работающий EXE-файл.

Обходной путь для этой конкретной проблемы - вместо этого использовать python -m pip install --upgrade pip. Таким образом, pip.exe не работает, поэтому Windows разрешит его замену. Это действие не пытается перезаписать d:\scratch\my-venv\scripts\python.exe, и Windows не волнует, что pip делает со всеми остальными файлами, принадлежащими пакету pip.

См. https://github.com/pypa/pip/issues/188 и https://github.com/pypa/pip/issues/1299 для получения дополнительной информации.

...