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 脚本内容:
#!/bin/bash
#chennailuan's function #check last command id Ok or not.
check_ok(){
if [ $? != 0 ]
then
echo "Error,Check the error log."
exit 1
else
echo
fi
}
4.2.openssl_install_step_1.sh 脚本内容:
#!/bin/bash
# @author:xiufen.huang
# @date:2019-09-03
###############################################
echo ""
echo ""
echo "***************************************************************"
echo "* *"
echo "* *"
echo "* openssl服务升级自动安装部署 *"
echo "* *"
echo "* *"
echo "***************************************************************"
echo ""
echo ""
echo "*****安装时间大约15分钟,仅做参考,依网速快慢而定,请耐心等待*****" # 导入常用方法类
source ./cnl_function.sh #获取脚本所在的当前路径
path_now=$(cd "$(dirname "$0")"; pwd)
echo "脚本执行当前路径为: $path_now " start_time=$(date '+%Y-%m-%d %H:%M:%S')
echo "安装开始时间:$start_time" echo "1.下载最新版openssl"
[ -f openssl-1.1.1a.tar.gz ] || wget https://www.openssl.org/source/openssl-1.1.1a.tar.gz # 如果存在解压路径删除
[ -d openssl-1.1.1a ] && rm -rf openssl-1.1.1a echo "2.解压安装包"
tar -zxf openssl-1.1.1a.tar.gz # 检验上一命令是否正常执行完成
check_ok echo "3.备份原配置"
[ -f /usr/bin/openssl.bak ] || mv /usr/bin/openssl /usr/bin/openssl.bak
[ -f /usr/include/openssl.bak ] || mv /usr/include/openssl/ /usr/include/openssl.bak #openssl安装目录
path_openssl=/usr/local/openssl echo "4.创建安装目录"
echo "判断是否存在openssl文件夹,如果不存在则新建openssl文件夹"
if [ -d $path_openssl ]
then
echo "openssl文件夹已经创建,不需要重复创建!"
else
mkdir -p /usr/local/openssl
echo "openssl文件夹创建成功!"
fi
echo "" echo "5.编译安装编译工具及库"
cd openssl-1.1.1a
check_ok # 安装gcc编译器
yum install gcc* glien* -y
check_ok echo "开始编译......"
# 一定要shared zlib,否则python3安装带ssl,pip无法使用
./config --prefix=/usr/local/openssl shared zlib
check_ok echo "开始安装......"
make
check_ok
make install
check_ok echo "6.新版配置"
#将安装好的openssl命令软连到/usr/bin/openssl
[ -f /usr/bin/openssl ] || ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
# 将安装好的openssl 的openssl命令软连到/usr/bin/openssl
[ -f /usr/include/openssl ] || ln -s /usr/local/openssl/include/openssl /usr/include/openssl
#软链到升级后的libssl.so
[ -f /usr/local/lib64/libssl.so ] || ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/local/lib64/libssl.so
# 添加软链
[ -f /usr/lib64/libssl.so.1.1 ] || ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
[ -f /usr/lib64/libcrypto.so.1.1 ] || ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1 echo "7.修改系统配置"
#写入openssl库文件的搜索路径
echo "/usr/local/openssl/lib" >> /etc/ld.so.conf #使修改后的/etc/ld.so.conf生效
/sbin/ldconfig -v echo "8.查看openssl版本"
openssl version echo "删除安装包"
rm -rf openssl-1.1.1a
rm -rf openssl-1.1.1a.tar.gz end_time=$(date '+%Y-%m-%d %H:%M:%S')
echo "安装结束时间:$end_time" echo "openssl服务升级完成."
4.3.python3_install_step_2.sh 脚本内容:
#!/bin/bash
# @author:xiufen.huang
# @date:2019-09-03
###############################################
echo ""
echo ""
echo "***************************************************************"
echo "* *"
echo "* *"
echo "* python3.7服务自动安装部署 *"
echo "* *"
echo "* *"
echo "***************************************************************"
echo ""
echo ""
echo "*****安装时间大约12分钟,仅做参考,依网速快慢而定,请耐心等待*****" # 导入常用方法类
source ./cnl_function.sh #获取脚本所在的当前路径
path_now=$(cd "$(dirname "$0")"; pwd)
echo "脚本执行当前路径为: $path_now " start_time=$(date '+%Y-%m-%d %H:%M:%S')
echo "安装开始时间:$start_time" echo "1.下载Python-3.7.4.tgz"
[ -f Python-3.7.4.tgz ] || wget https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tgz # 如果存在解压路径删除
[ -d Python-3.7.4 ] && rm -rf Python-3.7.4 echo "2.解压安装包"
tar -xvf Python-3.7.4.tgz # 检验上一命令是否正常执行完成
check_ok echo "3.安装编译工具及库"
cd Python-3.7.4
check_ok # 安装gcc编译器
yum install gcc* glien* -y
check_ok # 非必需--安装失败时,可以尝试安装组的开发工具:
yum grouplist
check_ok
yum groupinstall 'Development Tools' -y
check_ok # 安装依赖包,解决make报错ModuleNotFoundError: No module named '_ctypes'的解决办法
yum install libffi-devel -y # python3.7安装目录
path_python=/usr/local/python3 echo "4.创建安装目录"
echo "判断是否存在python3文件夹,如果不存在则新建python3文件夹"
if [ -d $path_python ]
then
echo "python3文件夹已经创建,不需要重复创建!"
else
mkdir -p /usr/local/python3
echo "python3文件夹创建成功!"
fi
echo "" # 修改./Modules/Setup.dist文件,解决pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
# 代码块,echo一定要用单引号'
echo '_socket socketmodule.c' >> Modules/Setup.dist
echo 'SSL=/usr/local/openssl' >> Modules/Setup.dist
echo '_ssl _ssl.c \' >> Modules/Setup.dist
echo ' -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \' >> Modules/Setup.dist
echo ' -L$(SSL)/lib -lssl -lcrypto' >> Modules/Setup.dist echo "5.开始编译"
./configure --prefix=/usr/local/python3 --with-openssl=/usr/local/openssl --with-ssl-default-suites=python
check_ok echo "6.开始安装"
make
check_ok
sudo make install
check_ok echo "7.创建快捷路径"
# 添加软链接
[ -f /usr/bin/python3 ] || ln -s /usr/local/python3/bin/python3 /usr/bin/python3
[ -f /usr/bin/pip3 ] || ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3 echo "8.检验是否安装成功"
python3 -V echo "删除安装包"
rm -rf Python-3.7.4
rm -rf Python-3.7.4.tgz echo "升级pip3版本"
pip3 install --upgrade pip -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
pip3 install --upgrade setuptools -i http://pypi.douban.com/simple --trusted-host pypi.douban.com pip3 list end_time=$(date '+%Y-%m-%d %H:%M:%S')
echo "安装结束时间:$end_time" echo "python3.7服务安装完成."
4.4.python3_process_step_3.sh 脚本内容:
#!/bin/bash
# @author:xiufen.huang
# @date:2019-09-03
###############################################
echo ""
echo ""
echo "****************************************************************************"
echo "* *"
echo "* *"
echo "* python3程序自动部署&启动监控信息采集脚本 *"
echo "* 部署需要的文件,需要提前用rz上传,详细请参阅:详细操作步骤说明.md *"
echo "* *"
echo "* *"
echo "****************************************************************************"
echo ""
echo ""
echo "***********部署时间大约3分钟,仅做参考,依网速快慢而定,请耐心等待************" # 导入常用方法类
source ./cnl_function.sh # 程序部署目录(根据自己情况,修改为自己的部署目录)
deploy_path="/apps/python3_script" # 监控信息采集脚本
startup_file="collector_startup.py" # 切到程序部署目录
cd $deploy_path #获取脚本所在的当前路径
path_now=$(cd "$(dirname "$0")"; pwd)
echo "脚本执行当前路径为: $path_now " start_time=$(date '+%Y-%m-%d %H:%M:%S')
echo "部署开始时间:$start_time" echo "1.安装dos2unix命令"
yum -y install dos2unix* check_ok echo "2.安装postgresql插件"
# linux环境要安装模块psycopg2,需要先安装postgresql插件
yum install postgresql-devel* -y # 判断是否上传脚本了
if [ ! -e requirements.txt ]
then
echo "本次部署需要脚本,请再次确认是否按【详细操作步骤说明.md】 上传了?"
exit 1
else
# 1.执行命令安装requirements.txt中的模块
echo "3.安装程序需要的python3模块"
pip3 install -r requirements.txt -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
check_ok
fi # 查看已经安装的模块
pip3 list echo "4.睡眠2秒,查看安装模块"
sleep 2s echo "5.转换脚本文件格式"
sudo find -name "*.py" | xargs dos2unix check_ok echo "6.批量增加可执行权限"
chmod +x *.py echo "7.启动python程序"
nohup python3 -u $deploy_path/$startup_file & sleep 1s
rm -rf nohup.out end_time=$(date '+%Y-%m-%d %H:%M:%S')
echo "8.部署结束时间:$end_time" echo "python3程序部署完成."
4.5.deploy_python3.sh 脚本内容:
#!/bin/bash
# @author:xiufen.huang
# @date:2019-09-03
###############################################
echo ""
echo ""
echo "**************************************************"
echo "* *"
echo "* *"
echo "* python3程序部署集成脚本 *"
echo "* 详细请参阅:详细操作步骤说明.md *"
echo "* *"
echo "* *"
echo "**************************************************"
echo ""
echo "" # openssl服务升级自动安装部署--shell脚本
step_1="openssl_install_step_1.sh" # python3.7服务自动安装部署--shell脚本
step_2="python3_install_step_2.sh" # python3程序自动部署--shell脚本
step_3="python3_process_step_3.sh" # 程序部署目录(根据自己情况,修改为自己的部署目录)
deploy_path="/apps/python3_script" # 监控信息采集脚本
startup_file="collector_startup.py" # openssl服务升级自动安装部署
function openssl(){
sh $step_1
} # python3.7服务自动安装部署
function python3(){
sh $step_2
} # python3程序自动部署&启动监控信息采集脚本--shell脚本
function process(){
sh $step_3
} # 启动监控信息采集脚本
function start(){
echo "开始启动监控信息采集脚本..."
#查找python3运行的进程数
num=`ps -ef|grep python3|grep -v grep|wc -l`
#echo "$num...."
#判断是否有python3进程运行,如果没有则运行执行nohup命令
if [ "$num" = "" ] || [ "$num" = "" ] ;then
# 切到程序部署目录
cd $deploy_path
nohup python3 -u $deploy_path/$startup_file &
echo "启动成功..."
sleep 1s
rm -rf nohup.out
else
echo "进程已经存在,启动失败,请检查..."
exit 0
fi
} # 信息监控信息采集脚本
function stop(){
echo "开始停止监控信息采集脚本..."
num=`ps -ef|grep python3|grep -v grep|wc -l`
#echo "$num...."
if [ "$num" = "" ] || [ "$num" = "" ];then
echo "服务未启动,无须停止..."
else
#正常停止python3
ps -ef|grep python3|grep -v grep|awk '{print $2;}'|xargs kill
echo "进程已经关闭..."
fi
} #case 命令获取输入的参数,例:参数:start,执行start(),参数:stop,执行stop(),
case "$1" in
"openssl")
openssl
;;
"python3")
python3
;;
"process")
process
;;
"start")
start
;;
"stop")
stop
;;
*)
;;
esac
5.使用说明
5.1.配置部署路径-自动部署脚本
文件路径:/python3_deploy/python3_process_step_3.sh ,只需修改程序部署目录deploy_path的值
# 程序部署目录(根据自己情况,修改为自己的部署目录)
deploy_path="/apps/python3_script"
5.2.配置部署路径-集成脚本
文件路径:/python3_deploy/deploy_python3.sh ,只需修改程序部署目录deploy_path的值
# 程序部署目录(根据自己情况,修改为自己的部署目录)
deploy_path="/apps/python3_script"
5.3.上传部署shell脚本
上传文件夹:python3_deploy下的所有文件到指定目录,可以为部署目录(即步骤1、2配置值),也可自己创建的一个目录存储(建议单独目录存储)。假设存储目录:/apps/python3_deploy 。上传完成后,需要为shell脚本给定可执行权限。
# 批量增加可执行权限
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分钟,仅做参考,依网速快慢而定。
#自动升级命令
sh deploy_python3.sh openssl
升级完成,会给出提示信息:openssl服务升级完成,及升级后版本信息。
5.5.安装python3.7服务
安装模式为python3.x与python2.x共存。命令:python , pthon2 指向python2.x,命令:python3,pip3指向python3.x。
安装只需要集成脚本提供的函数,完成自动安装,过程大约12分钟,仅做参考,依网速快慢而定。
# 自动安装命令
sh deploy_python3.sh python3
安装完成,会给出提示信息:python3.7服务安装完成,及安装版本,python3模块信息。
5.6.部署采集监控信息
该步骤完成python3程序自动部署环境初始化和启动监控信息采集脚本,原则上只执行一次,可执行多次。
安装只需要集成脚本提供的函数,完成自动部署,过程大约3分钟,仅做参考,依网速快慢而定。
# 自动部署命令
sh deploy_python3.sh process
部署完成,会给出提示信息:python3程序部署完成。
5.7.程序启动或停止
启动或停止命令不限次调用,按需调用。
# 启动
sh deploy_python3.sh start # 停止
sh deploy_python3.sh stop
python3自动安装脚本,python3.x与python2.x共存的更多相关文章
- mysql 自动备份和nginx自动安装脚本
一.自动备份Mysql脚本: 如下脚本为mysql自动备份脚本,仅供参考,可以根据实际情况修改. #!/bin/sh #auto backup mysql #wugk #Define PATH定义变量 ...
- Windows ftp脚本和RSCD agent自动安装脚本
Windows ftp脚本 和bladelogic RSCD Agent自动安装脚本 比较简单的命令是msiexec /I "C:\RSCD85-SP1-WIN64.msi" /Q ...
- python第三方库自动安装脚本
#python第三方库自动安装脚本,需要在cmd中运行此脚本#BatchInstall.pyimport oslibs = {"numpy","matplotlib&qu ...
- LAMP自动安装脚本
#!/bin/bash # 功能描述:LAMP自动安装脚本 # 初始化 if [ "$(cat /etc/system-release | awk '{print $(NF-1)}' | a ...
- Mysql5.7免编译版自动安装脚本
一:readme: .此脚本仅仅适合于5.7免面编译安装版本. .安装是需自己选择mysql软件安装包:例如mysql--linux-glibc2.-x86_64.-linux-glibc2.-x86 ...
- centos6.5下 python3.6安装、python3.6虚拟环境
https://www.cnblogs.com/paladinzxl/p/6919049.html # python3.6的安装 wget https://www.python.org/ftp/pyt ...
- OpenJDK自动安装脚本 InstallOpenJDK.vbs
Oracle JDK 要收费了,Open JDK没有安装包,只有Zip,写了个安装脚本 InstallOpenJDK.vbs Rem ********************************* ...
- 自动安装脚本-------------基于LVMP搭建Nagios 监控
Mysql初始化参数(mysql-5.6.31) /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local ...
- hadoop自动安装脚本
还不能实现完全自动安装,只能算半自动的. 进行交互主要障碍有两点: 1. ssh-keygen的时候需要点击回车. 2. passwd 需要设置密码 如果谁能解决以上两点,欢迎email给我. 另外 ...
随机推荐
- IOS之Core Foundation框架和Cocoa Foundation框架的区别(转)
Core Foundation框架 (CoreFoundation.framework) 是一组C语言接口,它们为iOS应用程序提供基本数据管理和服务功能.下面列举该框架支持进行管理的数据以及可提供的 ...
- 吴裕雄--天生自然C语言开发:enum(枚举)
enum DAY { MON=, TUE, WED, THU, FRI, SAT, SUN }; enum DAY { MON=, TUE, WED, THU, FRI, SAT, SUN }; en ...
- java replaceall 用法:处理特殊字符
public class TryDotRegEx { public static void main(String[] args) { // TODO Auto-generated method st ...
- Linux SSH 允许root用户远程登录和无密码登录
1. 允许root用户远程登录 修改ssh服务配置文件 sudo vi /etc/ssh/sshd_config调整PermitRootLogin参数值为yes,如下图: 2. 允许无密码登录同上,修 ...
- KUKA机器人常见十大问题及解决方法
1 开机坐标系无效 世界坐标系是以枪头为基点,在这种坐标系中,机器人所有的动作都是按照以枪头为顶点来完成移动,XYZ方向切割枪方向不改变,如果机器人在世界坐标系中移动,枪头也随着改变方向,那就是我们在 ...
- C++头文件和std命名空间
C++ 是在C语言的基础上开发的,早期的 C++ 还不完善,不支持命名空间,没有自己的编译器,而是将 C++ 代码翻译成C代码,再通过C编译器完成编译.这个时候的 C++ 仍然在使用C语言的库,std ...
- python语法基础-函数-迭代器和生成器-长期维护
############### 迭代器 ############## """ 迭代器 这是一个新的知识点 我们学习过的可以迭代的对象有哪些? list str ...
- python-django-fastdfs+Nginx的安装和配置_20191122
python-django-fastdfs+Nginx的安装和配置 FastDFS文件系统 FastDFS文件系统简介: 是c语言编写的,是淘宝的架构师写的,存储淘宝的图片,后来开源了, fastDF ...
- Null Hypotheses| Alternative Hypotheses|Hypothesis Test|Significance Level|two tailed |one tailed|
9.1 The Nature of Hypothesis Testing Over the years, however, null hypothesis has come to mean simpl ...
- get 传中文,可以通过下面这种方式
window.location.href=encodeURI("<%=path%>/XXX.XXX?name=中文"); 然后在后台通过new String(reque ...