很多同学在写Python项目时会遇到导入模块失败的情况:ImportError: No module named 'xxx'或者ModuleNotFoundError: No module named 'xxx'。导入模块失败通常分为两种:一种是导入自己写的模块(即以 .py 为后缀的文件),另一种是导入三方库。接下来就给大家简单讨论一下。
干货分享:Python如何自动导入缺失的库
1、导入自己写的模块
在每一个运行的Python程序当中,都维护了一套sys文件,在这里面的path变量里,存储了在当前程序中导入模块时候寻找的路径。path是一个列表,里边存储了多个路径,这些路径是如果我们进行import模块操作的时候,Python会从这个路径从第一个开始到最后一个一个一个路径去找我们的模块,直到找了或者都没找到,再抛出异常。
如果我们自己写的模块放在奇怪的地方,在程序中import自然是无法为导入的。这时我们可以向sys.path这个列表的第一个位置里插入一个路径,就是我们自己编写的模块存放的位置,这样Python再找的时候就能找到了。
2、Python导入第三方库
解决导入Python库失败的问题,其实关键是在运行环境中装上缺失的库(注意是否是虚拟环境),或者使用恰当的替代方案。这个问题又分为三种情况:
1)单个模块中缺失的库。
在编写代码的时候,如果我们需要使用某个三方库(如 requests),但不确定实际运行的环境是否装了它,那么可以这样:
try:
import requests
except ImportError:
import os
os.system('pip install requests')
import requests
这样写的效果是,如果找不到requests库,就先安装再导入。
如果真找不到兼容的标准库,也可以自己写一个模块(如my_json.py),实现想要的东西,然后在except语句中导入它。
try:
import simplejson as json
except ImportError:
import my_json as json
2)整个项目中缺失的库。
有一个项目,想要部署到新的机器上,它涉及很多三方库,但是机器上都没有预装,该怎么办?
对于一个合规的项目,按照约定,通常它会包含一个“requirements.txt ”文件,记录了该项目的所有依赖库及其所需的版本号。这是在项目发布前,使用命令pip freeze > requirements.txt生成的。使用命令pip install -r requirements.txt (在该文件所在目录执行,或在命令中写全文件的路径),就能自动把所有的依赖库给装上。
如果项目不合规,或者由于其它倒霉的原因我们没有这样的文件,只能把项目跑起来,等它出错,遇到一个导库失败,就手动装一个,然后再跑一遍项目,遇到导库失败就装一下,如此循环。
3)自动导入任意缺失的库
在不修改原有的代码的情况下,在不需要“requirements.txt”文件的情况下,自动导入所需第三方库的方法有三个:
•可以用try...except 方式,实现简单的三方库导入或者替换;
•已知全部缺失的依赖库时(如 requirements.txt),可以手动安装;
•利用sys.meta_path,可以自动导入任意的缺失库。
领取专属 10元无门槛券
私享最新 技术干货