This question already has answers here:
Changes in import statement python3
(4个答案)
5年前关闭。
我是Python的新手,我试图理解一个问题,在创建软件包时会看到该问题。
我具有以下文件结构:(工作目录为/my/Python/jmLib2)
现在执行的操作:
很棒...但是,如果我这样做:
我正在Eclipse下使用PyDev。 PyDev在初始化 .py文件中向我报告了“ Unresolved 导入: jar ”错误。
我在PyDev和bash下有相同的追溯问题。
再说一次,我是Python的新手……所以这可能是一个非常愚蠢的错误。
但是有人可以解释一下python2和python3.4之间的区别吗?
我是否需要修改PYTHONPATH?为什么?
你好
于尔根
或者:
发生问题是因为
Python 2具有一个称为relative imports的功能,即使在技术上不正确,该功能也允许您编写
但是,相对进口是problems and confusion的来源:
读取代码的人无法立即说出导入是否来自软件包。 该模块为何命名为 如果子模块遮盖了另一个模块的名称怎么办?
由于这些原因,相对导入已从Python 3中删除。
您可以使用
(4个答案)
5年前关闭。
我是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在初始化 .py文件中向我报告了“ Unresolved 导入: jar ”错误。
我在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
的模块。Python 2具有一个称为relative imports的功能,即使在技术上不正确,该功能也允许您编写
import Pots
。但是,相对进口是problems and confusion的来源:
Phone.Pots
,但是我可以使用import Pots
?这是非常不一致的。 由于这些原因,相对导入已从Python 3中删除。
您可以使用
__future__
import摆脱Python 2的相对导入:from __future__ import absolute_import
10-06 12:01