我正在尝试为包含项目单元测试的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 ),以便您更好地了解出了什么问题。