簡體   English   中英

為什么在虛擬環境中使用 subprocess.run() 執行“python -m pip”時會運行錯誤的 pip?

[英]Why does 'python -m pip' runs the wrong pip when executed using subprocess.run() from a virtual environment?

我正在追蹤我們測試腳本中的一個錯誤,其中由於某種原因執行了錯誤的 pip。 我制作了一個最小的腳本來重現它,以確保它不是測試腳本的罪魁禍首。 所以我的最小腳本是:

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的唯一一種情況,出於某種原因,它執行系統的 pip 而不是 venv one。 正是測試腳本所做的組合。 我的同齡人運行它也沒有問題。 所以發生了一些特定於我的機器的事情,但我不知道從哪里開始。

有誰知道是什么原因造成的?

看起來這是 3.7.3 中引入的錯誤

可能的解決方法是在調用另一個 python 進程時使用sys.executable而不是依賴操作系統來找到正確的路徑。

暫無
暫無

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

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