gpt4 book ai didi

python - 使用点分语法的子包中模块的包内引用

转载 作者:太空宇宙 更新时间:2023-11-04 05:32:21 24 4
gpt4 key购买 nike

我有以下包结构:

.
└── package
├── __init__.py
├── sub_package_1
│   ├── __init__.py
│   └── main_module.py
├── sub_package_2
│   ├── __init__.py
│   └── some_module.py
└── sub_package_3
├── __init__.py
└── some_module.py

package/sub_package_1/main_module.py 我想同时使用 package/sub_package_2/some_module.pypackage/sub_package_3/some_module.py。为此,我想使用 intra-package reference .我知道我可以使用 from ..sub_package_1 import some-module 但由于名称相似,我想使用点分语法,例如 sub_package_1.some_module

使用 from .. import sub_package_2 我显然无法访问 sub_package_2.some_module 因为 sub_package_2 是一个包。但是我发现使用

from .. import sub_package_2
from ..sub_package_2 import some_module

我可以访问 sub_package_2.some_module。显然,第二次导入将 some_module 添加到 sub_package_2(检查 dir(sub_package_2))。

我的问题是:

  1. 有没有一种方法可以使用单个导入而不是上面的两个?
  2. 为什么(通常)import package 后跟 from package import module 添加 modulepackage? Python 实际上在这里做什么?

最佳答案

1.

在文件中__init__.py你写的 sub_package_2

from . import some_module

并且在 main_module.py你可以必须写

from .. import sub_package_2

代码sub_package_2.some_module现在应该可以工作了

2.

“如何在 Python 中导入”您可以在此处阅读更多信息 Importing Python Modules

from .. import sub_package_2创建对 sub_package_2 的引用在当前命名空间中。包裹sub_package_2现在就像一个模块,在文件 __init__.py 中定义.如果你在 __init__.py 中什么也没写, sub_package_2 不会知道 some_modue

from ..sub_package_2 import some_module创建对模块的引用 some_module包裹sub_package_2名称为 some_module。有点像 some_module = sub_package_2.some_module .你看:有对 some_module 的引用在sub_package_2也。现在sub_package_2知道模块some_module

重要提示:您可以使用 sub_package_2.some_module但只有some_module也会工作。在您的 2 次导入后它们是相同的。

如果你写在 __init__.py :

from . import some_module

some_module属于sub_package_2自动

对于类似的模块名称,您可以使用 as

from ..sub_package_1 import some_module as some_module_1
from ..sub_package_2 import some_module as some_module_2
from ..sub_package_3 import some_module as some_module_3

关于python - 使用点分语法的子包中模块的包内引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36720939/

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