【问题标题】:How can I import subpackage?如何导入子包?
【发布时间】:2020-06-01 15:00:43
【问题描述】:

我有这样的文件结构:

test.py
Dir1\
  __init__.py
  Something.py
  Dir2\
    __init__.py
    Something2.py
#Dir1.__init__.py
from .Something import *

Dir2.__init__.py 具有相同的代码,但带有 .Something2

Something.py 有简单的 add 方法,Something2.py 有简单的 sub 方法。

我需要什么:

#test.py
import Dir1
print(Dir1.Dir2.sub(10, 14))

但我收到一个错误AttributeError: module 'Dir1' has no attribute 'Dir2'

如果我在Dir1.__init__.py 中使用from .Dir2 import * 代码test.py 有效,但也有效print(Dir1.sub(10, 14)),这是我不想要的。我尝试了许多变体,但它们给我带来了错误或Dir1.sub 工作。

这可能可以在互联网上找到,但我的英语知识很糟糕,我可能会错过答案。当然我已经试过在网上搜索了。

非常感谢您的回答。

【问题讨论】:

    标签: python python-3.x import package


    【解决方案1】:
    # test.py
    import Dir1.Dir2
    print(Dir1.Dir2.sub(10,14))
    

    应该可以。此外,如果需要,您可以在导入时使用 as 关键字重命名模块

    import some_module as new_name
    

    【讨论】:

    • 是的,这行得通,但事实证明我必须import Dir1,然后是import Dir1.Dir2。这使用起来非常不方便,并且不能作为一个整体包使用。
    【解决方案2】:

    可能是拐杖,但我找到了解决办法。现在我有了这个文件结构:

    test.py
    Dir1\
      __init__.py
      Dir1\
        __init__.py
        Something.py
        Dir2\
          __init__.py
          Something2.py
    
    #Dir1.__init__
    import Dir1 as Add
    from .Dir1 import Dir2 as Sub
    

    现在我可以使用了

    #test.py
    import Dir1
    print(Dir1.Sub.sub(10, 7))
    

    而且不能用

    #test.py
    import Dir1
    print(Dir1.sub(10, 7))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-19
      相关资源
      最近更新 更多