安装CV2等模块时发生错误,提示错误代码:
最后,可以在命令行设置默认下载地址。如将第三方库下载网址默认为清华镜像源:
如题,可能是因为操作系统尚未完全更新的缘故。
使用场景:自建的module包找不到
因为python在解释包的时候会给本文件夹也就是本module下的所有文件建立一个索引放在当前路径下的__init__.py文件中,如果没有module的文件索引,我们即使import了指定的包,解释器还是找不到这个module下的文件的,因而我们一般会在每个文件夹下建一个空的__init__.py文件。如果一个文件夹下没有__init__.py文件,不会被当作一个module。
解决方案:如果这个包是你自己写的,不妨检查一下待导入的包的根目录是否存在一个__init__.py文件,没有的话建一个空的__init__.py文件即可(注意:不光要检查待导入的包根目录是否存在__init__.py文件,还需要检查当前程序所在文件夹是否存在这个文件)。如果这个包是pip
install来的,那基本上可以忽略这种可能了,继续尝试下面的原因吧。
情况3、已安装第三方module包的版本兼容性出了问题
使用场景:pip安装的第三方的包找不到
当你已经检查并确定了module已安装,import语句也有,__init__.py文件也在。这个时候或许可以怀疑一下是不是第三方包的版本与当前所用python版本不兼容。
解决方案:先卸载原来pip安装的包,然后安装一个指定版本的包。比如python3不兼容 2.0版本及以上的DBUitls包,需要安装1.x的版本才行。
但,怎么确定这个module是否跟当前的python版本兼容呢?
很遗憾,我也不知道!这时,打起精神赶紧度娘“'找不到xxx包'”吧!
情况4、自建的包名与第三方安装的包名相同,导致import包的时候导错了包
使用场景:pip安装的第三方的包找不到、自建的module包找不到
这种情况不经常发生,但是一旦发生,非常难找到原因。由于python包管理机制和包查找优先级,会优先从当前路径下找指定的包,如果当前文件夹下存在指定的包,则不会去PYATHONPATH或者其他路径下找包。
解决方式:给自己的文件夹换个名字,自建包的命名一定要有特点,如加个后缀。
使用场景:pip安装的第三方的包找不到
解决方案:再次执行安装install这个包的命令,这时它不会再次安装,而是会提示xxx包在xx路径已经满足,而之所以找不到,是因为没有把这个路径添加到PYTHONPATH这一环境变量中。这里以DBUtils包为例:
复制上面的路径,然后在terminal终端执行下面这条命令,把加粗标记的路径改成你刚才复制的路径就好。这条命令即可将刚才的包路径添加到环境变量中。
无论是否在虚拟环境中,该的解决方式都可以生效。再次执行程序,应该不会报错。
如果仍然不行,那么指定pip -V命令,查看输出结果中的"/pip"之前路径是否和刚才加入环境变量的路径一样,如果不一样,把这个路径也加入到环境变量中。
其实我的pip -V输出的路径和刚才的路径是一样的,但是为了演示不一样的情况,这里假设这个路径和刚才添加的路径不一样,这里再添加一遍到环境变量。
提示:直接在终端运行export关键字来添加环境变量的方式可以让变量立即生效,不需要source某个文件,但是这个方式只适用于当前终端,一旦当前终端关闭或在另一个终端中,则失效。如果想要长久生效,参考“Linux和Mac环境变量设置”将路径添加到环境变量文件中。
参考:pip安装包后Import的时候提示找不到的解决方案、python的第三方包默认安装位置在哪?
适用场景:自建的包找不到
在IDE中执行python程序,编译器会自动把当前项目的根目录加入到包查找路径中,可以理解为加到PYTHONPATH下,所以直接执行是没有问题的。但是在cmd或者terminal控制台中直接使用python相关命令来执行程序,不会自动将当前项目加入到PYTHONPATH环境变量下,如果涉及到import其他文件夹下的变量就会报类似ImportError: No module
解决方法:使用sys.append()命令把报警包的所在文件夹路径加入到PYTHONPATH。
比如你的项目下叫做learn_python, 下面是你的项目根目录下的文件结构。
└──server # 启动服务文件夹
你在运行launch.py时报警conf这个module找不到,这个时候就应该通过sys.append()命令把conf所在文件夹的路径(注意是conf所在文件夹的路径,不是conf的路径),也就是 learn_python的根路径添加到PYTHONPATH中,下面是实现方案的代码。
#
把当前文件所在文件夹的父文件夹路径加入到
PYTHONPATH
至此就获取到了learn_pyhton的根路径,使用sys.append()命令把路径添加到环境变量中即可。
最后的忠告:当你排查完了以上所有情况,发现都不符合,而且在网上找了很多文章也没找到解决方案,这个时候别独自挣扎了,因为你很可能是犯了一个很低级小众的错误,继续独自排查很难找到问题所在。最好让身边的同学帮你看一下,所谓当局者迷,旁观者清,可能你看了很长时间却没关注到一些比较基础且常见的设置,这时同事或者同学往往能很快看出你的问题所在。