脚本安装第三方包
参考1<不成熟>
install_scripts.py
关注点: tar.gz解压后包,如何脚本安装 --- 经过当时测试, 最后发现此类解压后包还是手动安装为好.
import os
import subprocess
import time
from icecream import ic
pkgs_path = os.path.dirname(__file__)
ic(pkgs_path)
libs_list = os.listdir(pkgs_path)
error_list = []
error_dir_list = []
for lib in libs_list:
# ic(lib)
# 若是whl文件,则pip直接安装
if lib.endswith('.whl'):
# pass
cmd = 'pip install %s' % lib
ic(cmd)
res = subprocess.Popen(cmd,
shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# ic('stdout',res.stdout.read().decode('gbk')) # 获取正确命令执行之后的结果
ic('stderr', res.stderr.read().decode('gbk')) # 获取错误命令执行之后的结果
if res.stderr.read():
error_list.append(lib)
# 3 如果是tar.gz解压后的文件夹
elif os.path.isdir(lib):
if lib in ["Django-2.0", "Mako-1.0.6"]:
continue
ic(lib)
cmd = f'cd ./{lib}'
cmd1 = f'python setup.py install'
# res = subprocess.Popen("dir",shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# ic('stderr', res.stdout.read().decode('gbk')) # 获取错误命令执行之后的结果
# ic(cmd,cmd1)
#
ic(cmd + "&" + cmd1)
res = subprocess.Popen(cmd + "&" + cmd1 + "&" + "cd ../",
shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
ic('stderr', res.stderr.read().decode('gbk')) # 获取错误命令执行之后的结果
time.sleep(1)
if res.stderr.read().decode('gbk'):
item = {
"name": lib,
"error": res.stderr.read().decode('gbk')
}
error_dir_list.append(item)
ic("crror", error_list)
ic(error_dir_list)
# ic('stdout',res.stdout.read().decode('gbk')) # 获取正确命令执行之后的结果
# ic('stderr',res.stderr.read().decode('gbk')) # 获取错误命令执行之后的结果
v2 函数版---测试ok
install_scripts.py
import os import subprocess from icecream import ic """ >>>总结: 1 把当前文件放在安装包中 whl文件结尾的同级目录下 2 将tar.gz压缩包手动解压 项目 > 安装包文件夹(如果有的话) > tar.gz压缩包 > 右键open in > Explorer > 在文件夹中手动解压 2 安装顺序 2.0 用PyCharm打开项目> 创建好虚拟环境 2.1 执行脚本 当前文件 > 右键 > Open in > Terminal > python ./install_scripts.py 说明: 用脚本安装whl结尾文件和解压后文件夹(tar结尾的的压缩包解压后) 2.2 再执行一次 2.1 2.4 手动安装未安装好的文件 2.4.0 先把打印出来的未安装的包复制到excel中,等会儿每成功装一个做一个标记 2.4.1 若是'tar.gz解压'后未安装好的文件夹 解压后文件夹 > setup.py所在文件夹 >右键 > Open in > Terminal > python setup.py install 2.4.2 若是whl文件, 则 pip install 名字==版本号 2.4 若还不能解决, 百度报错原因解决 3 启动项目,若无报错,则成功安装第三方包. """ pkgs_path = os.path.dirname(__file__) def _deal_with_error(res, lib, error_list): if res.stderr.read().decode('gbk'): single_error = { 'name': lib, 'error': res.stderr.read().decode('gbk') } error_list.append(single_error) libs_list = os.listdir(pkgs_path) # ic(libs_list) error_list = [] def src(libs_list, error_list): for lib in libs_list: # ic(lib) # 1 若是whl文件,则pip直接安装 if lib.endswith('.whl'): cmd = 'pip install %s' % lib # ic(cmd) res = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) _deal_with_error(res, lib, error_list) # 2 如果是tar.gz解压后的文件夹 elif os.path.isdir(lib): lib_rs = lib.rsplit('-') cmd = f'pip install {lib_rs[0]}=={lib_rs[1]}' res = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) _deal_with_error(res, lib, error_list) ic(error_list) src(libs_list, error_list)