为什么在虚拟环境中使用subprocess.run()执行“python m pip”时会运行错误的pip?

2024-09-30 04:38:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在跟踪测试脚本中的一个bug,由于某种原因,执行了错误的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。与测试脚本的组合完全相同。 而且我的同龄人在运行它时也没有问题。所以发生了一些特定于我的机器的事情,但我不知道从哪里开始

有人知道这是什么原因吗


Tags: piprun脚本ossysvirtualwhereexe

热门问题