我对PyPy很绿,我使用PyPy1.9来解释我的Python代码。
如您所知,CPython解释器可以导入打包在.so文件中的模块,该文件是从C / C ++代码编译的。
但是PyPy1.9解释器告诉我他在.so文件中找不到该模块,我的代码有点慢,我想优化性能,帮助!!
答案 0 :(得分:2)
首先,CPyExt一直在PyPy中......我忘记了确切的版本,但现在已经过了几年,远在1.9之前。
基本上,您所要做的就是构建和安装模块,就像使用CPython一样。
确保使用PyPy进行安装,而不是使用CPython进行安装。除了系统上的每个Python安装都有一个单独的site-packages
目录之外,CPyExt还需要针对PyPy头文件和库构建模块,而不是CPython文件。
如果您是手动安装,请执行pypy setup.py install
而不是python setup.py install
。如果您使用的是pip
或easy_install
,则这些工具的PyPy版本通常会被命名为pip_pypy
和easy_install_pypy
。
因此,如果您安装了pip
,它应该像以下一样简单:
pip_pypy install foo
(当然可能有sudo
。)
如果您还没有installed pip
,请按照与CPython相同的方式为PyPy安装它。例如:
curl -O https://raw.github.com/pypa/pip/master/contrib/get-pip.py
pypy get-pip.py
如果您使用的是二进制安装程序,那么显然您必须获取PyPy-1.9的二进制安装程序。而且,如果没有,则不能使用二进制安装程序。 (就像你想在32位Windows上为CPython 2.7安装foo
并且它们只有2.6包或64位包。)
最后一点:有些软件包尚未与CPyExt配合使用。最值得注意的是,numpy
以及依赖于它的所有内容,以及需要绑定Fortran代码的任何其他内容。其中一些包会检查CPython(或检查非PyPy?)并给你一个早期错误。其他人可能会尝试构建并失败。其他人可能会成功构建但在某些情况下无法工作(例如,其中一些在任何具有多于1个线程的程序中都会失败,因为他们试图使用GIL。)但最简单的方法就是尝试并看看。
答案 1 :(得分:-1)
对于PyPy,您需要使用CFFI之类的内容,使用Foreign Function Interface来访问库代码(有关详细信息,请参阅Loading Libraries部分)。
修改:我已经通过上述答案予以纠正了。我会在这里留下这个答案,但是有一个替代方法可以访问库并简单地接受合理的downvotes。