当前位置:项目开发->项目经验 ->python找不到模块No module named和模块的函数的解决办法

原创版权标志python找不到模块No module named和模块的函数的解决办法

作者:codexia  发表时间:2017/11/25 8:29:24  阅读:
[摘要] 报错的提示是:No module named xml.etree.ElementTree。另一个就是:XXX模块找不到XXX方法。python找不到模块No module named和模块的函数。本文就对这个问题进行详细的分析。
    今天在更改一个python文件里的代码,发现了一个提示模块找不到的错误。更改代码是因为原先好几个类全部放在一个文件里。然后代码越写越多,然后就发现代码找起来非常麻烦。所以就想着把这些类全部拆分为单独的文件来管理。然后再将这些文件导入到一个入口文件,其他文件就只需要导入这个入口文件即可。
    理想很丰满,现实很骨感。拆分之后,发现就报错了。报错的提示是:No module named xml.etree.ElementTree。另一个就是:XXX模块找不到XXX方法。因为这是我自己定义的类里的方法,所以就不列出具体的名字,以免引起不适。
    经过一番分析之后,发现很可能是拆分出来的文件名的问题。因为在一个文件里,这些类都是OK的,代码没有任何改动,只是放在了多个文件而已。然而就突然就报错了。那么问题只有出在新增加的文件里。而在报错的提示里,我看到开头的xml和文件xml.py有冲突。然后就试着去更改文件名,改为xmls.py,结果这个错误就消失了。
    python在导入模块的时候,优先使用相对路径查找,查找不到时才从其他路径找。然而我这里添加的文件,刚好撞在了枪口上。我们自己的xml.py自然是没有etree.ElementTree的,所以就报错了。另外一个报错就是我自己写的request.xml也不幸中枪了。同样我也是改为了requests.xml才得以幸免。然后还有一类问题就是XXX模块找不到XXX方法。这个是因为我之前写的版本的py文件和现在的版本的py文件,代码基本上是一样的,两个版本不同,所以模块里的定义有差别。然而很幸运的是,调用的版本又撞到了那个废弃的版本的文件上了。所以我就将废弃的版本的文件删掉了。然后问就消失了。这个废弃文件的干扰,甚至让我感觉有点穿越时空的感觉。因为我以为没有影响的,结果在跟踪代码的时候,竟然复制了废弃的版本的函数,还运行通过了。然后又没有找到函数的定义。后来发现是这个废弃的版本的py文件的影响,才干掉了。
    python文件和C++代码还不太一样,C++里你不包含头文件,啥事也没有。而python还会莫名其妙的引用了,导致版本错乱的奇怪的问题。所以以后需要注意这个问题,不需要的文件不要放在项目里。而模块找不到的那个问题,也是要注意,在命名文件时,一定要注意和已知的文件名区分开,撞枪之后,有时候很难的找到问题。当然,如果你有经验了,就好说了,没有经验就够你喝一壶了。
    当然,对于模块找不到的原因,通常还有一些,我这里就列举一下,但是不一定全,仅供参考:
1.文件不存在
2.文件名错误
3.导入的语法错误
4.导入后重命名的名字使用错误
5.直接导入后使用模块方法错误
6.前面几个都对,但是在目录中,没有建立空文件__init__.py文件,也就没有形成包,就找不到模块
7.在多级目录中,有一些目录没有__init__.py文件,导致包路径中断而找不到模块。每一级目录都需要一个__init__.py,除非你不需要将这个目录里的东西当做包导入。
8.自己的py文件名和系统或已经安装的python模块冲突,而相对的路径抢先了其他路径的已安装的模块和系统模块

    大概就是这些了。如果漏掉了,请帮忙补充哦。
文章来源:C++技术网原创文章版权为网站和作者共同所有,会员文章禁止转载。非会员文章转载做好本文超链接即表示授权转载。通过文章下面的分享按钮可以自由分享所有文章。

返回顶部

在线提问
问题标题:
问题描述:(简陋的描述会导致问题被最后回答、没有针对性回答甚至无法解答。请确保问题描述的足够清楚。)