脚本安装第三方包

参考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)

 

posted @ 2022-07-31 14:18  tslam  阅读(54)  评论(0编辑  收藏  举报