Реальная цель: у меня есть модуль, который является общим для двух пакетов (скажем, bar
и bar2
). Я хочу использовать одни и те же тестовые файлы для обоих случаев, поэтому я хочу изменить импорт тестов, чтобы не называть пакет явно. (Почему? Это может быть полезно в процессе извлечения модулей из мегапакета в отдельные пакеты.)
Моя идея состояла в том, чтобы добавить еще один модуль, который импортирует определенный пакет и предоставляет для него «псевдоним». Это почти сработало, но у меня возникла проблема.
Изначально у меня было:
# test.py:
from bar import some_function
Если я не сделаю ничего магического, будет две версии test.py
: одна с from bar import some_function
и другой с from new_bar import some_function
. Я хочу избежать этого, и файлы тестового кода остаются прежними.
После того, как я добавил косвенное обращение:
#foo.py:
import bar as baz
#test.py:
from .foo import baz # Works!
from .foo.baz import some_function # ModuleNotFoundError: No module named 'cur_dir.foo.baz'; 'cur_dir.foo' is not a package
, я могу сделать foo
пакет:
#foo/__init__.py:
import bar as baz
#test.py:
from .foo import baz # Works!
from .foo.baz import some_function # ModuleNotFoundError: No module named 'cur_dir.foo.baz'
Ошибка немного меняется, но все равно остается.
Я знаю, что могу обойти проблему, написав
# test.py:
from .foo import baz
some_function = baz.some_function
Есть ли другой способ? Я хочу, чтобы мой импорт был "нормальным".
Есть ли способ создать "псевдоним" для пакета, который можно использовать со стандартным механизмом импорта?