创建pypy进程

创建pypy进程

问题描述:

我想创建一个运行PyPy的进程。我试过以下,它的工作原理:创建pypy进程

import os 
os.chdir('<path-to-pypy-download>/bin/') 
os.execl('pypy', 'pypy', '-c', 'print "Hi!"') 

然而,当我删除chdir为:

import os 
os.execl('<path-to-pypy-download>/bin/pypy', 'pypy', '-c', 'print "Hi!"') 

我得到:

debug: WARNING: Library path not found, using compiled-in sys.path. 
debug: WARNING: 'sys.prefix' will not be set. 
debug: WARNING: Make sure the pypy binary is kept inside its tree of files. 
debug: WARNING: It is ok to create a symlink to it from somewhere else. 
debug: OperationError: 
debug: operror-type: ImportError 
debug: operror-value: No module named os 

请,没有人知道如何酿出PyPy进程不改变工作目录?

+0

您是否尝试过为'arg0'和'path'传递完整路径?因为大概它使用(sys.argv [0])的(RPython /编译为C的等价物)来查找它的库路径。 – abarnert 2014-12-05 20:08:56

这可能是不正确的(在这种情况下,我会删除它),但我敢肯定,所有你需要做的是:

os.execl('<path-to-pypy-download>/bin/pypy', 
     '<path-to-pypy-download>/bin/pypy', '-c', 'print "Hi!"') 

换句话说,通过对全路径arg0 as well as path

为什么?那么,当PyPy启动时,它必须使用(RPython /编译为C的等价物)sys.argv[0]来查找自定义stdlib的路径。还有什么可以使用的?当然这只是从char *argv[]参数中复制传递给解释器的main函数。当你让操作系统为你启动一个程序时,它会把完整的路径放在那里。但是,当你明确地将其设置为execl时,它只会复制你给它的任何东西。

它实际上是一个复杂得多,这 - 它确实readlink(允许符号连接)和abspath(允许自己被相对路径,如在第一个例子中运行)。但基本的想法是一样的。

作为一个方面说明,您可能想要考虑使用完全安装的PyPy,而不是使用构建树PyPy,在这种情况下,它的sys.prefix将被正确设置,因此它不需要这个。