Как создать псевдоним модуля Python во время упаковки? - PullRequest
0 голосов
/ 12 июня 2019

По историческим причинам и обратной совместимости я хочу упаковать модуль (назовем его 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).Какие-либо предложения?Есть ли лучший способ?

...