Doctest 和相关导入
我在使用 doctest 和相对导入时遇到问题。简单的解决方案就是摆脱相对导入。还有其他人吗?
假设我有一个名为 example 的包,其中包含 2 个文件:
example/__init__.py
"""
This package is entirely useless.
>>> arnold = Aardvark()
>>> arnold.talk()
I am an aardvark.
"""
from .A import Aardvark
if __name__ == "__main__":
import doctest
doctest.testmod()
example/A.py
class Aardvark(object):
def talk(self):
print("I am an aardvark.")
如果我现在尝试
python example/__init__.py
,那么我会得到错误
Traceback (most recent call last):
File "example/__init__.py", line 8, in <module>
from .A import Aardvark
ValueError: Attempted relative import in non-package
I'm having trouble using doctest with relative imports. The simple solution is just to get rid of the relative imports. Are there any others?
Say I have a package called example containing 2 files:
example/__init__.py
"""
This package is entirely useless.
>>> arnold = Aardvark()
>>> arnold.talk()
I am an aardvark.
"""
from .A import Aardvark
if __name__ == "__main__":
import doctest
doctest.testmod()
example/A.py
class Aardvark(object):
def talk(self):
print("I am an aardvark.")
If I now attempt
python example/__init__.py
then I get the error
Traceback (most recent call last):
File "example/__init__.py", line 8, in <module>
from .A import Aardvark
ValueError: Attempted relative import in non-package
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
创建另一个文件
my_doctest_runner.py
:执行
my_doctest_runner.py
以运行example/__init__.py
中的doctests:Create another file
my_doctest_runner.py
:Execute
my_doctest_runner.py
to run doctests inexample/__init__.py
:Pytest 的
--doctest-modules
< /a> 标志负责相对导入:Pytest's
--doctest-modules
flag takes care of relative imports:只要做
Just do
从 pytest 6.0.0 开始,
importlib
是有效的 导入模式。使用它解决了我的问题。As of pytest 6.0.0,
importlib
is a valid import mode. Using that solved the problem for me.