作为suggested in the pytest documentation,我设置了我的包,其目的不是不将我的测试与我的包一起分发:
setup.py
mypkg/
__init__.py
mypkg/
appmodule.py
tests/
test_app.py
...
但我对如何确保这些测试在存在时正确运行感到困惑(例如,在Travis CI或项目目录的克隆中)。
我希望我的测试脚本中的导入应用于相邻mypkg/
目录中的源(而不是mypkg
中可能安装的任何site-packages
),但是我我得到的错误令我感到困惑。
如果我按照pytest
文档中的建议操作,并且未在__init__.py
中添加tests/
,那么
from __future__ import absolute_import
from mypkg.appmodule import *
我得到了
ImportError:没有名为mypkg.appmodule的模块
与
from __future__ import absolute_import
from ..mypkg.appmodule import *
我得到了
ValueError:在非包中尝试相对导入
如果我忽略文档并包含__init__.py
,那么后者我会得到
ValueError:尝试超出顶级包
的相对导入
仅包含__init__.py
并使用
from __future__ import absolute_import
from mypkg.appmodule import *
我的测试会运行吗?但我不清楚,如果mypkg/
中安装了mypkg
,这将从相邻的site-packages
目录导入来源。
组织我的pytest
测试的正确方法是什么,以便它们与我的项目源分开 - 而不是与我的项目源一起分发,但始终导入相邻的源,而不是安装elswehere的软件包的版本?
答案 0 :(得分:1)
问题是当你要求它在mypkg目录中查找不存在时,python找不到你的appmodule。
您已正确设置目录:
setup.py
mypkg/
__init__.py
mypkg/
appmodule.py
tests/
test_app.py
...
但是既然你已经创建了另一个mypkg /子目录来存放appmodule.py,你需要在该子目录中放置__init__.py以便导入工作。该呼叫也将更改为:
from mypkg.mypkg.appmodule import *
希望这有帮助。