我对 PyPy 很陌生,我使用 PyPy1.9 来解释我的 Python 代码。
如您所知,CPython 解释器可以导入打包在 .so 文件中的模块,该文件由 C/C++ 代码编译而成。
但是PyPy1.9解释器告诉我他在.so文件中找不到模块,我的代码有点慢,我想优化性能,求助!!
我对 PyPy 很陌生,我使用 PyPy1.9 来解释我的 Python 代码。
如您所知,CPython 解释器可以导入打包在 .so 文件中的模块,该文件由 C/C++ 代码编译而成。
但是PyPy1.9解释器告诉我他在.so文件中找不到模块,我的代码有点慢,我想优化性能,求助!!
首先,CPyExt一直在 PyPy 中......我忘记了确切的版本,但几年前,远在 1.9 之前。
基本上,您所要做的就是构建和安装模块,就像使用 CPython 一样。
确保使用 PyPy 进行安装,而不是使用 CPython。除了系统上的每个 Python 安装都有一个单独的site-packages
目录这一事实之外,CPyExt 还需要针对 PyPy 头文件和库而不是 CPython 构建模块。
如果您要手动安装,只需执行pypy setup.py install
而不是python setup.py install
. 如果您使用pip
or easy_install
,这些工具的 PyPy 版本通常命名为pip_pypy
and 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 感兴趣)。但最简单的方法是尝试并查看。