python 子进程不继承虚拟环境

python subprocess doesn't inherit virtual environment

在 W10 上使用 venv 操作时,如果从目录中的文件调用子进程,子进程似乎无法访问 venv。有什么办法让它起作用吗?

理想情况下,我希望这种方法可以移植到 Linux,但我会采取任何能得到项目 运行ning 的方法。

这是我的测试:

如果我直接 运行 sub_proc.py 它 运行 没有错误。

但是,如果我 运行 main.py 我在 uuid_shortener.

的导入语句中看到错误

main.py

import subprocess
import time

print(subprocess.Popen(['python', 'sub_proc.py']))
time.sleep(1)

sub_proc.py

import uuid_shortener

这是 运行 代码的输出。

(venv) PS C:\Users\...\popenvenv> python .\sub_proc.py

(上面没有错误)

(venv) PS C:\Users\...\popenvenv> python .\main.py
<Popen: returncode: None args: ['python', 'sub_proc.py']>
Traceback (most recent call last):
  File "C:\Users\...\popenvenv\sub_proc.py", line 1, in <module>
    import uuid_shortener
ModuleNotFoundError: No module named 'uuid_shortener'
(venv) PS C:\Users\...\popenvenv>

sys.executable代替'python'sys.executable 指的是您 运行

的可执行文件

这将在子进程中保留对 virtualenv 的访问