Ошибка ImportE в подпакете при запуске теста setup.py - PullRequest
6 голосов
/ 14 апреля 2011

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

setup.py
src/
    disttest/
        __init__.py
        core.py
tests/
    disttest/
        __init__.py
        testcore.py

Мой setup.py выглядит так:

from distutils.core import setup
import setuptools

setup(name='disttest',
      version='0.1',
      package_dir={'': 'src'},
      packages=setuptools.find_packages('src'),
      test_suite='nose.collector',
      tests_require=['Nose'],
      )

Файл tests/disttest/testcore.py содержит строку from disttest.core import DistTestCore.

Запуск setup.py test теперь дает ImportError: No module named core.

После setup.py install, python -c "from disttest.core import DistTestCore" работает нормально. Это также работает, если я добавлю import core в src/disttest/__init__.py, но я не хочу поддерживать это, и это только кажется необходимым для тестов.

Почему это? И как правильно это исправить?

1 Ответ

1 голос
/ 22 апреля 2011

Вы можете проверить это дважды, но похоже, что ваши тесты импортируют пакет disttest в каталог tests/ вместо тестируемого пакета из каталога src/.

Почему вам нужно использовать пакет с тем же именем, что и тестируемый пакет?Я бы просто переместил модуль testcore в каталог tests или переименовал пакет tests/disttest, чтобы избежать потенциального конфликта имен.

В любом случае, вы хотите вставить строку import pdb; pdb.set_trace() непосредственно переднеудачный импорт и поэкспериментируйте с различными операторами импорта, чтобы увидеть, что импортируется, откуда (import sys; sys.modules['modulename'].__file__ - ваш друг), чтобы вы могли лучше понять, что происходит.

...