只是一个简单的问题,我如何让pypy识别我在Python中使用的第三个pary模块?例如,我收到以下错误。
from tables import *
ImportError: No Module named tables
基本上说它找不到我用来与我试图运行的脚本进行交互的pytables库。
答案 0 :(得分:8)
对于纯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 - 但是cypes在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上运行。
答案 1 :(得分:6)
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依赖于Numpy,PyPy尚不支持它(尽管他们正在使用它,请参阅http://pypy.org/numpydonate.html)。但是,对于许多python模块,这种方法效果很好。例如,我以这种方式成功安装了logilab约束包。
答案 2 :(得分:4)
正如其他答案中所指出的,pypy
为安装的模块提供了单独的空间。我发现将模块添加到pypy的最简单方法如下:
*.tar.gz
文件)cd
到解压缩的目录pypy setup.py install
(有时您需要添加sudo
)答案 3 :(得分:3)
将模块的文件夹从C:\ Python27 \ Lib复制到C:\ pypy-2.3.1-win32 \ lib-python或相当于安装它们的位置。
显然,这只适用于Windows。
答案 4 :(得分:2)
实际上,安装pypy时会有pip_pypy。见这里:
然后使用pip_pypy安装第三个模块。