一堆包需要安装,一个一个安装,太麻烦了。用我这个!!!

这个bash的代码,是我在不断的重装系统、python、qt及相关库的过程中的副产品。旨在一次性将整理好的库一次安装到位,如果遇到依赖问题,因为是之前已经解决过的,则多执行几遍就可以了。

sudo /usr/bin/bash .sh文件名
#!/usr/bin/bash
#自动安装当前目录下的 Python 包(.whl或*.tar.gz)RED='\033[1;31m'  #红色加粗
GREEN='\033[1;32m'  #绿色加粗
NC='\033[0m'  #无颜色
#检查 pip3.9 是否可用
if ! command -v pip3.9 &> /dev/null; then
	echo -e "${RED}错误 pip3.9 未安装或未在 PATH 中。"
	echo -e "请先安装 Python3.9 或确保 pip3.9 在 PATH 中。"
	exit 1
fi
#检查 pipdeptree 是否可用
if pip3.9 show pipdeptree >/dev/null 2>&1; then
	echo -e "${RED}请先安装 pipdeptree 后再运行本程序。"	
	exit 1
fi
#遍历源文件夹中的所有文件 .whl 和 *.tar.gz 文件
echo -e "${GREEN}开始安装当前目录下的 Python 包..."
for file in *.whl *.tar.gz;  do
	if [  -e "$file" ]; then		
	echo -e "${RED}正在处理: $file"		
	#创建一个目录来存放提取的包信息		
	TMP_DIR=$(mktemp -d)		
	#解压文件到临时文件目录		
	PACKAGE_PATH=$file		
	if [[ "$PACKAGE_PATH" == *.tar.gz ]]; then			
	    #解压.tar.gz文件		
		echo -e "${GREEN}.tar.gz文件。"		
		tar -xzf "$PACKAGE_PATH" -C "$TMP_DIR"	
		#查找 setup.py 文件的路径			
		SETUP_PY_PATH=$(find "$TMP_DIR" -name "setup.py" -print -quit)			
		#判断是否是 Python 的安装包,Python 安装包.tar.gz内一般包含 setup.py 文件			
		if [ -z "$SETUP_PY_PATH" ]; then			
			echo -e "${RED}该安装包非 Python 安装包:" "$file"				
			rm -rf "$TMP_DIR"				
			continue		
		fi			
		#从 setup.py 文件中提取文件名	,判断包是否安装,如果没有则进行安装			
		PACKAGE_NAME=$(grep -oP "name\s*=\s*['\"]\K[^'\"]+" "$SETUP_PY_PATH")			
		if [ -z "$PACKAGE_NAME" ]; then			
			echo -e "${RED}无法提取文件名!"				
			rm -rf "$TMP_DIR"				
			continue			
		fi			
		if pip3.9 show "$PACKAGE_NAME" >/dev/null 2>&1; then			
			echo  -e"${GREEN}该安装包是" "$PACKAGE_NAME" "的安装包,且已经安装!"		
		else			
			echo -e "${GREEN}正在安装:" "$file"				sudo pip3.9 install "$file"		
		fi		
	elif [[ "$PACKAGE_PATH" == *.whl ]]; then		
		#解压.whl文件		
		echo -e "${GREEN}.whl文件。"			
		unzip -q "$PACKAGE_PATH" -d "$TMP_DIR"			#查找 setup.py 文件的路径			
		SETUP_PY_PATH=$(find "$TMP_DIR" -name "METADATA" -print -quit)			
		#判断是否是 Python 的安装包,Python 安装包.whl内一般包含 METADATA 文件			
		if [ -z "$SETUP_PY_PATH" ]; then			
			echo -e "${RED}该安装包非 Python 安装包:" "$file"				
			rm -rf "$TMP_DIR"				
			continue			
		fi			
		#从 METADATA 文件中提取文件名	,判断包是否安装,如果没有则进行安装			
		PACKAGE_NAME=$(grep -i "^Name:" "$SETUP_PY_PATH" | cut -d ' ' -f 2-)			
		if [ -z "$PACKAGE_NAME" ]; then			
			echo -e "${RED}无法提取文件名!"				
			rm -rf "$TMP_DIR"				
			continue		
		fi			
		if pip3.9 show "$PACKAGE_NAME" >/dev/null 2>&1; then		
			echo  -e"${GREEN}该安装包是" "$PACKAGE_NAME" "的安装包,且已经安装!"			
		else			
			echo -e "${GREEN}正在安装:" "$file"				sudo pip3.9 install "$file"			
		fi		
	else		
		#不支持的格式			
		echo -e "${RED}不支持的文件格式!"			
		rm -rf "$TMP_DIR"			
		exit 1		
	fi	
fi
done
#清理临时目录
echo -e "${GREEN}删除临时目录..."
rm -rf "$TMP_DIR"echo -e "${GREEN}所有包及其依赖安装完成!"

后续大家可以再补充一下对于依赖的判断,没有想好怎么弄。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值