从不同的实例执行另一个Python实例

从不同的实例执行另一个Python实例,python,exec,Python,Exec,我目前有一个脚本正在由一个程序执行,该程序附带了自己的Python解释器。 此版本不包括我需要的库,因此我使用os.exec对本地安装的2.7实例执行第二个脚本 然而,当手动执行第二个脚本时,它工作得非常好,并且没有定义PYTHONPATH。如果我在执行包装器和加载第二个脚本时记录PYTHONPATH的输出,那么它们都将PYTHONPATH初始化为原始解释器,而原始解释器恰好也是2.6实例。 这显然让我相信我传递了一些我没有预料到的环境变量,此外,在另外两个系统上,此设置100%按预期工作,而在

我目前有一个脚本正在由一个程序执行,该程序附带了自己的Python解释器。 此版本不包括我需要的库,因此我使用os.exec对本地安装的2.7实例执行第二个脚本

然而,当手动执行第二个脚本时,它工作得非常好,并且没有定义PYTHONPATH。如果我在执行包装器和加载第二个脚本时记录PYTHONPATH的输出,那么它们都将PYTHONPATH初始化为原始解释器,而原始解释器恰好也是2.6实例。 这显然让我相信我传递了一些我没有预料到的环境变量,此外,在另外两个系统上,此设置100%按预期工作,而在这一个系统上,此行为正在发生。
有没有更干净的方法可以创建一个包装器来调用第二个脚本?如果没有,我如何避免这种不必要的环境变量传递。

该命令有许多变体:

  • l
    变体使用
    *args
    v
    变体使用
    args
  • p
    变体使用PATH环境变量查找
    文件
  • e
    各种因素取代了环境。非
    e
    变体使用 当前进程

您可以使用
e
变体之一,例如
os.execle
,来控制传递给新进程的环境变量。

您可能想看看,这基本上可以创建一个沙箱,您可以在其中安装所有必需的库。

为什么要打包一个不适合您需要的Python解释器?如果您必须依赖于预先安装的Python版本,那么在包中包含Python解释器似乎没有任何意义。我还没有创建原始程序,因此无法控制包含的版本。这只是扩展功能所必需的解决方法。您是否尝试使用
os.execle
显式传递所需的环境变量?我将查看相关文档。理想情况下,我希望我可以完全使用本地安装的解释器执行它,并让它使用任何设置或未设置的变量。@unutbu如果您愿意将其作为答案发布,我将接受。我使用了它,刚刚通过{}清除了所有的env变量,现在一切都正常运行了。谢谢。我用过;execve(Pythonbinary,args,{}),其中{}不向新脚本传递任何环境变量。虽然上面的答案已经解决了我的问题,但我一定会把它添加到书签中,并在某个时候好好看看,只要快速扫描一下,我就能看到它在未来的一些可能用途。
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)