在Python中导入深度嵌套的模块

2024-05-28 19:15:24 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python3.6中考虑以下情况:

basepackage
    |---__init__.py
    |---package
            |---__init__.py
            |---subpackage
                    |---__init__.py
                    |---module.py

重要细节:内部basepackage.package.__init__.py有:

from basepackage.package.subpackage.module import AClass as AliasedClass

现在,让我们在basepackage.package.subpackage.module.py中使用:

import basepackage.package.subpackage.module as aliased_module[1]

结果是:

AttributeError: module 'basepackage' has no attribute 'package'

堆栈跟踪列出了以下罪魁祸首语句(按以下顺序):

from basepackage.package.subpackage.module import AClass as AliasedClass
import basepackage.package.subpackage.module as aliased_module

但是如果你不想用[1]来代替:

from basepackage.package.subpackage import module as aliased_module[2]

然后一切正常。你知道吗

为什么[1][2]有如此大的不同,以至于前者会导致错误,而后者不会?你知道吗


Tags: frompyimportpackageinitas情况细节
1条回答
网友
1楼 · 发布于 2024-05-28 19:15:24

要使第一个选项(import basepackage.package.subpackage.module as aliased_module)起作用,必须满足以下条件:

  • basepackage/__init__.py必须包含类似于from . import package的行(名称package必须在此basepackage/__init__.py文件中定义)
  • basepackage/package/__init__.py必须包含类似于from . import subpackage的行
  • basepackage/package/subpackage/__init__.py必须包含类似于from . import module的行

注意:__init__.py文件中的import语句也可以是绝对路径,而不是相对路径。你知道吗


对于第二个选项(from basepackage.package.subpackage import module as aliased_module),如果每个级别都有空的__init__.py文件,只要这些__init__.py文件存在就足够了。你知道吗

相关问题 更多 >

    热门问题