Как заставить Pypy распознавать сторонние модули

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

from tables import *
ImportError: No Module named tables

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


person jab    schedule 25.06.2012    source источник


Ответы (5)


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

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

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

Что касается модулей расширения C, вы можете попробовать cpyext Pypy, но он не запустит все, на что вы могли бы надеяться, потому что некоторые модули расширения 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 во время выполнения. Скорее всего, он будет менее хрупким (читай: склонным к сбоям), чем ctypes. Это описано здесь: http://morepypy.blogspot.com/2012/06/release-01-of-cffi.html Я полагаю, что он взят из проекта Pypy, но сначала он был создан для работы на CPython. Насколько я знаю, он еще не работает на Pypy.

person user1277476    schedule 25.06.2012

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

or

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.

person Brian Minton    schedule 02.08.2012
comment
Сайт python-distribute.org был захвачен фермой ссылок, и вместо него, вероятно, в любом случае следует использовать setuptools. - person Dana the Sane; 10.02.2016

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

  • загрузить исходный код (например, в виде файла *.tar.gz)
  • извлечь, cd в извлеченный каталог
  • запустить pypy setup.py install (иногда вам нужно добавить sudo)
person R2-D2    schedule 28.11.2014
comment
я сделал это, он успешно установил библиотеку, но я снова получаю ошибки для модуля, который я импортировал в код Python - person curious; 18.03.2016

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

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

person user3417127    schedule 27.06.2014
comment
Я почти отметил это, потому что вы начали с того, что у меня тоже есть эта проблема ... Просто дайте ответ. Ни больше ни меньше. Хотя первый пост не плохой! - person BradleyDotNET; 27.06.2014
comment
(Вы отредактировали его, дали свой совет и даже немного поддержали — на самом деле, довольно полезный ответ. Но какой именно цели, по вашему мнению, служила добавленная угроза? Это размахивание флагом совершенно не нужно и пугает новичка. И вы, вероятно, знаете Я, конечно, сам новичок.) - person Sz.; 04.01.2016

На самом деле, при установке pypy есть pip_pypy. Глянь сюда:

скриншот.

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

person jian    schedule 06.02.2017