python3: ImportError: No module named xxxx

python3: ImportError: No module named xxxx

我是 Python 的新手,我正在尝试理解一个问题,这是我在创建包时看到的。 我有以下文件结构:(工作目录是 /my/Python/jmLib2)

/my/Python/jmLib2
     |--- Phone
     |      |--- __init__.py
     |      |--- Pots.py
     |- Test2.py

---------------------------------
cat ./jmLib2/Pots.py
#!/usr/bin/python

def Pots():
    print ("I'm Pots Phone")

---------------------------------
cat ./jmLib2/__init__.py
from Pots import Pots

---------------------------------
cat ./Test2.py
#!/usr/bin/python
from Phone import Pots

import os.path
print ("OS:"+str(os.path))

Pots()

当我现在做的时候:

python2 Test2.py
OS:<module 'posixpath' from '/usr/lib/python2.7/posixpath.pyc'>
    I'm Pots Phone*

太好了...但是,如果我这样做:

python3 Test2.py
Traceback (most recent call last):
  File "Test2.py", line 2, in <module>
    from Phone import Pots
  File "/home/juergen/my/Python/jmLib2/Phone/__init__.py", line 1, in <module>
    from Pots import Pots
ImportError: No module named 'Pots'

我在 Eclipse 下使用 PyDev。 PyDev 在 init.py 文件中报告我一个 "Unresolved import: Pots"-error。 我在 PyDev 和 bash.

下有同样的回溯问题

同样,我是 Python 的新手...所以这可能是一个非常愚蠢的错误。 但是有人可以向我解释一下 python2 和 python3.4 之间的区别吗? 我必须修改 PYTHONPATH 吗?为什么?

问候 于尔根

TL;DR: Relative imports are gone。请改用绝对导入。

要么使用:

from Phone.Pots import Pots

或:

from .Pots import Pots

出现问题是因为 PotsPhone 包的一部分:没有名为 Pots 的模块,有一个名为 Phone.Pots.[=25= 的模块]

Python 2 有一个名为 relative imports 的功能,即使在技术上不正确,您也可以编写 import Pots

然而,相对导入是 problems and confusion:

的来源
  • 阅读代码的人无法立即判断导入是否来自包。
  • 为什么模块名为Phone.Pots,但我可以使用import Pots?这是非常不一致的。
  • 如果子模块隐藏了另一个模块的名称怎么办?

由于这些原因,相关导入已从 Python 3.

中删除

您可以使用 __future__ import:

摆脱 Python 2 的相对导入
from __future__ import absolute_import