gpt4 book ai didi

python - 在 Python 中,是否可以在包级别公开子包中的模块?

转载 作者:太空宇宙 更新时间:2023-11-03 12:56:57 25 4
gpt4 key购买 nike

我有以下难题。我正在尝试从父包级别的包的子包中公开一些模块。

文件夹结构基本上是这样的:

script.py
package/
__init__.py
module1.py
subpackage/
__init__.py
submodule1.py
submodule2.py

在我目前要写的script.py文件中

from package.subpackage.submodule1 import foo

如果我想从 submodule1.py 文件导入一些东西,但我希望能够公开文件 submodule1.pysubmodule2。 py 在包级别,以便我所有的导入看起来像

from package.module1 import bar
from package.submodule1 import foo
from package.submodule2 import goo

请注意,我不想在 package 级别公开 barfoogoo,即不是

from package import bar
from package import foo

因为在我的案例中模块之间的分离仍然很重要。

这可能吗? __init__.py 文件中是否有这样做的技巧?

谢谢!

最佳答案

为了您的目的,python 模块只是命名空间。也就是说,模块全局变量中的所有内容都可以作为 module.thingy 导入和使用。您可能已经注意到,在许多模块中,您还会发现一些内置函数。例如,logging.os 只是常规的 os 模块。

因此,在您的包 (package/__init__.py) 中导入您想要的任何内容,并将其绑定(bind)到您想要公开的名称。

# package/__init__.py
# import package.module1 as module1 # one *can* do this, but its at best without benefit (see comments)
import package.subpackage.submodule1 as submodule1
import package.subpackage.submodule2 as submodule2

这允许执行 import package.submodule1import package.submodule1 as foo

请注意,这种简单的方法不会允许您执行from package.submodule1 import bar。为此,您需要一个实际的虚拟模块。

# package/submodule1/__init__.py
from package.subpackage.submodule1 import *

关于python - 在 Python 中,是否可以在包级别公开子包中的模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38130880/

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