运行setup.py测试时子包导入错误

6 投票
1 回答
1300 浏览
提问于 2025-04-16 15:43

我正在尝试为一个包含单元测试的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" 是没问题的。如果我在 src/disttest/__init__.py 中加上 import core,也能正常工作,但我不想一直维护这个,而且这似乎只是为了测试而必要。

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

1 个回答

2

你可能需要再确认一下,但看起来你的测试代码是在 tests/ 目录下导入了 disttest 这个包,而不是从 src/ 目录下要测试的那个包。

为什么需要使用一个和要测试的包同名的包呢?我建议把 testcore 模块移动到 tests 目录,或者把 tests/disttest 这个包改个名字,这样就可以避免可能的命名冲突。

无论如何,你可以在出错的导入语句前面加一行 import pdb; pdb.set_trace(),然后试着用不同的导入语句来看看到底是从哪里导入了什么(import sys; sys.modules['modulename'].__file__ 这个方法很有用),这样你就能更清楚地了解问题出在哪里了。

撰写回答