【问题标题】:Import issue with __init__.py file Python: loading one subpackage automatically imports all the other subpackages__init__.py 文件 Python 的导入问题:加载一个子包会自动导入所有其他子包
【发布时间】:2013-05-10 18:15:56
【问题描述】:

我有一个具有这种结构的 python 包:

package/
       __init__.py
       subA/
           __init__.py
           A.py
       subB/
           __init__.py
           B.py

package/__init__.py我添加了两条语句:

import subA
import subB

我想要实现的是能够使用import package 导入整个包,并且能够使用package.aubApackage.subB

它可以工作,但是我不能只加载package.subA。如果我使用import package.subA,那么package.subB 也会被导入。如果我使用import package.subA as sA,那么只有 sA 可用。

这是正常行为,还是我做错了什么? 如何选择使用import package 导入所有语句或仅导入单个子包而不加载所有其他语句?

【问题讨论】:

    标签: python python-2.7 package


    【解决方案1】:

    这是正常行为。既然你有

    import subA
    import subB 
    

    如果您在__init__.py 文件中添加一些打印语句,您会更好地理解它。当您执行 import package.subA 之类的导入时,会导入 'package'

    This is package's __init__ file

    This is subA's __init__ file

    This is subB's __init__ file

    执行 print dir() 也会增加清晰度。

    当你做import package.subA

    ['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'package']

    当你做import package.subA as sA

    ['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'sA']

    【讨论】:

    • 谢谢!据我了解添加打印语句,当我首先执行import package.subA package/__init__.py 时,它会加载所有子包。但是我仍然不知道如何修复它,以便在需要时仅加载一个子包,而无需加载其他子包,并且能够在我需要全部时导入所有子包。
    • 您的意思是说您希望from package import subA 功能以package.subA 的形式提供。嗯。让我试试看。
    • 您能否详细说明为什么您需要做些什么?可能基于这些原因,我可以想到另一种做事方式!
    • 不,我不想听你说的。我希望能够在不导入所有其他子包的情况下导入每个单独的子包;即当我导入 package.subA 时,我不希望 package.subB 被导入。但是,在某些情况下,我想同时导入 package.subA 和 package.subB 并且只想通过发出“导入包”语句来做到这一点。
    • 我真的觉得你把事情复杂化了。使用 python 的as 功能将为您简化事情。在任何其他情况下,您应该在编写复杂代码之前三思而后行。
    猜你喜欢
    • 2023-03-26
    • 2016-01-31
    • 1970-01-01
    • 2020-07-20
    • 1970-01-01
    • 1970-01-01
    • 2017-07-25
    • 2013-04-21
    • 2018-01-13
    相关资源
    最近更新 更多