gpt4 book ai didi

python - 我可以从单独的库向现有包添加模块吗?

转载 作者:行者123 更新时间:2023-12-05 03:33:04 27 4
gpt4 key购买 nike

专有库中有代码(例如,下面称为 foo.bar),我使用它在运行时加载模块,如下所示:

module_name = f"foo.bar.{some_module}"
module = importlib.import_module(module_name)

用户在一些文本配置中提供模块的名称,该模块由库加载。

我想提供一些添加额外功能的模块,所以我想编写一个单独的库来向 foo.bar 包中添加更多模块,并将它们捆绑起来以便通过内部分发PyPi.

所以有人会运行 pip install foo mylibrary 这会安装 foomylibrary 库,但我想要里面的类 mylibrary 也出现在 foo.bar 命名空间内。

请问这可能吗?

最佳答案

您正在描述命名空间打包的基本用法。

如果 foo.bar 已经是 namespace package , 然后支持第三方包贡献新的子模块。

# in setup.py
from setuptools import setup

setup(
name="mylibrary",
...
namespace_packages=["foo.bar"]
)

安装mylibrary 可以在foo.bar 命名空间中放置新模块。按照 packaging namespace packages 上的指南进行操作获取更多详细信息。

在您的情况下,foo 似乎确实可能已经在使用 namespace 包装,因为问题中显示的动态 importlib 加载表明它旨在与任意命名的“some_module”子模块一起使用,也许由第 3 方“插件”提供。

如果专有库 foo 还不是命名空间包,并且无法将其转换为命名空间包,那么这不可能 推荐 - 常规包不能不应该在安装时将模块注入(inject)到另一个包的路径中。





好吧,实际上,这是可能的。例如,安装包 zen-of-numpy 将使 import numpy.thisfrom numpy import this 可用,即使 numpy 本身是不是命名空间包,也不提供 this 子模块。

关于python - 我可以从单独的库向现有包添加模块吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70384065/

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