【问题标题】:python subprocess doesn't inherit virtual environmentpython子进程不继承虚拟环境
【发布时间】:2020-11-10 02:11:48
【问题描述】:

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

理想情况下,我希望该方法可以移植到 Linux,但我会采用任何能让项目运行的方法。

这是我的测试:

  • main.py 使用 Popen 调用 sub_proc.py。
  • sub_proc.py 导入 uuid_shortener,已安装在虚拟环境中。

如果我直接运行 sub_proc.py,它运行时不会出错。

但是,如果我运行 main.py,我会在 uuid_shortener 的导入语句中看到错误。

ma​​in.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>

【问题讨论】:

    标签: python-3.x windows subprocess


    【解决方案1】:

    使用sys.executable 代替'python'sys.executable 指的是您正在运行的可执行文件

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

    【讨论】:

      猜你喜欢
      • 2019-09-08
      • 1970-01-01
      • 1970-01-01
      • 2019-08-29
      • 1970-01-01
      • 2016-10-26
      • 2013-08-24
      相关资源
      最近更新 更多