我最近搬到了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不支持)。
答案 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/)。