【发布时间】:2020-05-09 21:40:20
【问题描述】:
在某个程序中,我有一个抽象类,应该在两个不同的子包中实现不同的目的。这种结构的简化版本是:
programme/
__init__.py
Abstract.py
pkgA/
__init__.py
ClassA.py
pkgB/
__init__.py
ClassB.py
直到 Python 3.2(我相信),可以在带有 a relative reference 的子文件夹中导入 Abstract 类:
from .. import Abstract
使用 Python 3.6 会产生错误消息:
ValueError: attempted relative import beyond top-level package
classical (and ugly) alternative是在运行时将父文件夹添加到路径中:
import sys
import os
sys.path.append(os.getcwd() + '/..')
from programme import Abstract
但这也失败了:
ModuleNotFoundError: No module named 'programme'
现在 Python 3.6 是如何做到这一点的?最好不要在运行时修改路径。
【问题讨论】:
-
请重新阅读您链接的答案:stackoverflow.com/a/9331002/2066215 它没有在任何地方提及
parent,您的目录结构中也没有名为parent的文件或文件夹,所以有@ 987654333@,但你可以import Abstract -
这能回答你的问题吗? Relative imports for the billionth time
-
@ForceBru,现已更正。
-
@Chris 这个问题是关于 Python 2.7 的。该版本的机制不再适用于更新的版本。
标签: python python-3.x python-import