Получение Pypy для распознавания сторонних модулей

просто быстрый вопрос, как заставить pypy распознавать третьи модули pary, которые у меня есть в Python? Например, я получаю следующую ошибку.

from tables import *
ImportError: No Module named tables

что в основном говорит о том, что он не может найти мою библиотеку pytables, с которой я использую для взаимодействия в скрипте, который я пытаюсь запустить.

5 ответов


для чистых модулей python просто добавьте каталог, содержащий модули, в свой sys.путь, используя что-то вроде:

sys.path.insert(0, '/usr/local/lib')
sys.path.insert(0, os.path.expanduser('~/lib'))

это работает для CPython, Pypy и Jython.

для модулей расширения C вы можете попробовать cpyext Pypy, но он не будет запускать все, на что вы могли бы надеяться, потому что некоторые модули расширения CPython C блуждают в темных углах C-based CPython во время выполнения: http://morepypy.blogspot.com/2010/04/using-cpython-extension-modules-with.html

Я иногда пишу код, который использует ctypes для взаимодействия с C .Итак, а затем используйте это как на CPython, так и на Pypy, потому что они оба неплохо справляются с ctypes - но ctypes могут быть медленными на CPython: http://docs.python.org/library/ctypes.html Когда я последний раз проверял, языка Jython начал под, Но это не было достаточно далеко, чтобы использовать, по крайней мере не для моего цели.

существует также новый интерфейс, который требует компилятора C во время выполнения. Вероятно, он будет менее хрупким (читай: склонным к segfaults), чем ctypes. Это описано здесь: http://morepypy.blogspot.com/2012/06/release-01-of-cffi.html Это происходит из проекта Pypy, я считаю, но он был сделан для работы сначала на CPython. AFAIK, он еще не работает на Pypy.


Pypy имеет отдельное пространство для установки. Поэтому любые модули, которые вы хотите установить из pypi, должны быть установлены в его пространство. Так, например, у меня есть PyPy, установленный в /usr/local / pypy-1.9-32bit

Я рекомендую использовать 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!

в этом случае не удалось установить, потому что таблицы зависят от Numpy, который еще не поддерживается PyPy (хотя они работают над ним, см. http://pypy.org/numpydonate.html). Однако для многих модулей python Этот метод отлично работает. Например, я успешно установил пакет ограничений logilab таким образом.


как указано в других ответах,pypy имеет отдельное пространство для установленных модулей. Я нахожу самый простой способ добавить модуль в pypy следующим образом:

  • скачать источник (например,)
  • экстракт cd в извлеченный каталог
  • run pypy setup.py install (иногда вам нужно добавитьsudo)

копировать папку для модуля из C:\Python27\Lib к C:\pypy-2.3.1-win32\lib-python или эквивалент того, где они установлены.

очевидно, это будет работать только на Windows.


на самом деле, есть pip_pypy при установке pypy. Смотрите здесь:

screenshot.

затем установите третий модуль с pip_pypy.