在pypy中调用python文件

时间:2014-12-05 10:17:47

标签: python pypy

我最近搬到了PyPy。它的速度非常快,但很多python库还没有实现。所以我有很多自制的python函数,我想在PyPy代码中调用。

这是我的问题:有没有办法在PyPy中调用python文件或函数,并传递一些参数?

代码示例:

我有一个名为python_code.py的python模块,使用的是PyPy不支持的库,例如matplotlib

import matplotlib as mp

def my_custom_ploting_function(*args,**kwargs):
    some code

我想像这样创建一个名为pypy_code.py的PyPY模块:

from python_code import my_custom_ploting_function

def my_custom_pypy_ploting_function(*args,**kwargs):
    my_custom_ploting_function(*args,**kwargs)

但是这段代码不起作用,因为PyPy无法导入python_code模块,因为它会尝试导入matplotlib(PyPy不支持)。

2 个答案:

答案 0 :(得分:1)

你不能运行(或导入)需要pypy不支持的模块的python scritps。

你实际上可以use matplotlib from within pypy,但它非常非常hackish(并且很难)。

这里的简单答案是只使用普通的python 。如果你正在进行数字操作,那么无论如何,所有密集代码都应该在numpy内。

答案 1 :(得分:1)

你不能期望导入模块并让它们共存在同一个程序中,这个程序将运行一半CPython和一半PyPy。但是,您可以做的是主要在两个解释器之一中运行您的程序,并将另一个作为一个额外的库,您可以在较低级别与Python对象进行通信。

例如,如果您只想使用matplotlib来显示某些图形,您可以从PyPy启动一个CPython程序(使用os.system()subprocess模块)并将数据传递给显示在这种或那种方式(例如通过将其发送到管道中)。如果这对你想要的东西太有限,那么还有其他更多的选择。例如,您可以在PyPy中加载libpython2.7.so并使用CFFI调用其C API。或者相反:将PyPy嵌入到CPython中(例如http://jitpy.readthedocs.org/en/latest/)。