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

Hen*_*ger 6 python distutils setuptools

我正在尝试使用包含的单元测试为Python项目创建一个安装包.我的项目布局如下:

setup.py
src/
    disttest/
        __init__.py
        core.py
tests/
    disttest/
        __init__.py
        testcore.py
Run Code Online (Sandbox Code Playgroud)

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'],
      )
Run Code Online (Sandbox Code Playgroud)

该文件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 coresrc/disttest/__init__.py,但我真的不希望维护和似乎只有必要的测试.

这是为什么?什么是解决它的正确方法?

Mar*_*ers 2

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

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

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