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