运行setup.py测试时子包导入错误
我正在尝试为一个包含单元测试的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__
这个方法很有用),这样你就能更清楚地了解问题出在哪里了。