运行setup.py test时在子包上的ImportError

时间:2011-04-14 10:45:45

标签: python setuptools distutils

我正在尝试使用包含的单元测试为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 个答案:

答案 0 :(得分:1)

您可能需要仔细检查一下,但看起来您的测试正在导入disttest目录中的tests/包,而不是src/中的测试包} 目录。

为什么需要使用与被测试包同名的包?我只是将testcore模块移动到tests目录,或者重命名tests/disttest包并避免潜在的命名冲突。

在任何情况下,您都希望在导入失败之前插入import pdb; pdb.set_trace()行,并使用不同的import语句来查看从哪里导入的内容(import sys; sys.modules['modulename'].__file__是您的朋友),以便您更好地了解出现了什么问题。