【问题标题】:Python crazy module import in a package包中的 Python 疯狂模块导入
【发布时间】:2020-05-28 12:54:52
【问题描述】:

我在一个 python 包中,其中有 A.py、B.py 和一个允许我将包导入上述目录的 init 文件。

因此,我的init文件的内容如下:

__path__ = __import__('pkgutil').extend_path(__path__, __name__)

我现在想将一个 B.py 的类导入 A.py。我尝试使用from B import myClass,但它不起作用。我还尝试通过将此行添加到 init 文件中来将文件添加到路径中:

__path__.append(__file__)

如何将B.py添加到路径中?

--编辑--

为了澄清事情,这是我的包和模块的结构:

|app.py 
|package1
    |__init__.py
    |C.py
    |package2
        |__init__.py
        |A.py
        |B.py

在 A.py 中我需要从 B.py 和 C.py 导入类

【问题讨论】:

  • 能否请edit您的问题显示您的文件布局? “将包导入上面的目录”是什么意思?目前尚不完全清楚您要做什么。您是否有理由不使用相对导入,即from .B import myClass(注意.)?
  • 我刚刚编辑了我的问题。是不是更清楚了?
  • 是的,这确实更清楚了。能否请您解释一下为什么不使用相对导入,例如from .B import myClassfrom ..C import myClass
  • 是的,它正在使用 from .B import myClass

标签: python python-3.x import python-import


【解决方案1】:

如果这是与 python 3 相关的代码......那么 真的 不再需要 __init__.py 了。

只要您要从中导入类/函数的文件位于同一目录中,您就应该能够像这样调用要导入的文件:

 import B.myClass

或者,

 from . import myClass
 ### this imports all the classes and moduels from within the same directory 
 ### as you're currently in even if it has more than one file (but only imports myClass)

【讨论】:

  • 它不起作用。我有一个错误:cannot import name myClass from B (my_path/__init__.py) 我还需要从上面的包中导入另一个类,所以我无法删除我的 init.py
猜你喜欢
  • 2023-04-08
  • 2013-02-05
  • 1970-01-01
  • 2015-03-25
  • 2011-12-22
  • 2013-07-30
  • 2020-08-27
  • 1970-01-01
  • 2016-07-30
相关资源
最近更新 更多