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
出现问题是因为 Pots
是 Phone
包的一部分:没有名为 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
我是 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
出现问题是因为 Pots
是 Phone
包的一部分:没有名为 Pots
的模块,有一个名为 Phone.Pots
.[=25= 的模块]
Python 2 有一个名为 relative imports 的功能,即使在技术上不正确,您也可以编写 import Pots
。
然而,相对导入是 problems and confusion:
的来源- 阅读代码的人无法立即判断导入是否来自包。
- 为什么模块名为
Phone.Pots
,但我可以使用import Pots
?这是非常不一致的。 - 如果子模块隐藏了另一个模块的名称怎么办?
由于这些原因,相关导入已从 Python 3.
中删除您可以使用 __future__
import:
from __future__ import absolute_import