python3自动安装脚本,python3.x与python2.x共存

1.前言:

python3过程中,通过搜索一些文章参考安装过程发现比较麻烦,而且还出现一些不可预期的报错。python3环境需要升级openssl,所以为了部署到其他环境更方便,写自动安装脚本方式,且安装模式为python3.x与python2.x共存,防止可能发生原有环境异常的情况。

现在我把脚本分享出来,希望可以帮助到有需要的人,业务采集监控python脚本文件不提供,因为那些跟实际业务开发关联比较紧,比较没有参考意义也不方便公开。

shell自动安装脚本,只需按说明简单修改配置,和调用集成脚本对应函数即可完成。安装过程大约30分钟,仅做参考,依网速快慢而定。 

2.文件夹功能说明:

文件夹名称 功能说明
python3_deploy 存放部署需要shell脚本文件
python3_script 存放实现采集监控信息python脚本

 

3.python3_deploy下文件摘要说明

shell脚本文件 主要用途 备注
cnl_function.sh 常用方法(检测上一次操作是否正常完成) 安装服务脚本引用
openssl_install_step_1.sh openssl服务升级自动安装部署  
python3_install_step_2.sh python3.7服务自动安装部署  
python3_process_step_3.sh python3程序自动部署&启动监控信息采集脚本 需配置,下文详细说明
deploy_python3.sh 集成脚本,主要操作入口 需配置,下文详细说明

4.shell安装脚本 

4.1. cnl_function.sh  脚本内容: 

 1 #!/bin/bash   2 #chennailuan's function   3   4   5 #check last command id Ok or not.   6 check_ok(){   7     if [ $? != 0 ]   8     then   9         echo "Error,Check the error log."  10         exit 1  11     else  12         echo  13     fi  14 }

 

4.2.openssl_install_step_1.sh 脚本内容:  

  1 #!/bin/bash    2 # @author:xiufen.huang    3 # @date:2019-09-03    4 ###############################################    5 echo ""    6 echo ""    7 echo "***************************************************************"    8 echo "*                                                             *"    9 echo "*                                                             *"   10 echo "*               openssl服务升级自动安装部署                   *"   11 echo "*                                                             *"   12 echo "*                                                             *"   13 echo "***************************************************************"   14 echo ""   15 echo ""   16 echo "*****安装时间大约15分钟,仅做参考,依网速快慢而定,请耐心等待*****"   17   18 # 导入常用方法类   19 source ./cnl_function.sh   20   21 #获取脚本所在的当前路径   22 path_now=$(cd "$(dirname "$0")"; pwd)   23 echo "脚本执行当前路径为: $path_now "   24   25 start_time=$(date '+%Y-%m-%d %H:%M:%S')   26 echo "安装开始时间:$start_time"   27   28 echo "1.下载最新版openssl"   29 [ -f openssl-1.1.1a.tar.gz ] || wget https://www.openssl.org/source/openssl-1.1.1a.tar.gz   30   31 # 如果存在解压路径删除   32 [ -d openssl-1.1.1a ] && rm -rf openssl-1.1.1a   33   34 echo "2.解压安装包"   35 tar -zxf openssl-1.1.1a.tar.gz   36   37 # 检验上一命令是否正常执行完成   38 check_ok   39   40 echo "3.备份原配置"   41 [ -f /usr/bin/openssl.bak ] || mv /usr/bin/openssl /usr/bin/openssl.bak   42 [ -f /usr/include/openssl.bak ] || mv /usr/include/openssl/ /usr/include/openssl.bak   43   44 #openssl安装目录   45 path_openssl=/usr/local/openssl   46   47 echo "4.创建安装目录"   48 echo "判断是否存在openssl文件夹,如果不存在则新建openssl文件夹"   49 if [ -d $path_openssl ]   50 then   51  echo "openssl文件夹已经创建,不需要重复创建!"   52 else   53  mkdir -p /usr/local/openssl   54  echo "openssl文件夹创建成功!"   55 fi   56 echo ""   57   58 echo "5.编译安装编译工具及库"   59 cd openssl-1.1.1a   60 check_ok   61   62 # 安装gcc编译器   63 yum install gcc* glien* -y   64 check_ok   65   66 echo "开始编译......"   67 # 一定要shared zlib,否则python3安装带ssl,pip无法使用   68 ./config --prefix=/usr/local/openssl shared zlib   69 check_ok   70   71 echo "开始安装......"   72 make   73 check_ok   74 make install   75 check_ok   76   77 echo "6.新版配置"   78 #将安装好的openssl命令软连到/usr/bin/openssl   79 [ -f /usr/bin/openssl ] || ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl   80 # 将安装好的openssl 的openssl命令软连到/usr/bin/openssl   81 [ -f /usr/include/openssl ] || ln -s /usr/local/openssl/include/openssl /usr/include/openssl   82 #软链到升级后的libssl.so   83 [ -f /usr/local/lib64/libssl.so ] || ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/local/lib64/libssl.so   84 # 添加软链   85 [ -f /usr/lib64/libssl.so.1.1 ] || ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1   86 [ -f /usr/lib64/libcrypto.so.1.1 ] || ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1   87   88 echo "7.修改系统配置"   89 #写入openssl库文件的搜索路径   90 echo "/usr/local/openssl/lib" >> /etc/ld.so.conf   91   92 #使修改后的/etc/ld.so.conf生效    93 /sbin/ldconfig -v   94   95 echo "8.查看openssl版本"   96 openssl version   97   98 echo "删除安装包"   99 rm -rf openssl-1.1.1a  100 rm -rf openssl-1.1.1a.tar.gz  101  102 end_time=$(date '+%Y-%m-%d %H:%M:%S')  103 echo "安装结束时间:$end_time"  104  105 echo "openssl服务升级完成."   

       

4.3.python3_install_step_2.sh 脚本内容:  

  1 #!/bin/bash    2 # @author:xiufen.huang    3 # @date:2019-09-03    4 ###############################################    5 echo ""    6 echo ""    7 echo "***************************************************************"    8 echo "*                                                             *"    9 echo "*                                                             *"   10 echo "*              python3.7服务自动安装部署                      *"   11 echo "*                                                             *"   12 echo "*                                                             *"   13 echo "***************************************************************"   14 echo ""   15 echo ""   16 echo "*****安装时间大约12分钟,仅做参考,依网速快慢而定,请耐心等待*****"   17   18 # 导入常用方法类   19 source ./cnl_function.sh   20   21 #获取脚本所在的当前路径   22 path_now=$(cd "$(dirname "$0")"; pwd)   23 echo "脚本执行当前路径为: $path_now "   24   25 start_time=$(date '+%Y-%m-%d %H:%M:%S')   26 echo "安装开始时间:$start_time"   27   28 echo "1.下载Python-3.7.4.tgz"   29 [ -f Python-3.7.4.tgz ] || wget https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tgz   30   31 # 如果存在解压路径删除   32 [ -d Python-3.7.4 ] && rm -rf Python-3.7.4   33   34 echo "2.解压安装包"   35 tar -xvf Python-3.7.4.tgz   36   37 # 检验上一命令是否正常执行完成   38 check_ok   39   40 echo "3.安装编译工具及库"   41 cd Python-3.7.4   42 check_ok   43   44 # 安装gcc编译器   45 yum install gcc* glien* -y   46 check_ok   47   48 # 非必需--安装失败时,可以尝试安装组的开发工具:   49 yum grouplist   50 check_ok   51 yum groupinstall 'Development Tools' -y   52 check_ok   53   54 # 安装依赖包,解决make报错ModuleNotFoundError: No module named '_ctypes'的解决办法   55 yum install libffi-devel -y   56   57 # python3.7安装目录   58 path_python=/usr/local/python3   59   60 echo "4.创建安装目录"   61 echo "判断是否存在python3文件夹,如果不存在则新建python3文件夹"   62 if [ -d $path_python ]   63 then   64  echo "python3文件夹已经创建,不需要重复创建!"   65 else   66  mkdir -p /usr/local/python3   67  echo "python3文件夹创建成功!"   68 fi   69 echo ""   70   71 # 修改./Modules/Setup.dist文件,解决pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.   72 # 代码块,echo一定要用单引号'   73 echo '_socket socketmodule.c' >> Modules/Setup.dist   74 echo 'SSL=/usr/local/openssl' >> Modules/Setup.dist   75 echo '_ssl _ssl.c ' >> Modules/Setup.dist   76 echo '   -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl ' >> Modules/Setup.dist   77 echo '   -L$(SSL)/lib -lssl -lcrypto' >> Modules/Setup.dist   78   79 echo "5.开始编译"   80 ./configure --prefix=/usr/local/python3 --with-openssl=/usr/local/openssl --with-ssl-default-suites=python   81 check_ok   82   83 echo "6.开始安装"   84 make   85 check_ok   86 sudo make install   87 check_ok   88   89 echo "7.创建快捷路径"   90 # 添加软链接   91 [ -f /usr/bin/python3 ] || ln -s /usr/local/python3/bin/python3 /usr/bin/python3   92 [ -f /usr/bin/pip3 ] || ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3   93   94 echo "8.检验是否安装成功"   95 python3 -V   96   97 echo "删除安装包"   98 rm -rf Python-3.7.4   99 rm -rf Python-3.7.4.tgz  100  101 echo "升级pip3版本"  102 pip3 install --upgrade pip  -i http://pypi.douban.com/simple --trusted-host pypi.douban.com  103 pip3 install --upgrade setuptools -i http://pypi.douban.com/simple --trusted-host pypi.douban.com  104  105 pip3 list  106  107 end_time=$(date '+%Y-%m-%d %H:%M:%S')  108 echo "安装结束时间:$end_time"  109  110 echo "python3.7服务安装完成."   

 

4.4.python3_process_step_3.sh 脚本内容: 

 1 #!/bin/bash   2 # @author:xiufen.huang   3 # @date:2019-09-03   4 ###############################################   5 echo ""   6 echo ""   7 echo "****************************************************************************"   8 echo "*                                                                          *"   9 echo "*                                                                          *"  10 echo "*             python3程序自动部署&启动监控信息采集脚本                     *"  11 echo "*   部署需要的文件,需要提前用rz上传,详细请参阅:详细操作步骤说明.md        *"  12 echo "*                                                                          *"  13 echo "*                                                                          *"  14 echo "****************************************************************************"  15 echo ""  16 echo ""  17 echo "***********部署时间大约3分钟,仅做参考,依网速快慢而定,请耐心等待************"  18  19 # 导入常用方法类  20 source ./cnl_function.sh  21  22 # 程序部署目录(根据自己情况,修改为自己的部署目录)  23 deploy_path="/apps/python3_script"  24  25 # 监控信息采集脚本  26 startup_file="collector_startup.py"  27  28 # 切到程序部署目录  29 cd $deploy_path  30  31 #获取脚本所在的当前路径  32 path_now=$(cd "$(dirname "$0")"; pwd)  33 echo "脚本执行当前路径为: $path_now "  34  35 start_time=$(date '+%Y-%m-%d %H:%M:%S')  36 echo "部署开始时间:$start_time"  37  38 echo "1.安装dos2unix命令"  39 yum -y install dos2unix*  40  41 check_ok  42  43 echo "2.安装postgresql插件"  44 # linux环境要安装模块psycopg2,需要先安装postgresql插件  45 yum install postgresql-devel* -y  46  47 # 判断是否上传脚本了  48 if [ ! -e requirements.txt ]  49 then  50     echo "本次部署需要脚本,请再次确认是否按【详细操作步骤说明.md】 上传了?"  51     exit 1  52 else  53     # 1.执行命令安装requirements.txt中的模块  54     echo "3.安装程序需要的python3模块"  55     pip3 install -r requirements.txt -i http://pypi.douban.com/simple --trusted-host pypi.douban.com  56     check_ok  57 fi  58  59 # 查看已经安装的模块  60 pip3 list  61  62 echo "4.睡眠2秒,查看安装模块"  63 sleep 2s  64  65 echo "5.转换脚本文件格式"  66 sudo find -name "*.py" | xargs dos2unix  67  68 check_ok  69  70 echo "6.批量增加可执行权限"  71 chmod +x *.py  72  73 echo "7.启动python程序"  74 nohup python3 -u $deploy_path/$startup_file &  75  76 sleep 1s  77 rm -rf nohup.out  78  79 end_time=$(date '+%Y-%m-%d %H:%M:%S')  80 echo "8.部署结束时间:$end_time"  81  82 echo "python3程序部署完成."   

 

4.5.deploy_python3.sh 脚本内容:

  1 #!/bin/bash    2 # @author:xiufen.huang    3 # @date:2019-09-03    4 ###############################################    5 echo ""    6 echo ""    7 echo "**************************************************"    8 echo "*                                                *"    9 echo "*                                                *"   10 echo "*          python3程序部署集成脚本               *"   11 echo "*         详细请参阅:详细操作步骤说明.md        *"   12 echo "*                                                *"   13 echo "*                                                *"   14 echo "**************************************************"   15 echo ""   16 echo ""   17   18 # openssl服务升级自动安装部署--shell脚本   19 step_1="openssl_install_step_1.sh"   20   21 # python3.7服务自动安装部署--shell脚本   22 step_2="python3_install_step_2.sh"   23   24 # python3程序自动部署--shell脚本   25 step_3="python3_process_step_3.sh"   26   27 # 程序部署目录(根据自己情况,修改为自己的部署目录)   28 deploy_path="/apps/python3_script"   29   30 # 监控信息采集脚本   31 startup_file="collector_startup.py"   32   33 # openssl服务升级自动安装部署   34 function openssl(){   35 sh $step_1   36 }   37   38 # python3.7服务自动安装部署   39 function python3(){   40 sh $step_2   41 }   42   43 # python3程序自动部署&启动监控信息采集脚本--shell脚本   44 function process(){   45 sh $step_3   46 }   47   48 # 启动监控信息采集脚本   49 function start(){   50 echo "开始启动监控信息采集脚本..."   51 #查找python3运行的进程数   52 num=`ps -ef|grep python3|grep -v grep|wc -l`   53 #echo "$num...."   54 #判断是否有python3进程运行,如果没有则运行执行nohup命令    55 if [ "$num" = "0" ] || [  "$num" = "2" ] ;then   56 # 切到程序部署目录   57 cd $deploy_path   58 nohup python3 -u $deploy_path/$startup_file &   59 echo "启动成功..."   60 sleep 1s   61 rm -rf nohup.out   62 else   63 echo "进程已经存在,启动失败,请检查..."   64 exit 0   65 fi   66 }   67   68 # 信息监控信息采集脚本   69 function stop(){   70 echo "开始停止监控信息采集脚本..."   71 num=`ps -ef|grep python3|grep -v grep|wc -l`   72 #echo "$num...."   73 if [ "$num" = "0" ] || [ "$num" = "2" ];then   74 echo "服务未启动,无须停止..."   75 else   76 #正常停止python3   77 ps -ef|grep python3|grep -v grep|awk '{print $2;}'|xargs kill   78 echo "进程已经关闭..."   79 fi   80 }   81   82   83 #case 命令获取输入的参数,例:参数:start,执行start(),参数:stop,执行stop(),   84 case "$1" in   85 "openssl")   86 openssl   87 ;;   88 "python3")   89 python3   90 ;;   91 "process")   92 process   93 ;;   94 "start")   95 start   96 ;;   97 "stop")   98 stop   99 ;;  100 *)  101 ;;  102 esac

 

5.使用说明

5.1.配置部署路径-自动部署脚本

文件路径:/python3_deploy/python3_process_step_3.sh ,只需修改程序部署目录deploy_path的值

1 # 程序部署目录(根据自己情况,修改为自己的部署目录)  2 deploy_path="/apps/python3_script"

 

5.2.配置部署路径-集成脚本

文件路径:/python3_deploy/deploy_python3.sh ,只需修改程序部署目录deploy_path的值

1 # 程序部署目录(根据自己情况,修改为自己的部署目录)  2 deploy_path="/apps/python3_script"

 

5.3.上传部署shell脚本

上传文件夹:python3_deploy下的所有文件到指定目录,可以为部署目录(即步骤1、2配置值),也可自己创建的一个目录存储(建议单独目录存储)。假设存储目录:/apps/python3_deploy 。上传完成后,需要为shell脚本给定可执行权限。

1 # 批量增加可执行权限  2 chmod +x *.sh

 

5.4.升级openssl服务版本

升级openssl版本,是为了解决:使用pip3时报错: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.

安装只需要集成脚本提供的函数,完成自动升级,过程大约15分钟,仅做参考,依网速快慢而定。

1 #自动升级命令  2 sh deploy_python3.sh openssl

升级完成,会给出提示信息:openssl服务升级完成,及升级后版本信息。

 

5.5.安装python3.7服务

安装模式为python3.x与python2.x共存。命令:python , pthon2 指向python2.x,命令:python3,pip3指向python3.x。

安装只需要集成脚本提供的函数,完成自动安装,过程大约12分钟,仅做参考,依网速快慢而定。

1 # 自动安装命令  2 sh deploy_python3.sh python3

安装完成,会给出提示信息:python3.7服务安装完成,及安装版本,python3模块信息。

 

5.6.部署采集监控信息

该步骤完成python3程序自动部署环境初始化和启动监控信息采集脚本,原则上只执行一次,可执行多次。

安装只需要集成脚本提供的函数,完成自动部署,过程大约3分钟,仅做参考,依网速快慢而定。

1 # 自动部署命令  2 sh deploy_python3.sh process

部署完成,会给出提示信息:python3程序部署完成。

 

5.7.程序启动或停止

启动或停止命令不限次调用,按需调用。

1 # 启动  2 sh deploy_python3.sh start  3  4 # 停止  5 sh deploy_python3.sh stop