python3自動安裝腳本,python3.x與python2.x共存

1.前言:python

在安裝python3過程當中,經過搜索一些文章參考,發現比較麻煩,並且還出現一些不可預期的報錯。python3環境須要升級openssl,因此爲了部署到其餘環境更方便,寫自動安裝腳本方式,且安裝模式爲python3.x與python2.x共存,防止可能發生原有環境異常的狀況。linux

如今我把腳本分享出來,但願能夠幫助到有須要的人,業務採集監控python腳本文件不提供,由於那些跟實際業務開發關聯比較緊,比較沒有參考意義也不方便公開。sql

shell自動安裝腳本,只需按說明簡單修改配置,和調用集成腳本對應函數便可完成。安裝過程大約30分鐘,僅作參考,依網速快慢而定。 shell

2.文件夾功能說明:python3.x

文件夾名稱 功能說明
python3_deploy 存放部署須要shell腳本文件
python3_script 存放實現採集監控信息python腳本

 

3.python3_deploy下文件摘要說明bash

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安裝腳本 app

4.1. cnl_function.sh  腳本內容: socket

 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下的全部文件到指定目錄,能夠爲部署目錄(即步驟一、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
相關文章
相關標籤/搜索