Skip to main content
 首页 » 编程设计

python之如何在 PyPy 中导入 .so 模块

2025年05月04日12qlqwjy

我是 PyPy 新手,我使用 PyPy1.9 来解释我的 Python 代码。

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

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

请您参考如下方法:

首先,CPyExt从那以后就一直在 PyPy 中……我忘记了确切的版本,但现在已经有几年了,远早于 1.9。

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

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

如果您手动安装,只需执行 pypy setup.py install 而不是 python setup.py install。如果您使用的是 pip 或 easy_install,这些工具的 PyPy 版本通常命名为类似 pip_py 和 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 和所有依赖它的东西,以及任何其他需要绑定(bind) Fortran 代码的东西。其中一些包将检查 CPython(或检查非 PyPy?)并提前给您一个错误。其他人可能会尝试构建并失败。其他人可能会成功构建但在某些情况下无法工作(例如,他们中的一些人在任何超过 1 个线程的程序中都会失败,因为他们试图对 GIL 感兴趣)。但最简单的方法就是尝试看看。