145 lines
4.9 KiB
Bash
145 lines
4.9 KiB
Bash
#!/bin/bash
|
||
#快速安装项目所需python虚拟环境和requrements.txt依赖
|
||
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
|
||
export PATH
|
||
LANG=en_US.UTF-8
|
||
if [ $(whoami) != "root" ];then
|
||
echo "请使用root权限执行本启动命令!"
|
||
exit 1;
|
||
fi
|
||
# 获取当前脚本文件的目录(一定要放到项目根目录中)
|
||
PROJECT_ROOT="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
|
||
#PROJECT_ROOT=$(python3 -c "import os; print(os.path.abspath(os.path.dirname('$0')))")
|
||
echo -e "============================================"
|
||
echo -e "检查项目python虚拟环境是否存在"
|
||
echo -e "!!!若安装异常请手动删除venv虚拟环境目录!!!"
|
||
echo -e "============================================"
|
||
|
||
py_path="/usr/local/lyadmin"
|
||
|
||
Return_Error(){
|
||
echo '=================================================';
|
||
printf '\033[1;31;40m%b\033[0m\n' "$@";
|
||
exit 1;
|
||
}
|
||
|
||
# 参数:$1 - 要逐个显示的文本
|
||
# $2 - 控制字符输出速度的暂停时间(可选,默认为 0.2 秒)
|
||
Show_Text_With_Ellipsis() {
|
||
text="$1"
|
||
pause=${2:-0.1}
|
||
echo -n "$text"
|
||
sleep 1 # 显示 "这是一个例子" 1秒钟
|
||
for ((i=0; i<3; i++)); do
|
||
echo -n "."
|
||
sleep $pause
|
||
done
|
||
echo ""
|
||
}
|
||
|
||
Install_Openssl111() {
|
||
if command -v openssl >/dev/null 2>&1; then
|
||
openssl_version=$(openssl version | awk '{print $2}')
|
||
if [ "$(printf '%s\n' "1.1.1" "$openssl_version" | sort -V | head -n1)" = "1.1.1" ]; then
|
||
echo "检测到OpenSSL版本为${openssl_version},无需再安装"
|
||
return
|
||
fi
|
||
fi
|
||
opensslVersion="1.1.1o"
|
||
cd /tmp
|
||
wget http://download.bt.cn/src/openssl-${opensslVersion}.tar.gz
|
||
tar -zxf openssl-${opensslVersion}.tar.gz
|
||
rm -f openssl-${opensslVersion}.tar.gz
|
||
cd /tmp/openssl-${opensslVersion}
|
||
./config --prefix=/usr/local/openssl111 zlib-dynamic
|
||
make -j${cpuCore} -C /tmp/openssl-${opensslVersion}/
|
||
make install -C /tmp/openssl-${opensslVersion}/
|
||
echo "/usr/local/openssl111/lib" >>/etc/ld.so.conf.d/openssl111.conf
|
||
ldconfig
|
||
ldconfig /lib64
|
||
cd ..
|
||
rm -rf openssl-${opensslVersion}
|
||
}
|
||
Install_Python(){
|
||
py_version="3.12.0"
|
||
if [ -f ${py_path}/python/bin/python3 ];then
|
||
return
|
||
fi
|
||
mkdir -p ${py_path}
|
||
echo "True" > ${py_path}/disk.ly
|
||
if [ ! -w ${py_path}/disk.ly ];then
|
||
Return_Error "ERROR: Install python fielded." "ERROR: /usr/local/lyadmin目录无法写入,请检查目录/用户/磁盘权限!"
|
||
fi
|
||
cd ${py_path}
|
||
py_file="${py_path}/pythonsrc.tar.xz"
|
||
wget -O ${py_file} http://download.bt.cn/src/Python-${py_version}.tar.xz
|
||
echo "Install python ..."
|
||
tar -xJf ${py_file} > /dev/null
|
||
mv Python-${py_version} pythonsrc
|
||
if [ ${py_version:2:2} -ge 10 ]; then
|
||
if command -v openssl >/dev/null 2>&1; then
|
||
openssl_version=$(openssl version | awk '{print $2}')
|
||
if [ "$(printf '%s\n' "1.1.1" "$openssl_version" | sort -V | head -n1)" = "1.1.1" ]; then
|
||
Show_Text_With_Ellipsis "检测到OpenSSL版本为${openssl_version}正在使用此环境" 0.3
|
||
sys_openssl_path=$(which openssl)
|
||
sys_openssl_dir=$(dirname "$openssl_path")
|
||
WITH_SSL="--with-openssl=${sys_openssl_dir}"
|
||
else
|
||
Show_Text_With_Ellipsis "检测到OpenSSL版本为${openssl_version}正在安装支持Python${py_version}版本的openssl" 0.3
|
||
Install_Openssl111
|
||
WITH_SSL="--with-openssl=/usr/local/openssl111"
|
||
fi
|
||
else
|
||
Show_Text_With_Ellipsis "检测到OpenSSL未安装,正在安装支持Python${py_version}版本的openssl" 0.3
|
||
Install_Openssl111
|
||
WITH_SSL="--with-openssl=/usr/local/openssl111"
|
||
fi
|
||
cd ${py_path}/pythonsrc
|
||
./configure --prefix=${py_path}/python ${WITH_SSL}
|
||
|
||
else
|
||
cd ${py_path}/pythonsrc
|
||
./configure --prefix=${py_path}/python
|
||
fi
|
||
cd ${py_path}/pythonsrc
|
||
make
|
||
make install
|
||
if [ ! -f ${py_path}/python/bin/python3 ];then
|
||
rm -f ${py_file}
|
||
Return_Error "ERROR: Install python fielded." "ERROR: 下载python环境失败,请尝试重新安装!"
|
||
fi
|
||
${py_path}/python/bin/python3 -V
|
||
if [ $? -eq 0 ];then
|
||
rm -f ${py_file}
|
||
rm -rf ${py_path}/pythonsrc
|
||
ln -sf ${py_path}/python/bin/pip3 /usr/bin/lypip
|
||
ln -sf ${py_path}/python/bin/python3 /usr/bin/lypython
|
||
# source $py_path/python/bin/activate
|
||
return
|
||
else
|
||
rm -f ${py_file}
|
||
rm -rf ${py_path}/python
|
||
rm -rf ${py_path}/pythonsrc
|
||
fi
|
||
}
|
||
|
||
if [ -d "${PROJECT_ROOT}/venv" ]; then
|
||
echo "Python 虚拟环境已安装"
|
||
exit 1
|
||
else
|
||
echo "Python 虚拟环境未安装"
|
||
Install_Python
|
||
cd ${PROJECT_ROOT}
|
||
# 创建虚拟环境
|
||
${py_path}/python/bin/python3 -m venv ${PROJECT_ROOT}/venv
|
||
|
||
echo "Python 虚拟环境安装完成"
|
||
|
||
# 激活虚拟环境
|
||
source ${PROJECT_ROOT}/venv/bin/activate
|
||
|
||
# 安装 Django (可选)
|
||
pip install -r ${PROJECT_ROOT}/requirements_linux.txt -i https://mirrors.aliyun.com/pypi/simple/
|
||
|
||
echo "requrements.txt依赖安装完成"
|
||
fi |