oro*_*ome 5 software-distribution pytest python-2.7
正如pytest 文档中所建议的,我设置了我的包,目的不是不将我的测试与我的包一起分发:
\n\nsetup.py\nmypkg/\n __init__.py\n mypkg/\n appmodule.py \ntests/\n test_app.py\n ...\nRun Code Online (Sandbox Code Playgroud)\n\n但我对如何确保这些测试在存在时正确运行(例如在 Travis CI 上或在项目目录的克隆中)感到困惑。
\n\n我希望测试脚本中的导入应用于相邻mypkg/目录中的源(而不是任何mypkg可能安装在 中的源site-packages),但我遇到了令我困惑的错误。
如果我遵循文档中的建议pytest并且不__init__.py添加tests/then
from __future__ import absolute_import\nfrom mypkg.appmodule import * \nRun Code Online (Sandbox Code Playgroud)\n\n我明白了
\n\n\n\n\n导入错误:没有名为 mypkg.appmodule 的模块
\n
当与
\n\nfrom __future__ import absolute_import\nfrom ..mypkg.appmodule import * \nRun Code Online (Sandbox Code Playgroud)\n\n我明白了
\n\n\n\n\nValueError:尝试在非包中进行相对导入
\n
如果我忽略文档并包含一个__init__.py,那么对于后者我会得到
\n\n\nValueError:尝试超出顶级包的相对导入
\n
仅通过包含__init__.py并使用
from __future__ import absolute_import\nfrom mypkg.appmodule import * \nRun Code Online (Sandbox Code Playgroud)\n\n我的测试会运行吗?但我不清楚mypkg/如果 amypkg安装在site-packages.
组织我的测试的正确方法是什么pytest,以便它们与 \xe2\x80\x94\xc2\xa0 分开,并且不与 \xe2\x80\x94\xc2\xa0my 项目源一起分发,但始终导入相邻源,而不是elswehere 安装的软件包的版本?
问题是当你要求 python 在 mypkg 目录中查找它不存在的目录时,它无法找到你的 appmodule。
您已使用以下命令正确设置目录:
setup.py
mypkg/
__init__.py
mypkg/
appmodule.py
tests/
test_app.py
...
Run Code Online (Sandbox Code Playgroud)
但由于您已经创建了另一个 mypkg/ 子目录来存放 appmodule.py,因此您需要将 __init__.py 放在该子目录中才能进行导入。该调用也将更改为:
from mypkg.mypkg.appmodule import *
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
2185 次 |
| 最近记录: |