2

我对 PyPy 很陌生,我使用 PyPy1.9 来解释我的 Python 代码。

如您所知,CPython 解释器可以导入打包在 .so 文件中的模块,该文件由 C/C++ 代码编译而成。

但是PyPy1.9解释器告诉我他在.so文件中找不到模块,我的代码有点慢,我想优化性能,求助!!

4

2 回答 2

2

首先,CPyExt一直在 PyPy 中......我忘记了确切的版本,但几年前,远在 1.9 之前。

基本上,您所要做的就是构建和安装模块,就像使用 CPython 一样。

确保使用 PyPy 进行安装,而不是使用 CPython。除了系统上的每个 Python 安装都有一个单独的site-packages目录这一​​事实之外,CPyExt 还需要针对 PyPy 头文件和库而不是 CPython 构建模块。

如果您要手动安装,只需执行pypy setup.py install而不是python setup.py install. 如果您使用pipor easy_install,这些工具的 PyPy 版本通常命名为pip_pypyand easy_install_pypy

所以,如果你已经安装了pip,它应该很简单:

pip_pypy install foo

(当然,可能带有sudo。)

如果您尚未安装pip,请按照与 CPython 相同的方式为 PyPy 安装它。例如:

curl -O https://raw.github.com/pypa/pip/master/contrib/get-pip.py
pypy get-pip.py

如果您使用的是二进制安装程序,那么显然您必须获取 PyPy-1.9 的二进制安装程序。而且,如果没有,则不能使用二进制安装程序。(就像如果你想foo在 32 位 Windows 上安装 CPython 2.7 并且它们只有 2.6 包或 64 位包。)


最后一点:有些包还不能与 CPyExt 一起使用。最值得注意的是,numpy所有依赖于它的东西,以及任何其他需要绑定 Fortran 代码的东西。其中一些包将检查 CPython(或检查非 PyPy?)并给你一个早期的错误。其他人可能会尝试构建并失败。其他人可能会成功构建,但在某些情况下无法工作(例如,他们中的一些人在具有超过 1 个线程的任何程序中失败,因为他们试图对 GIL 感兴趣)。但最简单的方法是尝试并查看。

于 2013-03-05T02:55:18.413 回答
-1

对于 PyPy,您需要使用类似CFFI的东西,它使用外部函数接口来访问库代码(有关更多信息,请参阅加载库部分)。

编辑:我接受上述答案的纠正。我将把这个答案留在这里,尽管有一个替代方法来访问库并简单地接受合理的反对票。

于 2013-03-05T02:53:57.703 回答