我的结构看起来像这样:
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
答案 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
时引起问题。