В определенной программе у меня есть абстрактный класс, который должен быть реализован в двух разных подпакетах для разных целей. Упрощенная версия этой структуры:
programme/
__init__.py
Abstract.py
pkgA/
__init__.py
ClassA.py
pkgB/
__init__.py
ClassB.py
До Python 3.2 (я полагаю), можно было импортировать класс 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? Желательно без изменения пути во время выполнения.