我有一个简短的问题,如何让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表现得很好 - 但是在CPython上ctypes可能会有点慢: http://docs.python.org/library/ctypes.html 最后我检查了一下,Jython已经开始支持ctypes,但是对于我的目的来说还不够成熟。
还有一个新的接口需要在运行时使用C编译器。它可能比ctypes更加稳定(即不容易出现段错误)。这里有详细描述: http://morepypy.blogspot.com/2012/06/release-01-of-cffi.html 我相信它来自Pypy项目,但首先是为CPython而设计的。据我所知,它尚未在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!
正如其他答案所指出的那样,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安装第三方模块。