【发布时间】:2017-05-03 02:35:25
【问题描述】:
如果自定义模块不在 sys.path 变量的任何目录中,以下代码允许我动态识别和加载自定义模块
import sys
sys.path.append("/lib")
但是,这给了我 OSError
import subprocess
x = subprocess.Popen(["export", "PYTHONPATH=/lib"], stdout=subprocess.PIPE)
不仅如此,即使是简单的 Linux/Unix 变量声明设置在 subprocess.Popen() 中也会失败
import subprocess
x = subprocess.Popen("x=y", stdout=subprocess.PIPE)
我想检查子进程,因为我尝试通过 os.system()、os.popen() 等设置 PYTHONPATH,但变量没有设置(可能是在子进程 shell 中设置)
【问题讨论】:
-
export是内置的 shell 命令,而不是程序。无论如何,在子进程中设置它不会影响当前的python进程。你需要os.environdocs.python.org/3/library/os.html?highlight=environ#os.environ。 -
os.environ["PYTHONPATH"] = "/dir" 和 subprocess.call(["export PYTHONPATH=/dir"], shell=True) 两个代码都可以帮助我设置环境变量 PYTHONPATH ,但即使在设置之后,我也无法加载该目录下存在的模块,并且我没有看到将此目录条目注入到 sys.path 变量中
-
subprocess.call(["export PYTHONPATH=/dir"], shell=True)只会影响一个子进程——环境变量不是全局的,它们不是共享的,它们是从父进程复制到子进程的。设置os.environ["PYTHONPATH"] = "/dir"不会设置当前进程的sys.path,因为 PYTHONPATH 是在进程启动时读取的,而不是稍后。
标签: python