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

时间:2012-09-25 23:28:55

标签: 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)

C:/pytest/test_subprocess.py

import sys
print 'sys path'
print sys.path

运行主进程会导致此控制台输出

enter image description here

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

编辑将os.sys更改为sys

1 个答案:

答案 0 :(得分:-3)

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