当前位置:  开发笔记 > 编程语言 > 正文

python3:ImportError:没有名为xxxx的模块

如何解决《python3:ImportError:没有名为xxxx的模块》经验,为你挑选了1个好方法。

我是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:
    I'm Pots Phone*

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

python3 Test2.py
Traceback (most recent call last):
  File "Test2.py", line 2, in 
    from Phone import Pots
  File "/home/juergen/my/Python/jmLib2/Phone/__init__.py", line 1, in 
    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?为什么?

问候Juergen



1> Andrea Corbe..:

TL; DR: 相对进口已经消失.请改用绝对导入.

使用:

from Phone.Pots import Pots

要么:

from .Pots import Pots

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

Python 2有一个名为相对导入的功能,import Pots即使技术上不正确,也可以编写.

然而,相对进口是问题和混乱的根源:

谁读取代码不能立即说明导入是否来自包.

怎么命名模块Phone.Pots,但我可以使用import Pots?这是非常不一致的.

如果子模块隐藏另一个模块的名称怎么办?

出于这些原因,从Python 3中删除了相对导入.


您可以使用__future__导入来删除Python 2中的相对导入:

from __future__ import absolute_import

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有