我有一组脚本必须动态修改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
运行主进程会导致此控制台输出
如您所见,C:/ pytest2 /位于os.sys.path上,用于test_subprocess.py
编辑将os.sys更改为sys
答案 0 :(得分:-3)
PYTHONPATH环境变量只附加到sys.path
。 Python本身(和site
模块)从各种来源初始化模块搜索路径。您只需要通过PYTHONPATH环境变量添加一个目录。更好的方法是将其安装在通常的site-packages目录中,并且已经搜索过了。那么你就不必在环境中做任何特别的事了。