网络不好的时候,pip安装一个库有时候会非常费劲,可能得尝试很多次。以前,自己要么多次尝试要么找离线的安装文件。昨天,在一台新安装系统的电脑上又遇到了这样的问题,反复失败,网络质量看上去也一般。灵机一动,既然都是命令操作,我何不写一个python脚本让它自己去反复尝试。这样,我的电脑不关机,它应该总有装好的时候。
反复尝试,其实就是一个循环,try-guess。
至于如何判断是否安装成功,我可以在脚本中尝试直接import相应的库,成功了就算是安装成功,否则继续尝试安装即可。
简单写了几行脚本:
#!/usr/bin/python
import os
num_python_flg = False
pandas_flg = False
matplotlib_flg = False
num = int(1)
while (num_python_flg != True) or (pandas_flg != True) or (matplotlib_flg != True):
print("the %dth time try" % num)
num = int(num + 1)
if num_python_flg == False:
try:
import numpy
num_python_flg = True
except:
os.system("pip3 install numpy")
if pandas_flg == False:
try:
import pandas
pandas_flg = True
except:
os.system("pip3 install pandas")
if matplotlib_flg == False:
try:
import matplotlib
matplotlib_flg = True
except:
os.system("pip3 install matplotlib")
临时用了下,还可以,31次尝试之后帮我成功安装了相应的库。
其实,这是临时作品。如果考虑以后可以继承通用的话,其实可以采用接口化的方式,这样,原来的脚本应该编程下面这样子。
#!/usr/bin/python
import os
def SmartInstall(lib_name):
installed_flg = False
num = int(1)
while installed_flg == False:
print("the %dth time try to install %s" % (num, lib_name))
num = int(num + 1)
try:
exec('import ' + lib_name)
installed_flg = True
except:
os.system("pip3 install %s" % lib_name)
SmartInstall('xlrd')
SmartInstall('xlwt')
这里又学到了一个exec的用法,第一次import失败,意识到传入字符串是不行的,应该是一个模块名称。接下来改成了上面的样子,进行测试如下:
这也算不上是一个多么有说服力的测试,毕竟一次性尝试就过了。以后,总归还有尝试的机会,后续再说。不过看现在的状态,这一小段代码已经是一个可用的状态了。