我正在尝试为包含项目单元测试的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,它也可以工作,但是我并不是真的想要维护它,而且似乎只是为了测试而已。

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

最佳答案

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

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

无论如何,您都想在导入失败之前插入import pdb; pdb.set_trace()行,并处理不同的导入语句,以查看从何处导入什么(import sys; sys.modules['modulename'].__file__是您的 friend ),以便您更好地了解出了什么问题。

10-06 05:21