【发布时间】:2019-06-12 10:18:48
【问题描述】:
出于历史原因和向后兼容性,我想以这组导入的方式打包一个模块(我们称之为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) 无需复制代码。 Python 或 setuptools 中有什么东西可以做到这一点吗?
对我不起作用的替代方案:
我知道用户可以这样做:
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)。有什么建议么?有没有更好的办法?
【问题讨论】: