Расширение Python не устанавливается в подпакет - PullRequest
1 голос
/ 26 декабря 2011

Я пытаюсь собрать расширение Python и упаковать его, используя distutils, но расширение устанавливается в корневой пакет независимо от того, как я его называю.Мой макет каталога выглядит следующим образом:

foo/bar/extension.c

Мой setup.py выглядит следующим образом:

from distutils.core import setup
from distutils.extension import Extension

setup(name='foo.bar.extension',
      cmdclass={'build_ext': build_ext},
      ext_modules=[Extension('foo.bar.extension',
                             sources=['foo/bar/extension.c'])]
)

Я установил virtualenv и запускаю

python setup.py install

Затем в моей оболочке Python:

>>> import foo.bar.extension
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named invest_cython_core
>>> import extension #This works!

Что я могу изменить, чтобы первый оператор импорта работал, а второй - не работал?

1 Ответ

1 голос
/ 04 января 2012

Я думаю, вам нужно иметь foo/__init__.py и foo/bar/__init__.py, чтобы distutils установил сначала эти пакеты, а затем модуль расширения.(Ошибка будет лучше, чем простое неправильное поведение, я открою отчет об ошибке, чтобы distutils2 вел себя лучше.)

Используете ли вы собственный класс build_ext?(спрашивает из-за cmdclass={'build_ext': build_ext} в вашем примере) Это может сыграть роль в проблеме.

...