jab*_*jab 12 python pypy pytables
只是一个简单的问题,我如何让pypy识别我在Python中使用的第三个pary模块?例如,我收到以下错误.
from tables import *
ImportError: No Module named tables
Run Code Online (Sandbox Code Playgroud)
这基本上是说它无法找到我用来与我试图运行的脚本进行交互的pytables库.
对于纯python模块,只需将包含模块的目录添加到sys.path,使用类似:
sys.path.insert(0, '/usr/local/lib')
sys.path.insert(0, os.path.expanduser('~/lib'))
Run Code Online (Sandbox Code Playgroud)
这适用于CPython,Pypy和Jython.
对于C扩展模块,您可以尝试Pypy的cpyext,但它不会运行您可能希望的所有内容,因为一些CPython C扩展模块徘徊在CPython的基于C的运行时的黑暗角落:http: //morepypy.blogspot.com/ 2010/04 /使用-CPython的扩展模块-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上运行.
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
Run Code Online (Sandbox Code Playgroud)
要么
curl https://raw.github.com/pypa/pip/master/contrib/get-pip.py | /usr/local/pypy-1.9-32bit/bin/pypy
Run Code Online (Sandbox Code Playgroud)
然后,只需使用新安装的pip来获取模块:
sudo /usr/local/pypy-1.9-32bit/bin/pip install tables
Run Code Online (Sandbox Code Playgroud)
在这种情况下,它失败了,出现以下错误:
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!
Run Code Online (Sandbox Code Playgroud)
在这种情况下安装失败,因为Tables依赖于Numpy,PyPy尚不支持它(尽管他们正在研究它,请参阅http://pypy.org/numpydonate.html).但是,对于许多python模块,这种方法效果很好.例如,我以这种方式成功安装了logilab约束包.