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

标签 python module package

我有以下包结构:

.
└── 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/

相关文章:

powershell - Azure AD 模块和 MS Online 模块有什么区别

Javapackager – native 打包/独立应用程序附加信息

python - 在 Python 中显示 SVG 文件

保存时 Python 模型未引用正确的数据库

python - 如何使用 Python 从网页获取超链接的文本元素?

python - 给定一个Python源文件的路径,如何找到该文件属于哪个包?

javascript - 是否可以将 npm 依赖项从另一个包合并到当前包?

python - 控制 Pandas 图中 datetime64[ns] 的表示

java - Android Studio - 使用模块生成多个品牌 apk

module - PrestaShop 中的延迟加载页面?