本文目录导读:

Python 脚本检查安装包
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import importlib
import subprocess
import sys
def check_and_install_packages(packages):
"""
检查并安装Python包
"""
missing_packages = []
for package in packages:
try:
# 尝试导入包
importlib.import_module(package.replace('-', '_'))
print(f"✅ {package} 已安装")
except ImportError:
missing_packages.append(package)
print(f"❌ {package} 未安装")
if missing_packages:
print(f"\n正在安装缺失的包: {', '.join(missing_packages)}")
for package in missing_packages:
try:
subprocess.check_call([sys.executable, "-m", "pip", "install", package])
print(f"✅ {package} 安装成功")
except subprocess.CalledProcessError:
print(f"❌ {package} 安装失败")
else:
print("\n所有依赖都已安装!")
# 使用示例
required_packages = ["requests", "numpy", "pandas", "flask"]
check_and_install_packages(required_packages)
Bash 脚本 - Linux 系统依赖检查
#!/bin/bash
# 系统依赖检查脚本
# 适用于 Debian/Ubuntu 系统
check_and_install() {
local package=$1
local install_command=$2
if command -v $package &> /dev/null; then
echo "✅ $package 已安装"
else
echo "❌ $package 未安装,正在安装..."
eval $install_command
if [ $? -eq 0 ]; then
echo "✅ $package 安装成功"
else
echo "❌ $package 安装失败"
exit 1
fi
fi
}
# 定义需要检查的软件和安装命令
echo "开始检查系统依赖..."
# 检查 curl
check_and_install "curl" "sudo apt-get install -y curl"
# 检查 git
check_and_install "git" "sudo apt-get install -y git"
# 检查 nodejs
check_and_install "node" "curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - && sudo apt-get install -y nodejs"
# 检查 docker
check_and_install "docker" "sudo apt-get install -y docker.io"
# 检查 nginx
check_and_install "nginx" "sudo apt-get install -y nginx"
echo "所有依赖检查完成!"
跨平台 Node.js 脚本
#!/usr/bin/env node
const { execSync } = require('child_process');
const fs = require('fs');
const path = require('path');
class DependencyChecker {
constructor() {
this.os = process.platform;
}
checkCommand(command) {
try {
execSync(`which ${command} || where ${command}`, { stdio: 'pipe' });
return true;
} catch (error) {
return false;
}
}
installPackage(package) {
console.log(`正在安装 ${package}...`);
let installCommand;
if (this.os === 'linux') {
const distro = this.getLinuxDistro();
installCommand = this.getLinuxInstallCommand(distro, package);
} else if (this.os === 'darwin') {
installCommand = `brew install ${package}`;
} else if (this.os === 'win32') {
installCommand = `choco install ${package} -y`;
} else {
console.log(`不支持的操作系统: ${this.os}`);
return false;
}
try {
execSync(installCommand, { stdio: 'inherit' });
console.log(`✅ ${package} 安装成功`);
return true;
} catch (error) {
console.log(`❌ ${package} 安装失败`);
return false;
}
}
getLinuxDistro() {
try {
const content = execSync('cat /etc/os-release').toString();
if (content.includes('Ubuntu') || content.includes('Debian')) return 'debian';
if (content.includes('CentOS') || content.includes('RHEL')) return 'rhel';
if (content.includes('Fedora')) return 'fedora';
if (content.includes('Arch')) return 'arch';
return 'unknown';
} catch (error) {
return 'unknown';
}
}
getLinuxInstallCommand(distro, package) {
const commands = {
'debian': `sudo apt-get update && sudo apt-get install -y ${package}`,
'rhel': `sudo yum install -y ${package}`,
'fedora': `sudo dnf install -y ${package}`,
'arch': `sudo pacman -S ${package} --noconfirm`
};
return commands[distro] || `sudo apt-get install -y ${package}`;
}
checkAndInstall(dependencies) {
console.log('开始检查依赖...\n');
dependencies.forEach(dep => {
if (this.checkCommand(dep)) {
console.log(`✅ ${dep} 已安装`);
} else {
console.log(`❌ ${dep} 未安装`);
this.installPackage(dep);
}
});
console.log('\n依赖检查完成!');
}
}
// 使用示例
const checker = new DependencyChecker();
const requiredDeps = ['git', 'node', 'npm', 'python3'];
checker.checkAndInstall(requiredDeps);
完整的 Python 依赖管理脚本
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import importlib
import subprocess
import sys
import os
from typing import List, Dict, Optional
class DependencyManager:
"""依赖管理类"""
def __init__(self):
self.pip = [sys.executable, "-m", "pip"]
def read_requirements(self, filepath: str = "requirements.txt") -> List[str]:
"""读取 requirements.txt 文件"""
if not os.path.exists(filepath):
print(f"文件 {filepath} 不存在")
return []
with open(filepath, 'r', encoding='utf-8') as f:
return [line.strip() for line in f if line.strip() and not line.startswith('#')]
def check_package(self, package: str) -> bool:
"""检查单个包是否安装"""
try:
# 处理带版本的包名,如 requests==2.28.0
package_name = package.split('==')[0].split('>=')[0].split('<=')[0]
# 将横线转换为下划线
package_name = package_name.replace('-', '_')
importlib.import_module(package_name)
return True
except ImportError:
return False
def install_package(self, package: str) -> bool:
"""安装单个包"""
try:
subprocess.check_call(self.pip + ["install", package])
return True
except subprocess.CalledProcessError:
return False
def check_and_install(self, packages: List[str], auto_install: bool = True) -> Dict[str, str]:
"""
检查并安装依赖
返回: {package: status}
status: 'installed', 'installed_now', 'failed'
"""
result = {}
missing = []
print("检查依赖中...\n")
for package in packages:
if self.check_package(package):
result[package] = 'installed'
print(f"✅ {package} 已安装")
else:
result[package] = 'pending'
missing.append(package)
print(f"❌ {package} 未安装")
if missing and auto_install:
print(f"\n发现 {len(missing)} 个缺失的依赖,正在自动安装...\n")
for package in missing:
print(f"正在安装 {package}...")
if self.install_package(package):
result[package] = 'installed_now'
print(f"✅ {package} 安装成功")
else:
result[package] = 'failed'
print(f"❌ {package} 安装失败")
return result
def update_all_packages(self) -> bool:
"""更新所有已安装的包"""
try:
subprocess.check_call(self.pip + ["list", "--outdated", "--format=columns"])
response = input("\n是否更新所有过时的包?(y/n): ")
if response.lower() == 'y':
# 获取需要更新的包列表
outdated = subprocess.check_output(
self.pip + ["list", "--outdated", "--format=freeze"]
).decode().strip().split('\n')
for pkg in outdated:
pkg_name = pkg.split('==')[0]
print(f"正在更新 {pkg_name}...")
self.install_package(f"{pkg_name} --upgrade")
print("所有包更新完成!")
return True
except Exception as e:
print(f"更新失败: {e}")
return False
# 使用示例
def main():
manager = DependencyManager()
# 方式1:从 requirements.txt 文件读取
packages = manager.read_requirements()
if packages:
print("从 requirements.txt 读取依赖:")
for pkg in packages:
print(f" - {pkg}")
print()
else:
# 方式2:手动指定依赖
packages = [
"requests",
"flask",
"numpy",
"pandas",
"matplotlib"
]
# 检查并安装
results = manager.check_and_install(packages, auto_install=True)
# 统计结果
installed = sum(1 for v in results.values() if v in ['installed', 'installed_now'])
failed = sum(1 for v in results.values() if v == 'failed')
print(f"\n安装统计:")
print(f"✅ 成功: {installed}")
print(f"❌ 失败: {failed}")
print(f"📊 总计: {len(results)}")
if __name__ == "__main__":
main()
使用建议
-
选择适合的脚本:
- Python 项目:使用 Python 脚本
- 系统工具:使用 Bash 脚本
- 跨平台需求:使用 Node.js 脚本
-
安全考虑:
- 始终验证来源
- 使用
sudo时要谨慎 - 添加错误处理
-
最佳实践:
- 维护
requirements.txt或package.json - 使用虚拟环境
- 定期更新依赖
- 添加日志记录
- 维护
需要我帮你定制特定场景的依赖检查脚本吗?
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播