【Python】 使用__init__.py 自动安装import失败的三方库

__init__.py文件

注意:根据需要在代码中标红位置添加库名, 即uselibs 

方法一:遍历列表

# coding:utf-8
import os, sys
# 三方库 如果引用的库未安装,则自动安装 try: # import Matplotlib # 导入需要添加的库名 import xlwt # 新建xls import xlrd # 读取xls from xlutils.copy import * # 修改xlsexcept ImportError as ime: # posix:对应 linux,nt:对应 windows,java:对应 java 虚拟机 if os.name == 'posix': # posix:对应 linux print("导入模块失败,失败原因:{}".format(ime)) elif os.name == 'java': # java:对应 java 虚拟机 print("导入模块失败,失败原因:{}".format(ime)) elif os.name == 'nt': # nt:对应 windows # 方法一: uselibs = ['xlwt', 'xlrd==1.2.0', 'xlutils']  # 添加需要安装的库名 try: for lib in uselibs: os.system("pip install " + lib) print("\033[1;34m pip安装 {} 成功/已存在 \033[0m".format(lib)) print("\033[1;34m \n全部安装成功,暂停10s执行后续内容 \033[0m") time.sleep(10) except Exception as e: print("\033[1;34m 未全部安装成功,退出程序,异常原因:{} \033[0m".format(e)) sys.exit()

 

方法二:pip.main()

# coding:utf-8
import os,sys, pip

# 三方库 如果引用的库未安装,则自动安装
try:
   # import lib   # 导入需要添加的库名
import xlwt # 新建xls import xlrd # 读取xls from xlutils.copy import * # 修改xls except ImportError as ime: # posix:对应 linux,nt:对应 windows,java:对应 java 虚拟机 if os.name == 'posix': # posix:对应 linux print("导入模块失败,失败原因:{}".format(ime)) elif os.name == 'java': # java:对应 java 虚拟机 print("导入模块失败,失败原因:{}".format(ime)) elif os.name == 'nt': # nt:对应 windows # 方法1:使用pip.main()方法进行依赖库的安装(例举几个常用的库) # print("导入模块异常,尝试pip安装导入模块后重新导入") pip.main(["install", "--user", 'xlwt', "xlutils", "xlrd==1.2.0"])  # 增加需要添加的库名 # 获取执行文件路径及名称 exec_file = os.path.join(os.getcwd(), os.path.basename(sys.argv[0]).upper()) os.system("python " + exec_file)

 

 

优化版本_二选一:

# coding:utf-8
import os
import pip
import sys
import time
import importlib

uselibs = ['xlwt', 'xlutils', 'xlrd==1.2.0', 'translate']  需要增加需要的库名
# 三方库 如果引用的库未安装,则自动安装
try:
   for libname in uselibs:
       importlib.import_module(libname)

except ImportError as ime:
    # 判断操作系统类型 posix:对应 linux,nt:对应 windows,java:对应 java 虚拟机
    if os.name == 'posix':      # posix:对应 linux
        print("导入模块失败,失败原因:{}".format(ime))
    elif os.name == 'java':     # java:对应 java 虚拟机
        print("导入模块失败,失败原因:{}".format(ime))
    elif os.name == 'nt':  # nt:对应 windows
        print("导入模块异常,尝试安装异常模块,请稍后~")
        try:
            """方法1:遍历libs cmd安装"""
            # for lib in uselibs:
            #     os.system("pip install " + lib)
            #     print("\033[1;34m pip install {} success/already satisfied \033[0m".format(lib))     # 控制台带颜色打印 格式 /033[
            # print("\033[1;34m \n全部安装成功,重新调用执行文件 \033[0m")

            """方法2:pip.main()安装"""
            uselib = ["install",  "--user"]
            uselib.extend(uselibs)
            pip.main(uselib)
            print("\033[1;34m 全部安装成功,即将退出程序,请重新运行文件 \033[0m")
            sys.exit()

        except Exception as e:
            print("\033[1;34m 未全部安装成功,退出程序,异常原因:{} \033[0m".format(e))
            sys.exit()
            # os.system("python " + exec_file)

 

posted @ 2023-02-08 15:39  Phoenixy  阅读(249)  评论(0)    收藏  举报