我正在尝试使用包含的单元测试为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
,它也可以工作,但我真的不想保持这一点,而且它似乎只是测试所必需的。
为什么?什么是解决它的正确方法?
答案 0 :(得分:1)
您可能需要仔细检查一下,但看起来您的测试正在导入disttest
目录中的tests/
包,而不是src/
中的测试包} 目录。
为什么需要使用与被测试包同名的包?我只是将testcore模块移动到tests目录,或者重命名tests/disttest
包并避免潜在的命名冲突。
在任何情况下,您都希望在导入失败之前插入import pdb; pdb.set_trace()
行,并使用不同的import语句来查看从哪里导入的内容(import sys; sys.modules['modulename'].__file__
是您的朋友),以便您更好地了解出现了什么问题。