从包中的模块导入Python类

时间:2019-06-23 23:23:30

标签: python

我的结构看起来像这样:

project/->
   app.py
   checker/->
      exc.py
      anc.py

我的文件很简单:

# app.py
from checker.exc import ExampleClass

# checker/exc.py:
from anc import AnotherClass

class ExampleClass(AnotherClass):
    print('Example')

# checker/anc.py:
class AnotherClass:
    print('AAAA')

当我在checker文件夹中运行exc.py时,一切正常,当 我使用来自软件包检查器的模块运行app.py,一切正常。

但是当我运行使用来自checker.exc的类的app.py时,ex需要anc。我有一个错误ModuleNotFoundError: No module named anc

2 个答案:

答案 0 :(得分:2)

意识到这是一条胶带解决方案。

exc.py更改为:

try:
    from anc import AnotherClass
    print('abs import')
except ModuleNotFoundError:
    from .anc import AnotherClass
    print('rel import')

class ExampleClass(AnotherClass):
    print('Example')

例如,通过这种方式,您可以在调试时使用绝对导入,但是在运行app.py的情况下依赖于相对导入。

您尝试导入它们的顺序应反映预期的使用,首先尝试使用最可能使用的一种。如果切换尝试,则错误相同。

答案 1 :(得分:1)

由于代码是从项目文件夹中运行的,为了使exc.py找到anc.py,您需要将exc.py更改为以下内容:

from .anc import AnotherClass

class ExampleClass(AnotherClass):
    print('Example')

正如berna1111的评论所暗示的那样,这可能在直接运行exc.py时引起问题。