python 子进程不继承虚拟环境
python subprocess doesn't inherit virtual environment
在 W10 上使用 venv 操作时,如果从目录中的文件调用子进程,子进程似乎无法访问 venv。有什么办法让它起作用吗?
理想情况下,我希望这种方法可以移植到 Linux,但我会采取任何能得到项目 运行ning 的方法。
这是我的测试:
- main.py 使用 Popen 调用 sub_proc.py.
- sub_proc.py导入uuid_shortener,已经在虚拟环境中安装
如果我直接 运行 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 的访问
在 W10 上使用 venv 操作时,如果从目录中的文件调用子进程,子进程似乎无法访问 venv。有什么办法让它起作用吗?
理想情况下,我希望这种方法可以移植到 Linux,但我会采取任何能得到项目 运行ning 的方法。
这是我的测试:
- main.py 使用 Popen 调用 sub_proc.py.
- sub_proc.py导入uuid_shortener,已经在虚拟环境中安装
如果我直接 运行 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 的访问