По историческим причинам и обратной совместимости я хочу упаковать модуль (назовем его myapi
) таким образом, чтобы оба этих набора импорта импортировали один и тот же код:
from myapi.utils import helpers
from myapi.api.rest import MyRest
import myapi
Итак, эти три утверждениявыше, по сути, должен импортировать тот же код (без дублирования), что и ниже:
from oldname.utils import helpers
from oldname.api.rest import MyRest
import oldname
Предполагается, что пакет был установлен обычным образом с pip install myapi
или pip install --user myapi
.
Т.е. япри объединении одного пакета необходимо создать псевдоним для полной структуры модулей myapi
под другим именем oldname
, чтобы пользователь мог импортировать любой модуль, используя oldname
или myapi
без дублирования.
I'mпомните, что пользователь может просто сделать:
import myapi as oldname
Однако моя цель - избежать путаницы, потому что имя пакета изменилось как-то.Пользователи должны иметь возможность беспрепятственно использовать как старое, так и новое имя, не зная, что имя вообще изменилось, и отображать предупреждение об амортизации не более.
В некоторых системах самым простым способом было бы просто создатьсимволическая ссылка при запуске setup.py install
:
ln -s /usr/local/lib/python2.7/dist-packages/myapi \
/usr/local/lib/python2.7/dist-packages/oldname
Но это глупо и наверняка запутает систему импорта Python и приведет к другим проблемам (oldname.__name__
, pip show oldname
и т. д.).Также это не будет работать с колесами.Я предпочитаю встроенный способ, но не настолько глубоко в пакете Python, который я бы знал.Может быть, есть что-то, что я мог бы вставить в свой setup.py
(который, между прочим, использует setuptools
).Какие-либо предложения?Есть ли лучший способ?