1. 程式人生 > >python3自動安裝指令碼,python3.x與python2.x共存

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