<tfoot id='uG9wM'></tfoot>

<small id='uG9wM'></small><noframes id='uG9wM'>

    <legend id='uG9wM'><style id='uG9wM'><dir id='uG9wM'><q id='uG9wM'></q></dir></style></legend>
    1. <i id='uG9wM'><tr id='uG9wM'><dt id='uG9wM'><q id='uG9wM'><span id='uG9wM'><b id='uG9wM'><form id='uG9wM'><ins id='uG9wM'></ins><ul id='uG9wM'></ul><sub id='uG9wM'></sub></form><legend id='uG9wM'></legend><bdo id='uG9wM'><pre id='uG9wM'><center id='uG9wM'></center></pre></bdo></b><th id='uG9wM'></th></span></q></dt></tr></i><div id='uG9wM'><tfoot id='uG9wM'></tfoot><dl id='uG9wM'><fieldset id='uG9wM'></fieldset></dl></div>

        • <bdo id='uG9wM'></bdo><ul id='uG9wM'></ul>

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

        时间:2023-09-13
      1. <legend id='H7nh1'><style id='H7nh1'><dir id='H7nh1'><q id='H7nh1'></q></dir></style></legend>
            <bdo id='H7nh1'></bdo><ul id='H7nh1'></ul>

                <i id='H7nh1'><tr id='H7nh1'><dt id='H7nh1'><q id='H7nh1'><span id='H7nh1'><b id='H7nh1'><form id='H7nh1'><ins id='H7nh1'></ins><ul id='H7nh1'></ul><sub id='H7nh1'></sub></form><legend id='H7nh1'></legend><bdo id='H7nh1'><pre id='H7nh1'><center id='H7nh1'></center></pre></bdo></b><th id='H7nh1'></th></span></q></dt></tr></i><div id='H7nh1'><tfoot id='H7nh1'></tfoot><dl id='H7nh1'><fieldset id='H7nh1'></fieldset></dl></div>
                • <small id='H7nh1'></small><noframes id='H7nh1'>

                    <tbody id='H7nh1'></tbody>
                  <tfoot id='H7nh1'></tfoot>
                  本文介绍了在 Python 中导入深度嵌套的模块的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

                  问题描述

                  考虑 Python 3.6 中的以下情况:

                  Consider the following case in Python 3.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 中我们要使用:

                  Now, let's say inside basepackage.package.subpackage.module.py we want to use:

                  将 basepackage.package.subpackage.module 导入为 aliased_module [1]

                  结果是:

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

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

                  with a stack trace listing following culprit statements (in the below order):

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

                  但如果你想使用 [1] 而不是:

                  But if instead of [1] one'd like to use:

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

                  然后一切正常.

                  [1][2] 有何不同,前者会导致错误,而后者不会?

                  How is [1] so much different than [2] that the former results in an error and the latter not?

                  推荐答案

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

                  For the first option (import basepackage.package.subpackage.module as aliased_module) to work, these conditions have to be met:

                  • basepackage/__init__.py 必须包含类似于 from 的行.import package(名称package必须在这个basepackage/__init__.py文件中定义)
                  • basepackage/package/__init__.py 必须包含类似于 from 的行.导入子包
                  • basepackage/package/subpackage/__init__.py 必须包含类似于 from 的行.导入模块
                  • basepackage/__init__.py has to contain a line similar to from . import package (the name package has to be defined inside this basepackage/__init__.py file)
                  • basepackage/package/__init__.py has to contain a line similar to from . import subpackage
                  • basepackage/package/subpackage/__init__.py has to contain a line similar to from . import module

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

                  Note: the import statements inside the __init__.py files can also be absolute instead of relative paths.

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

                  For the second option (from basepackage.package.subpackage import module as aliased_module), it is enough if there are empty __init__.py files at each level, as long as these __init__.py files exist.

                  这篇关于在 Python 中导入深度嵌套的模块的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                  上一篇:如何/在哪里发布 Python 包 下一篇:为什么从 git repo 进行 pip 安装时 #egg=foo

                  相关文章

                  最新文章

                    <bdo id='AjUGY'></bdo><ul id='AjUGY'></ul>

                    <small id='AjUGY'></small><noframes id='AjUGY'>

                    1. <tfoot id='AjUGY'></tfoot><legend id='AjUGY'><style id='AjUGY'><dir id='AjUGY'><q id='AjUGY'></q></dir></style></legend>
                    2. <i id='AjUGY'><tr id='AjUGY'><dt id='AjUGY'><q id='AjUGY'><span id='AjUGY'><b id='AjUGY'><form id='AjUGY'><ins id='AjUGY'></ins><ul id='AjUGY'></ul><sub id='AjUGY'></sub></form><legend id='AjUGY'></legend><bdo id='AjUGY'><pre id='AjUGY'><center id='AjUGY'></center></pre></bdo></b><th id='AjUGY'></th></span></q></dt></tr></i><div id='AjUGY'><tfoot id='AjUGY'></tfoot><dl id='AjUGY'><fieldset id='AjUGY'></fieldset></dl></div>