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

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

from tables import *
ImportError: No Module named tables

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

Ответ 1

Для чистых модулей 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, но ctypes может быть медленным на CPython: http://docs.python.org/library/ctypes.html Последнее, что я проверил, у Jython было начало ctypes, но оно было недостаточно далеко, чтобы использовать, по крайней мере, не для моих целей.

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

Ответ 2

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

Я рекомендую использовать pip или easy_install. Здесь, как установить pip, но нужно найти новую ссылку для distribute_setup.py:

curl DEAD_LINK /distribute_setup.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

Затем просто используйте только что установленный пип для получения модуля:

sudo /usr/local/pypy-1.9-32bit/bin/pip install tables

В этом случае она не удалась со следующей ошибкой:

[email protected]:/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 таким образом.

Ответ 3

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

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

Ответ 4

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

  • загрузите источник (например, как файл *.tar.gz)
  • extract, cd в извлеченную директорию
  • запустите pypy setup.py install (иногда вам нужно добавить sudo)

Ответ 5

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

screenshot.

Затем установите третий модуль с помощью pip_pypy.