Получение 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. См. Здесь:
.
Затем установите третий модуль с помощью pip_pypy.