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
- 用于获取管理员权限
- 从注册表修改环境变量
- 检测git-bash 、python 是否安装, 否则执行安装, 静默模式安装python, 但 git-bash 的安装不能指定静默模式
- 安装pip, virtualenv
- 创建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
- 识别系统类型
- 针对不同系统, 安装不同的python3.6 依赖 , 安装python3.6
- 安装git工具(没有的话)
- 安装 pip, virtualenv
- 创建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 脚本, 有很多不足之处,请各位大佬指教。