出于历史原因和向后兼容性,我想以myapi这组导入的方式打包一个模块(让我们称之为):
from myapi.utils import helpers
from myapi.api.rest import MyRest
import myapi
Run Code Online (Sandbox Code Playgroud)
导入相同的代码(不重复),如下所示:
from oldname.utils import helpers
from oldname.api.rest import MyRest
import oldname
Run Code Online (Sandbox Code Playgroud)
假设软件包是使用pip install myapi或以常规方式安装的pip install --user myapi。
即,我想在打包时将完整的模块结构别名为myapi另一个名称,以便用户可以使用或新名称(此处)导入任何模块,而无需复制代码。Python中有什么东西可以做到吗?oldname oldnamemyapisetuptools
替代方案,这对我不起作用:
我知道用户可以这样做:
import myapi as oldname
Run Code Online (Sandbox Code Playgroud)
我的目标是避免混淆,因为包名称在某些时候发生了变化。用户应该能够交替使用旧名称和新名称,而根本不必知道名称已更改。
在某些系统上,最简单的方法是在运行时创建一个符号链接setup.py install:
ln -s /usr/local/lib/python2.7/dist-packages/myapi \
/usr/local/lib/python2.7/dist-packages/oldname
Run Code Online (Sandbox Code Playgroud)
但是,这是哈克,并肯定会混淆Python的导入系统并导致其他问题(oldname.__name__,pip show oldname和这样)。它也不适用于轮子。我更喜欢内置方式,但对 Python 包装的了解并不像我所了解的那样深入。也许我可以在我的setup.py(顺便说一句。使用setuptools)中放入一些东西。有什么建议?有没有更好的办法?