小编JCG*_*CGB的帖子

如何在打包时为 python 模块设置别名?

出于历史原因和向后兼容性,我想以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)中放入一些东西。有什么建议?有没有更好的办法?

python packaging module

5
推荐指数
1
解决办法
498
查看次数

标签 统计

module ×1

packaging ×1

python ×1