Как установить модуль расширения Python, используя distutils? - PullRequest
1 голос
/ 19 ноября 2008

Я работаю над пакетом Python с именем "lehmer", который включает в себя несколько модулей расширения, написанных на C. В настоящее время у меня есть один модуль расширения, "rng". Я использую дистрибутив Python для сборки и установки модуля. Я могу скомпилировать и установить модуль, но когда я пытаюсь импортировать модуль, используя 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="mpd@cs.wm.edu",
      packages=["lehmer"],
      ext_package="lehmer",
      ext_modules=exts)

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

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']

Обновление

Работает при использовании на коробке 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

1 Ответ

3 голосов
/ 12 января 2009

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

  1. Поскольку текущий каталог автоматически добавляется в путь к пакетам Python, интерпретатор сначала искал в текущем каталоге пакеты; поскольку некоторые модули C не были скомпилированы в текущем каталоге, интерпретатор не смог их найти. Решение: Не запускайте интерпретатор из того же каталога, в котором хранится ваша рабочая копия кода.
  2. Distutils не установил модуль с правильными разрешениями на OS X. Решение: Исправьте разрешения.
...