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

标签 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/位于 test_subprocess.py 的 os.sys.path 上

编辑 将 os.sys 更改为 sys

最佳答案

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

关于python - 有没有更好的方法来控制子进程的 PYTHONPATH?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12592563/

相关文章:

linux - 如何编辑 PYTHONPATH?

python - 找不到我的模块

python - 将 uuid 添加到 pandas DataFrame 中的新列

Python:如何等到子进程完成初始化

python - 如何从 SMILES 分子表示生成图形?

python - 使用文件作为子进程的标准输入和标准输出

python - 与python中子进程打开的 `/dev/tty`交互

python - 更改 docker-compose 文件中 docker 容器中的 PYTHONPATH

python - 在 matplotlib 中设置最小 y 上限和最大下 ylim

Python "TypeError: ' bool'对象不可调用”错误