2012-06-25 3 views
10

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

from tables import * 
ImportError: No Module named tables 

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

ответ

7

Для чистых питона модулей, просто добавить каталог, содержащий модули для вашего 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 блуждать в темные углы C основе выполнения CPython в: 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.

5

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

Я рекомендую использовать pip или easy_install. Вот как установить пип, но новая ссылка для 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 таким образом.

+0

http://python-distribute.org был захвачен фермой ссылок, а setuptools, вероятно, следует использовать в любом случае. –

3

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

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

+0

Я очень почти отметил это, потому что вы начали с «У меня тоже есть эта проблема ...» Просто дайте ответ. Ни больше ни меньше. Неплохой первый пост, хотя! – BradleyDotNET

+0

(Вы отредактировали его, дали свой совет и даже некоторую поддержку - к довольно полезному ответу, действительно, но какая именно цель вы считаете, что добавленная «угроза» служила? Это размахивание флага совершенно ненужно и запугивает новичка. вы, наверное, знаете это. Я точно знаю, что являюсь новичком.) –

3

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

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

Я сделал это, он установил lib успешно, но я снова получаю ошибки для модуля i, импортированного в код python – curious

1

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

screenshot.

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