在某个程序中,我有一个抽象类,应该在两个不同的子包中实现不同的目的。这种结构的简化版本是:
programme/
__init__.py
Abstract.py
pkgA/
__init__.py
ClassA.py
pkgB/
__init__.py
ClassB.py
直到 Python 3.2(我相信),可以在 a 子文件夹中使用相对引用导入 Abstract 类:
from .. import Abstract
使用 Python 3.6 会产生错误消息:
ValueError: attempted relative import beyond top-level package
经典(和丑陋)的替代方法是在运行时将父文件夹添加到路径中:
import sys
import os
sys.path.append(os.getcwd() + '/..')
from programme import Abstract
但这也失败了:
ModuleNotFoundError: No module named 'programme'
现在用 Python 3.6 是如何做到的?最好在运行时不修改路径。