只是一个简单的问题,我如何让 pypy 识别我在 Python 中拥有的第三方模块?例如,我收到以下错误。
from tables import *
ImportError: No Module named tables
这基本上是说它在我试图运行的脚本中找不到我用来与之交互的 pytables 库。
对于纯 python 模块,只需将包含模块的目录添加到您的 sys.path 中,使用类似:
sys.path.insert(0, '/usr/local/lib')
sys.path.insert(0, os.path.expanduser('~/lib'))
这适用于 CPython、Pypy 和 Jython。
对于 C 扩展模块,您可以尝试 Pypy 的 cpyext,但它不会运行您可能希望的一切,因为一些 CPython C 扩展模块会徘徊在 CPython 基于 C 的运行时的黑暗角落:http: //morepypy.blogspot.com/ 2010/04/using-cpython-extension-modules-with.html
我有时会编写使用 ctypes 与 C .so 交互的代码,然后在 CPython 和 Pypy 上都使用它,因为它们都可以很好地使用 ctypes - 但 ctypes 在 CPython 上可能有点慢: http://docs.python .org/library/ctypes.html 上次我检查,Jython 有 ctypes 的开始,但它还远远不够使用,至少不适合我的目的。
还有一个新接口需要在运行时使用 C 编译器。它可能比 ctypes 不那么脆弱(阅读:容易出现段错误)。它在这里描述:http: //morepypy.blogspot.com/2012/06/release-01-of-cffi.html 它来自我相信的 Pypy 项目,但它首先在 CPython 上工作。AFAIK,它还没有在 Pypy 上运行。
Pypy 有一个单独的安装空间。因此,你想从 pypi 安装的任何模块都应该安装到它的空间中。因此,例如,我在 /usr/local/pypy-1.9-32bit 中安装了 pypy
我建议使用 pip 或 easy_install。以下是安装 pip 的方法:
curl curl https://bootstrap.pypa.io/get-pip.py | /usr/local/pypy-1.9-32bit/bin/pypy
或者
curl https://raw.github.com/pypa/pip/master/contrib/get-pip.py | /usr/local/pypy-1.9-32bit/bin/pypy
然后,只需使用新安装的 pip 即可获取模块:
sudo /usr/local/pypy-1.9-32bit/bin/pip install tables
在这种情况下,它失败了,并出现以下错误:
bminton@bminton:/tmp$ sudo /usr/local/pypy-1.9-32bit/bin/pip install tables
Downloading/unpacking tables
Downloading tables-2.4.0.tar.gz (8.9Mb): 8.9Mb downloaded
Running setup.py egg_info for package tables
.. ERROR:: You need numpy 1.4.1 or greater to run PyTables!
Complete output from command python setup.py egg_info:
.. ERROR:: You need numpy 1.4.1 or greater to run PyTables!
在这种情况下安装失败,因为 Tables 依赖于 PyPy 尚不支持的 Numpy(尽管他们正在研究它,请参阅http://pypy.org/numpydonate.html)。但是,对于许多 python 模块,这种方法效果很好。例如,我以这种方式成功安装了 logilab 约束包。
正如其他答案中指出的那样,pypy
为已安装的模块提供了单独的空间。我发现向 pypy 添加模块的最简单方法如下:
*.tar.gz
文件)cd
进入解压目录pypy setup.py install
(有时您需要在前面添加一个sudo
)将模块的文件夹从 C:\Python27\Lib 复制到 C:\pypy-2.3.1-win32\lib-python 或安装它们的位置。
显然,这仅适用于 Windows。
其实安装pypy的时候就有pip_pypy了。看这里:
.
然后使用 pip_pypy 安装第三个模块。