Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
304 views
in Technique[技术] by (71.8m points)

python - python3: ImportError: No module named xxxx


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

TL;DR: Relative imports are gone. Use absolute imports instead.

Either use:

from Phone.Pots import Pots

or:

from .Pots import Pots

The problem occurs because Pots is part of the Phone package: there is no module named Pots, there's a module named Phone.Pots.

Python 2 had a feature called relative imports that let you write import Pots even if that was not technically correct.

Relative imports however are a source of problems and confusion:

  • Who reads the code cannot immediately say whether the import is from a package or not.
  • How come the module is named Phone.Pots, but I can use import Pots? This is highly inconsistent.
  • What if the submodule shadows a name of another module?

For these reasons, relative imports were removed from Python 3.


You can get rid of relative imports from Python 2 by using a __future__ import:

from __future__ import absolute_import

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...