Почему 'python -m pip' запускает неправильный pip при выполнении с помощью subprocess.run () из виртуальной среды? - PullRequest
1 голос
/ 02 марта 2020

Я отслеживаю ошибку в наших тестовых скриптах, где по какой-то причине выполняется неправильный пункт. Я сделал минимальный сценарий, чтобы воспроизвести его, чтобы убедиться, что это не тестовый сценарий. Итак, мой минимальный сценарий:

import os
import subprocess
import sys

print(sys.executable)

print('system pip:')
os.system('pip -V')
print()

print('system python pip:')
os.system('python -m pip -V')
print()

print('system where python:')
os.system('where python')
print()

print('system VIRTUAL_ENV:')
os.system('cmd /c echo %VIRTUAL_ENV%')
print()

print('system PYTHONPATH:')
os.system('cmd /c echo %PYTHONPATH%')
print()


print('subprocess pip:')
subprocess.run(['pip', '-V'])
print()

print('subprocess python pip:')
subprocess.run(['python', '-m', 'pip', '-V'])
print()

print('subprocess where python:')
subprocess.run(['cmd', '/c', 'where', 'python'])
print()

print('subprocess sys.executable pip:')
subprocess.run([sys.executable, '-m', 'pip', '-V'])
print()

print('subprocess VIRTUAL_ENV:')
subprocess.run(['cmd', '/c', 'echo', '%VIRTUAL_ENV%'])
print()

print('subprocess PYTHONPATH:')
subprocess.run(['cmd', '/c', 'echo', '%PYTHONPATH%'])
print()

И когда я запускаю его с активным venv, он печатает:

C:\Users\Calmarius\pythonvenv\myvenv\Scripts\python.exe
system pip:
pip 20.0.2 from c:\users\calmarius\pythonvenv\myvenv\lib\site-packages\pip (python 3.7)

system python pip:
pip 20.0.2 from C:\Users\Calmarius\pythonvenv\myvenv\lib\site-packages\pip (python 3.7)

system where python:
C:\Users\Calmarius\pythonvenv\myvenv\Scripts\python.exe
C:\Program Files\Python37\python.exe
C:\Users\Calmarius\AppData\Local\Microsoft\WindowsApps\python.exe

system VIRTUAL_ENV:
C:\Users\Calmarius\pythonvenv\myvenv

system PYTHONPATH:
%PYTHONPATH%

subprocess pip:
pip 20.0.2 from c:\users\calmarius\pythonvenv\myvenv\lib\site-packages\pip (python 3.7)

subprocess python pip:
pip 20.0.2 from C:\Program Files\Python37\lib\site-packages\pip (python 3.7)

subprocess where python:
C:\Users\Calmarius\pythonvenv\myvenv\Scripts\python.exe
C:\Program Files\Python37\python.exe
C:\Users\Calmarius\AppData\Local\Microsoft\WindowsApps\python.exe

subprocess sys.executable pip:
pip 20.0.2 from C:\Users\Calmarius\pythonvenv\myvenv\lib\site-packages\pip (python 3.7)

subprocess VIRTUAL_ENV:
C:\Users\Calmarius\pythonvenv\myvenv

subprocess PYTHONPATH:
%PYTHONPATH%

В основном он работает как положено, за исключением одного случая, когда python -m pip выполняется с использованием подпроцесса, по какой-то причине он выполняет пипс системы, а не venv. Именно комбинация тестовых скриптов. Также мои коллеги не имеют проблем с его запуском. Так что произошло что-то, что конкретно c для моей машины, но я не с чего начать.

Кто-нибудь знает, что может вызвать это?

1 Ответ

1 голос
/ 03 марта 2020

Похоже, что это ошибка , представленная в 3.7.3.

Возможный обходной путь - использование sys.executable при вызове другого процесса python вместо того, чтобы полагаться на ОС для поиска правильный путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...