2014-12-05 72 views
0

我最近转移到PyPy。它的速度非常快,但很多python库尚未实现。所以我有很多自制的python函数,我想在PyPy代码中调用。在pypy中调用python文件

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

一个代码示例:

我使用不受PyPy,matplotlib例如支持库名为python_code.py一个Python模块。

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不支持)。

+1

你是什么意思与*“传递一些论据”*?你可以在PyPY中使用'sys.argv'作为命令行参数。或者你的意思是别的吗?我一点也不清楚你究竟在问什么。 – Carpetsmoker 2014-12-05 10:20:29

+0

感谢您的回答,我刚刚编辑了这个问题,现在更清楚了吗? – hulyce 2014-12-05 10:54:28

回答

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/)。

1

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

你其实可以use matplotlib from within pypy,但它非常非常hackish(很难做到)。

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