使用新名称创建 Python 包,保持旧包导入不变
Creating Python package with new name keeping old package import intact
不确定我的标题是否正确,但这里是关于这个问题的简短描述。我在 GitHub 和 PyPI 上有一个包 A
,它的用法是:
pip install A
import A
A.module()
当前目录结构:
A
__init__.py
我想在 PyPI 上创建一个新包 B
但希望保持向后兼容性,所以下面的工作:
pip install B
import A
A.module()
import B
B.module()
为了确保现有应用程序不中断,希望确保 import A
正常工作。
实现这一目标的可能解决方案是什么?
分发名称(“pip install”之后的内容)和包导入名称是完全独立的。安装名称与导入名称匹配只是一种常见的约定。
所以在你的安装程序中这样做:
# setup.py
from setuptools import setup
setup(
name="B",
version="0.1",
packages=["A", "B"],
...
)
在设置调用中,“name”关键字参数是用户用来安装包的分发名称 - python -m pip install B
在本例中。您上传到 PyPI 的生成的工件将在文件名中包含此 B
,例如
B-0.1-py3-none-any.whl
B-0.1.tar.gz
packages
关键字参数是顶级导入名称,可以有多个,这些名称通常与您的项目目录结构相匹配:
.
├── A
│ └── __init__.py
├── B
│ └── __init__.py
└── setup.py
这允许“B”发行版同时提供 A 和 B 导入,并充当“A”发行版的直接替代品。
不确定我的标题是否正确,但这里是关于这个问题的简短描述。我在 GitHub 和 PyPI 上有一个包 A
,它的用法是:
pip install A
import A
A.module()
当前目录结构:
A
__init__.py
我想在 PyPI 上创建一个新包 B
但希望保持向后兼容性,所以下面的工作:
pip install B
import A
A.module()
import B
B.module()
为了确保现有应用程序不中断,希望确保 import A
正常工作。
实现这一目标的可能解决方案是什么?
分发名称(“pip install”之后的内容)和包导入名称是完全独立的。安装名称与导入名称匹配只是一种常见的约定。
所以在你的安装程序中这样做:
# setup.py
from setuptools import setup
setup(
name="B",
version="0.1",
packages=["A", "B"],
...
)
在设置调用中,“name”关键字参数是用户用来安装包的分发名称 - python -m pip install B
在本例中。您上传到 PyPI 的生成的工件将在文件名中包含此 B
,例如
B-0.1-py3-none-any.whl
B-0.1.tar.gz
packages
关键字参数是顶级导入名称,可以有多个,这些名称通常与您的项目目录结构相匹配:
.
├── A
│ └── __init__.py
├── B
│ └── __init__.py
└── setup.py
这允许“B”发行版同时提供 A 和 B 导入,并充当“A”发行版的直接替代品。