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

标签 python interpreter cpython pypy netcdf

我是 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。如果您使用的是 pipeasy_install,这些工具的 PyPy 版本通常命名为类似 pip_pyeasy_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 感兴趣)。但最简单的方法就是尝试看看。

关于python - 如何在 PyPy 中导入 .so 模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15214813/

相关文章:

python - 为什么 `is` 运算符在脚本中的行为与 REPL 不同?

python - 旋转 pandas 数据框后无法读取列

python - 埃拉托斯特尼筛法的理解

java - Eclipse 内置 shell

javascript - 递归使用 eval() 是检查程序执行的好方法吗?

python - 到底怎么回事...? Python C 代码创建的文件的文件权限

python - func(a)(**kwargs)) 是什么意思

python - 修改描述函数以删除和添加列

javascript - 可以有条件地解析 Javascript 代码吗?

Python:为什么我的基于生成器的范围比 xrange 慢 X2?