我目前有一个脚本由一个附带自己的Python解释器的程序执行。 此版本不包含我需要的库,因此我使用os.exec对本地安装的2.7实例执行第二个脚本。
然而,第二个脚本在手动执行时效果很好,并且没有定义PYTHONPATH。如果我在执行包装器时记录PYTHONPATH的输出,并且在加载第二个脚本时,它们都将PYTHONPATH初始化为原始解释器,这也恰好是2.6实例。 这显然让我相信我有一些环境变量被传递,我没有预料到,此外在其他2个系统上,这个设置按预期工作100%,而在这一个系统上,这种行为正在发生。 有没有更简洁的方法我可以创建一个包装来调用第二个脚本?如果不是,我怎么能避免这种不必要的env变量传递。
答案 0 :(得分:6)
os.exec*
命令有很多变种:
execl(file, *args)
execle(file, *args, env)
execlp(file, *args)
execlpe(file, *args, env)
execv(path, args)
execve(path, args, env)
execvp(file, args)
execvpe(file, args, env)
l
个变体使用*args
,v
变体使用args
。p
变体使用PATH环境变量来查找file
e
varients替换环境。非e
变体使用env
当前进程。您可以使用其中一个e
变体(例如os.execle
)来控制传递给新流程的环境变量。
答案 1 :(得分:2)
您可能需要查看virtualenv,它允许您创建一个沙箱,您可以在其中安装所有必需的库。