linux/macosx/windows 使用 shell/bat 脚本,自动安装python3,创建python 虚拟环境

Linux/Windows下使用shell/bat脚本安装python3

Windows

在windows下, 使用静默模式安装python3.7, 部署python3.7 virtualenv 环境。
start.bat, 目前脚本有个bug, 在调用python_install.bat脚本的时候, 不会等此脚本里的所有程序跑完, 经过多次验证,在创建虚拟环境这一步容易出现,待改进。

@echo off 
set work_disk=%~d0
set work_path=%~dp0

taskkill /F /IM xxx_server.exe

::检查是否安装了git-base
set GIT_PATH=""
for /f %%I in ('where git') do echo %%I findstr 'git' && set GIT_PATH=%%I
echo -----ok
if %GIT_PATH% == "" goto Install_env

set python_name=plugins_py3
set dist_path=%USERPROFILE%\.proj-plugins\plugins\%python_name%
echo -----2
echo %dist_path%
if exist %dist_path% (
    echo %dist_path%
) else (
    goto Install_env
)

set python3_path=""
for /f %%I in ('where python') do echo %%I findstr 'python37' && set python3_path=%%I
echo %python3_path%

if %python3_path% == "" (
	rmdir /Q /S %dist_path%
	goto Install_env
) else (
	goto Run
)

::安装python,创建python虚拟环境
:Install_env
start /wait "install" cmd /c call python_install.bat

::后台启动程序 xxx_server.exe
:Run
cd %work_path%
%work_disk%
::
if "%1" == "h" goto begin 
mshta vbscript:createobject("wscript.shell").run("%~nx0 h",0)(window.close)&&exit 
:begin
xxx_server.exe

python_install.bat

  1. 用于获取管理员权限
  2. 从注册表修改环境变量
  3. 检测git-bash 、python 是否安装, 否则执行安装, 静默模式安装python, 但 git-bash 的安装不能指定静默模式
  4. 安装pip, virtualenv
  5. 创建python虚拟环境
@echo off
set work_disk=%~d0
set work_path=%~dp0
set hide_work=%1
echo %hide_work%
echo %work_disk%
echo %work_path%
:: BatchGotAdmin
:-------------------------------------
REM  --> Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"

REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
    echo Requesting administrative privileges...
    goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"

    "%temp%\getadmin.vbs"
    exit /B

:gotAdmin
    if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
    pushd "%CD%"
    CD /D "%~dp0"
	REM reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f
	echo add success
	echo %errorlevel%

echo **********1
copy /y %work_path%\start_plugins.exe c:\windows

::检查是否安装了git-base
set GIT_PATH=""
for /f %%I in ('where git') do echo %%I findstr 'git' && set GIT_PATH="%%I"

if %GIT_PATH% == "" (
	ECHO Start to install Git-2.23.0-64-bit.exe win32......
	start /wait %~dp0\Git-2.23.0-64-bit.exe /quiet
	ECHO install Git-2.23.0-64-bit.exe successfully......
) else (
	echo git-base has been already installed!
)

echo **********2
set tmp_pip3=Scripts\pip3.exe
set python3_path=""
set pip3_path=""

::检查python3.7是否已经安装
for /f %%I in ('where python') do echo %%I findstr 'python37' && set python3_path=%%I
echo 88888888888888888
echo %python3_path%
echo %python3_path%
echo %python3_path%
if exist %python3_path% (
    echo python3.7 has been already installed!
) else (
	:Install_Python
	ECHO Start to install python-3.7.3-amd64.exe win32......
	start /wait %~dp0\python-3.7.3-amd64.exe /quiet InstallAllUsers=1 TargetDir=c:\python37 Include_pip=0 Include_test=0 PrependPath=1 
	ECHO install python-3.7.3-amd64.exe successfully......
	::获取python3.7的路径
	for /f %%I in ('where python') do echo %%I findstr 'python37' && set python3_path=%%I
	
)
for %%A in ("%python3_path%") do (
	Set Folder=%%~dpA
	Set Name=%%~nxA
)

echo **********3
::是否有pip3
set pip3_path=%Folder%%tmp_pip3%
echo %Folder%
echo %Name%
echo %pip3_path%


if exist %pip3_path% (
        echo has %pip3_path%
) else (
	::没有pip3, 安装pip3
	cd bin
	curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
	%python3_path% get-pip.py
	cd ..
)


set pip3_path=%Folder%%tmp_pip3%
if exist %pip3_path% (
	::安装 virtualenv
	%pip3_path% install virtualenv
) else (
	echo 找不到pip, 请检查python3环境
)



echo **********4
::创建plugins_py3虚拟环境
set dist_path=%USERPROFILE%\.proj-plugins\plugins
set user_root=%HOMEDRIVE%
set python_name=plugins_py3

if exist %dist_path% (
    echo dir %dist_path% already exist!
) else (
    md %dist_path%
    echo mkdir %dist_path% success
)

echo %dist_path%

echo %user_root%
echo %python_name%


::切换到目标路径
for %%A in ("%dist_path%") do (
    Set Disk=%%~dA
)
echo --------------
cd %dist_path%
%Disk%
echo ---------- 1
echo %cd%

echo **********5
set virtual_python3=%dist_path%\%python_name%
echo %virtual_python3%

if exist %virtual_python3% (
    echo python virtuaenv %python_name% already exist!
) else (
    %Folder%\Scripts\virtualenv -p %python3_path% %python_name%    
)
cd %virtual_python3%
cd Scripts
echo %cd%
call activate
echo create python virtualenv success
echo virtualenv path %cd%
call deactivate


echo %errorlevel%
if %errorlevel% == 0 (
    echo python3 virtuaenv available
) else (
	echo error run python virtualenv error
    echo please check python virtualenv[%virtual_python3%]
    
    exit
)
echo **********end

Linux/macosx

在linux/macosx下, 安装python, 部署python virtualenv 环境。
start.sh, 需要以管理员方式启动脚本

#!/usr/bin/env bash

branch=$1
SHELL_FOLDER=$(cd "$(dirname "$0")";pwd)
echo $SHELL_FOLDER
cd $SHELL_FOLDER

sh ./python_install.sh
if [ $? -eq 0 ]; then
    echo "configure python env success"
else
    echo "configure python env failure"
    exit
fi

chmod +x ./plugins_server
chmod +x ./start_plugins
pkill -9 plugins_server
cp ./start_plugins /usr/local/bin
sleep 3

if [[ "$branch" == "" ]];then
    nohup ./plugins_server >> /dev/null &
else
    nohup ./plugins_server -b $branch >> /dev/null &
fi

sleep 3

ps=`ps aux | grep plugins_server | grep -v grep`
if [ $? != 0 ]
then
	echo "start plugins_server fail"
else
	echo "start plugins_server success"
fi

exit

python_install.sh

  1. 识别系统类型
  2. 针对不同系统, 安装不同的python3.6 依赖 , 安装python3.6
  3. 安装git工具(没有的话)
  4. 安装 pip, virtualenv
  5. 创建python虚拟环境
#!/usr/bin/env bash

python3_path=""
SYS_TYPE=""

uname | grep -qwi "linux"
if [[ $? == 0 ]];then
	RESULTS=$(uname -a | grep -qwi "ubuntu")
	if [[ $RESULTS == 0 ]];then
		SYS_TYPE="ubuntu"
	else
		SYS_TYPE="centos"
	fi
elif [[ "$(uname)" == "Darwin" ]];then
	echo "macosx"
	SYS_TYPE="macosx"
else
	echo "unknown system type"
	exit 1
fi

echo "system type $SYS_TYPE"

python_name=plugins_py3
dist_path=$HOME/.proj-plugins/plugins
virtual_python3=$dist_path/$python_name

function install_sys_dependence () {
	if [[ "$SYS_TYPE" == "centos" ]];then
		sudo yum -y update
		sudo yum -y groupinstall "Development tools"
		sudo yum -y install yum-utils
		sudo yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
		sudo yum -y install https://centos7.iuscommunity.org/ius-release.rpm
	elif [[ "$SYS_TYPE" == "ubuntu" ]];then
		echo "install dependencies"
	fi
}
 
function install_python3 () {
	echo "will be install python3"
	if [[ "$SYS_TYPE" == "centos" ]];then
		sudo yum -y install python36u
		python3 -V
		sudo yum -y install python36u-pip
		sudo yum -y install python36u-devel
	elif [[ "$SYS_TYPE" == "ubuntu" ]];then
		echo "install python3 on ubuntu"
	elif [[ "$SYS_TYPE" == "macosx" ]];then
		curl https://www.python.org/ftp/python/3.6.8/python-3.6.8-macosx10.6.pkg -o python-3.6.8-macosx10.6.pkg
		sudo installer -pkg python-3.6.8-macosx10.6.pkg -target /
		# brew install python3
	fi
}

function install_git () {
	GIT_PATH=`which git`
	if [[ "$(which git)" == "" ]];then
		echo "install git"
	else
		echo "git installed already"
		return
	fi

	if [[ "$SYS_TYPE" == "centos" ]];then
		yum -y install git
	elif [[ "$SYS_TYPE" == "ubuntu" ]];then
		apt-get update
		apt-get install git
	elif [[ "$SYS_TYPE" == "macosx" ]];then
		brew install git
	fi
}

function find_python3 () {
	python3_dir=""
	python_cmd=`which python3`
	# 两种方法可以设置字符串切割方式, 空格或换行
	#SAVEIFS=$IFS
	#IFS=$(echo -en "\n")
	OLD_IFS="$IFS"
	IFS=" "
	array=($python_cmd)
	for var in ${array[@]}
	do	
		if [[ $var == *python3* ]] && [[ $var == *bin* ]]
		then
			python3_dir=$var
			if [[ $python3_dir != "" ]];then
				break
			fi
		fi
	done
	echo "$python3_dir"
}

function find_pip3 () {
	pip3_dir=""
	pip_cmd=`which pip3`
	pip3_array=($pip_cmd)
	for var in ${pip3_array[@]}
	do
		if [[ $var == *pip3* ]] && [[ $var == *bin* ]]
		then
			pip3_dir=$var
			break
		fi
	done
	echo "$pip3_dir"
}

python3_path=$( find_python3 )
if [ "$python3_path" == "" ]
then
	echo "need install python3"
	install_sys_dependence
	install_python3
	if [ $? == 0 ]
	then
		echo "install python3 success"
	else
		echo "install pyton3 fail"
		exit -1
	fi
	python3_path=$( find_python3 )
fi


pip3_path=$( find_pip3 )
if [ "$pip3_path" == "" ]
then
	echo "need install pip3"
	curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
	python3 get-pip.py
	if [ $? == 0 ]
	then
		echo "install pip3 success"
	else
		echo "install pip3 fail"
		exit -1
	fi
	pip3_path=$( find_pip3 )
fi

echo "******************"
echo $python3_path
echo $pip3_path
echo "******************"


function install_virtualenv () {
	pip_path=$1
	$pip_path install virtualenv
}

function check_python3_env () {
	py3_path=$1
	curr_dir=$PWD
	if [ ! -d "$dist_path" ]
	then
		mkdir $dist_path -p
	else
		echo "$dist_path exist"
	fi
	
	if [ ! -d "$virtual_python3" ]
	then
		cd $dist_path
		virtualenv -p $py3_path $python_name
		echo "create plugins_py3 success"
		cd $curr_dir
	else
		echo "plugins_py3 already exist"
	fi
}

install_virtualenv $pip3_path
check_python3_env $python3_path
exit

初次写bat/shell 脚本, 有很多不足之处,请各位大佬指教。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值