处理非包上下文中的相对导入
尝试使用 Python 外部目录结构中的相对路径导入模块时包裹,如:
pkg/ __init__.py components/ core.py __init__.py tests/ core_test.py __init__.py
您可能会遇到错误:
ValueError: Attempted relative import in non-package
了解 Python 导入机制
Python 导入机制依赖于当前文件的 name 属性来确定要导入的适当模块。直接执行文件时,它会被分配“__main__”的名称,从而无法进行相对导入。
可能的解决方案
解决此问题问题,您可以使用以下方法之一:
1.使用 -m 选项
您可以使用 -m 选项执行该文件,这会将文件作为模块添加到 sys.path:
python -m pkg.tests.core_test
2 。指定 package 属性
如果您的包的一部分专门设计为作为脚本运行,则可以分配 package 属性来指定其包中所需的名称
import sys if __name__ == "__main__": sys.__package__ = "pkg.tests" from ..components.core import GameLoopEvents
参考:
更多信息,请参阅 PEP 366:https://www.python.org/dev/peps/pep -0366/
以上是如何处理 Python 包外部的相对导入?的详细内容。更多信息请关注PHP中文网其他相关文章!