【问题标题】:Calling a python file within pypy在 pypy 中调用 python 文件
【发布时间】:2014-12-05 10:17:46
【问题描述】:

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

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

代码示例:

我使用 PyPy 不支持的库获得了一个名为 python_code.py 的 python 模块,例如 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 不支持)。

【问题讨论】:

  • “传递一些参数”是什么意思?您可以将 sys.argv 与 PyPY 一起用于命令行参数。还是你的意思是别的?我根本不清楚你到底在问什么。
  • 感谢您的回答,我刚刚编辑了问题,现在更清楚了吗?

标签: python pypy


【解决方案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/ )。

【讨论】:

    【解决方案2】:

    您不能运行(或导入)需要 pypy 不支持的模块的 python 脚本。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-28
      • 1970-01-01
      • 1970-01-01
      • 2013-03-17
      • 2023-03-23
      • 2011-08-18
      相关资源
      最近更新 更多