gpt4 book ai didi

python - 使用单个包拆分 python 代码库

转载 作者:行者123 更新时间:2023-11-30 22:27:31 24 4
gpt4 key购买 nike

我有一些由服务器、客户端和公共(public)代码组成的 python 代码,我试图将它们拆分为共享包命名空间的单独项目。我见过一些类似的问题,但它们似乎指的是独立但名称冲突的包。

我正在尝试制作一个简单的示例

a
├── pkg
│   ├── a.py
│   ├── __init__.py
└── setup.py
b
├── pkg
│   ├── b.py
│   ├── __init__.py
└── setup.py

a/setup.py

import setuptools

setuptools.setup(
name='pkg_a',
packages=setuptools.find_packages(),
entry_points={
'console_scripts': [
'pkga=pkg.a:main'
]
}
)

a.py

def main():
print('Module A')

请注意,b/setup.pyb.py 相同,但对 a 的引用更改为 b.

如果我在每个目录中执行 pip install .,命令 pkapkgb 都可以工作,但是 import pkg.aimport pkg.b 仅适用于最后安装的一个。 a.pyb.py 以及一个空的 __init__.py 都位于 site-packages/pkg.

有什么办法可以让这个设置起作用吗?尝试跨包共享包名称是一个坏主意吗?

最佳答案

您应该将 pkg 设为命名空间包:

虽然官方推荐第一种基于pkgutil的方法,但第二种基于setuptools & pkg_resources的方法被广泛使用(由于历史原因) ),如果您注入(inject)其他库的现有遗留命名空间,则需要它。

对于 setuptools 方式,将此行放入两个库中的 pkg/__init__.py 中:

__import__('pkg_resources').declare_namespace(__name__)

setup.py 中声明它们:

setup(
# ...
namespace_packages=['pkg']
)

完成。

关于python - 使用单个包拆分 python 代码库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46896013/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com