有没有更好的方法来控制子进程的 PYTHONPATH?

Mie*_*ter 7 python subprocess pythonpath

我有一组必须动态修改 os.sys.path 的脚本。然后脚本启动一个子流程。理想情况下,子进程将与调用者具有相同的 os.sys.path。我想避免将它作为参数传递,因为这需要修改子流程脚本。

我有可以工作并满足我所有需求的代码。我想知道是否有更好的方法来做到这一点,以及这种方法是否存在任何缺陷。

主要流程

import os
import sys
import subprocess

#append a dir thats not on the sys path
sys.path.append('C:/pytest2/')

#convert the sys.path into env variable format
pypath = ''
for d in sys.path:
    pypath = pypath + d + ';'

#create a temp copy of the env variables
myenv = os.environ.copy()

#set PYTHONPATH to match this scripts sys.path
myenv['PYTHONPATH'] = pypath

#setup a python command to echo the sys.path
command = 'python C:/pytest/test_subprocess.py'

#launch the subprocess with the custom env
p = subprocess.Popen(command, env=myenv)
Run Code Online (Sandbox Code Playgroud)

C:/pytest/test_subprocess.py

import sys
print 'sys path'
print sys.path
Run Code Online (Sandbox Code Playgroud)

在此控制台输出中运行主进程

在此处输入图片说明

如您所见,C:/pytest2/ 位于 test_subprocess.py 的 os.sys.path

编辑 将 os.sys 更改为 sys

Kei*_*ith -3

PYTHONPATH 环境变量仅附加到sys.path. Python 本身(和site模块)从各种来源初始化模块搜索路径。您只需通过 PYTHONPATH 环境变量添加一个目录。更好的方法是将其安装在已搜索到的常用站点包目录中。那么你就不需要在环境中做任何特殊的事情。