让Pypy识别第三方模块

15

我有一个简短的问题,如何让pypy识别我在Python中安装的第三方模块?例如,我会遇到以下错误:

from tables import *
ImportError: No Module named tables

这基本上是在说它找不到我正在尝试运行的脚本中使用的pytables库。

5个回答

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表现得很好 - 但是在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上运行。


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约束包。

http://python-distribute.org已被链接农场接管,而且应该使用setuptools。 - Dana the Sane

4

正如其他答案所指出的那样,pypy有一个单独的空间用于安装模块。我发现将模块添加到pypy最简单的方法如下:

  • 下载源代码(例如作为一个*.tar.gz文件)
  • 解压缩,cd进入提取的目录
  • 运行pypy setup.py install(有时需要在前面加上sudo

我已经这样做了,它成功安装了该库,但是我在Python代码中导入一个模块时仍然出现错误。 - curious

3

将模块的文件夹从C:\Python27\Lib复制到C:\pypy-2.3.1-win32\lib-python或您安装它们的等效位置。

显然,这只适用于Windows。


我差点标记了这个,因为你的开头是“I也有这个问题...”只回答问题就好了,不要多说也不要少说。不过这是一个不错的第一篇帖子! - BradleyDotNET
3
您编辑了内容,提供了建议,甚至给出了一些鼓励——确实是非常有帮助的回答。但您认为添加的“威胁”有什么确切的目的呢?这种炫耀自己身份的行为对于新手来说完全是不必要和令人感到害怕的。而您很可能也知道这一点。我可以肯定地说自己是新手。 - Sz.

2

实际上,当您安装pypy时,会有pip_pypy可用。请在此处查看:

screenshot.

然后使用pip_pypy安装第三方模块。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接