【发布时间】:2021-02-19 18:54:22
【问题描述】:
我知道python机制不允许在没有已知父包的情况下进行相对导入,但我想知道是什么原因。
如果相对导入在没有已知父包的情况下工作,这将使开发人员的生活更加轻松(我想,如果我错了,请纠正我)
示例:
必须从 python 脚本导入全局定义文件。现在我必须这样做:
DEFS_PATH = '../../../'
sys.path.append(DEFS_PATH)
import DEFINITIONS as defs
如果我可以像这样导入此文件,而无需在执行脚本或创建收集所有包的__init__.py 文件时指定-m 标志。这会让一切变得更容易。
from .... import DEFINITIONS as defs
显然这是一个玩具示例,但想象一下必须在数百个 python 脚本中重复此操作...
在没有已知父包的情况下导入相关包是否有任何解决方法,不涉及丑陋的丑陋方式(sys.path.append(...) 或 python -m myscript)?
【问题讨论】:
-
“为什么会发生 X?”和“X 有解决方法吗?”是两个完全不同的问题(第一个是often off-topic here)。
-
让父包为人所知。只需在每个包和子包中添加一个
__init__.py文件即可。 -
@CharlesDuffy 谢谢查尔斯,刚刚编辑了问题
-
@Seth 是的,我知道,但是还有另一种不涉及重复
__init__.py文件的方法吗?刚刚编辑了问题 -
在任何应该被视为 Python 包的东西中对
__init__.py文件的要求让我觉得非常很有根据;否则,您可能会搜索到目录树中完全不相关的部分。请记住,并非所有 Python 模块都存在于磁盘目录中。边界条件变得很奇怪。当从鸡蛋或 zip 文件中导入某些内容并使用..退出时,您期望会发生什么?与其冒险做出意想不到的事情,不如直接拒绝。
标签: python python-import