Как установить модуль расширения Python, используя distutils?

1

Я работаю над пакетом Python с именем "lehmer", который включает в себя кучу модулей расширения, написанных на C. В настоящее время у меня есть один модуль расширения "rng". Я использую Python Distutils для сборки и установки модуля. Я могу скомпилировать и установить модуль, но когда я пытаюсь импортировать модуль с помощью import lehmer.rng или from lehmer import rng, интерпретатор Python генерирует исключение ImportError. Я могу импортировать "лемер" в порядке.

Вот содержимое моего файла setup.py:

from distutils.core import setup, Extension

exts = [Extension("rng", ["lehmer/rng.c"])]

setup(name="lehmer",
      version="0.1",
      description="A Lehmer random number generator",
      author="Steve Park, Dave Geyer, and Michael Dippery",
      maintainer="Michael Dippery",
      maintainer_email="[email protected]",
      packages=["lehmer"],
      ext_package="lehmer",
      ext_modules=exts)

Когда я перечисляю содержимое каталога Python site-packages, я вижу следующее:

th107c-4 lehmer $ ls /scratch/usr/lib64/python2.5/site-packages/lehmer
__init__.py  __init__.pyc  rng.so*

Моя переменная окружения PYTHONPATH задана правильно, так что не проблема (и, как отмечено ранее, я могу import lehmer просто отлично, поэтому я знаю, что PYTHONPATH не является проблемой). Python использует следующие пути поиска (как сообщает sys.path):

['', '/scratch/usr/lib64/python2.5/site-packages', '/usr/lib/python25.zip', '/usr/lib64/python2.5', '/usr/lib64/python2.5/plat-linux2', '/usr/lib64/python2.5/lib-tk', '/usr/lib64/python2.5/lib-dynload', '/usr/lib64/python2.5/site-packages', '/usr/lib64/python2.5/site-packages/Numeric', '/usr/lib64/python2.5/site-packages/PIL', '/usr/lib64/python2.5/site-packages/SaX', '/usr/lib64/python2.5/site-packages/gtk-2.0', '/usr/lib64/python2.5/site-packages/wx-2.8-gtk2-unicode', '/usr/local/lib64/python2.5/site-packages']

Update

Он работает, когда используется в OpenSUSE 10, но C-расширения по-прежнему не загружаются при тестировании в Mac OS X. Ниже приведены результаты интерпретатора Python:

>>> sys.path
['', '/usr/local/lib/python2.5/site-packages', '/opt/local/lib/python25.zip', '/opt/local/lib/python2.5', '/opt/local/lib/python2.5/plat-darwin', '/opt/local/lib/python2.5/plat-mac', '/opt/local/lib/python2.5/plat-mac/lib-scriptpackages', '/opt/local/lib/python2.5/lib-tk', '/opt/local/lib/python2.5/lib-dynload', '/opt/local/lib/python2.5/site-packages']
>>> from lehmer import rng
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: cannot import name rng
>>> import lehmer.rngs
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named rngs
>>> import lehmer.rng 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named rng
>>> from lehmer import rngs
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: cannot import name rngs
  • 0
    На самом деле, вы не знаете, что PYTHONPATH установлен правильно. Ваш локальный каталог всегда находится первым в списке sys.path. Не могли бы вы запустить Python и запустить 'import sys; распечатать sys.path` и добавить это к вашему вопросу?
  • 0
    извините за глупый вопрос, но что именно является сообщением ImportError? iirc ImportErrors выдается за проблемы при загрузке модулей расширения, поэтому это может быть вызвано отсутствием ссылки на библиотеку fex.
Показать ещё 8 комментариев
Теги:
module
distutils

1 ответ

3
Лучший ответ

Для записи (и потому, что я устал видеть, что это отмечено как неотвеченный), здесь были проблемы:

  • Так как текущий каталог автоматически добавляется в путь пакетов Python, интерпретатор сначала просматривает в текущем каталоге пакеты; поскольку некоторые C-модули не были скомпилированы в текущем каталоге, интерпретатор не смог их найти. Решение: Не запускайте интерпретатор из того же каталога, в котором хранится ваша рабочая копия кода.
  • Distutils не установил модуль с правильными разрешениями на OS X. Решение: Исправьте разрешения.
  • 0
    Есть ли способ убедиться, что установка продолжается с соответствующими разрешениями, а не после их изменения?
  • 0
    Да, пожалуйста, определите, какие должны быть правильные права доступа и что делает distutils. Если есть ошибка distutils, об этом следует сообщить на bugs.python.org.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню