本文目录导读:

Python项目 (pip)
基础版本
#!/usr/bin/env python3
import subprocess
import sys
def install_missing_dependencies():
"""检查并安装缺失的Python包"""
# 需要的依赖列表
requirements = [
'requests',
'numpy',
'pandas',
'flask'
]
for package in requirements:
try:
__import__(package.replace('-', '_'))
print(f"✓ {package} 已安装")
except ImportError:
print(f"✗ {package} 未安装,正在安装...")
subprocess.check_call(
[sys.executable, '-m', 'pip', 'install', package]
)
print(f"✓ {package} 安装完成")
if __name__ == '__main__':
install_missing_dependencies()
进阶版本(从requirements.txt读取)
#!/usr/bin/env python3
import subprocess
import sys
import os
def install_from_requirements():
"""从requirements.txt安装依赖"""
req_file = 'requirements.txt'
if not os.path.exists(req_file):
print(f"错误:找不到 {req_file}")
return False
try:
import pip
print("正在检查并安装依赖...")
# 使用pip自动处理
subprocess.check_call([
sys.executable, '-m', 'pip', 'install',
'-r', req_file
])
print("所有依赖安装完成!")
return True
except subprocess.CalledProcessError as e:
print(f"安装出错: {e}")
return False
if __name__ == '__main__':
install_from_requirements()
Node.js项目 (npm)
#!/usr/bin/env node
const { execSync } = require('child_process');
const fs = require('fs');
const path = require('path');
function checkAndInstallDependencies() {
console.log('正在检查项目依赖...');
// 读取package.json
const packageJsonPath = path.join(process.cwd(), 'package.json');
if (!fs.existsSync(packageJsonPath)) {
console.error('错误:找不到package.json');
process.exit(1);
}
const packageJson = require(packageJsonPath);
const allDeps = {
...packageJson.dependencies,
...packageJson.devDependencies
};
let missingDeps = [];
// 检查每个依赖
for (const dep of Object.keys(allDeps)) {
try {
require.resolve(dep);
console.log(`✓ ${dep} 已安装`);
} catch (e) {
console.log(`✗ ${dep} 未安装`);
missingDeps.push(dep);
}
}
// 安装缺失的依赖
if (missingDeps.length > 0) {
console.log('\n正在安装缺失的依赖...');
try {
execSync(`npm install ${missingDeps.join(' ')}`, {
stdio: 'inherit'
});
console.log('所有依赖安装完成!');
} catch (error) {
console.error('安装失败:', error.message);
process.exit(1);
}
} else {
console.log('所有依赖已安装!');
}
}
checkAndInstallDependencies();
通用Shell脚本
Linux/Mac版本
#!/bin/bash
# 自动安装缺失依赖脚本
# 支持多种包管理器
echo "检查系统依赖..."
# 定义需要的命令列表
REQUIRED_CMDS=("git" "curl" "wget" "python3" "node")
# 检测包管理器
if command -v apt-get &> /dev/null; then
PKG_MANAGER="apt-get"
INSTALL_CMD="sudo apt-get install -y"
elif command -v yum &> /dev/null; then
PKG_MANAGER="yum"
INSTALL_CMD="sudo yum install -y"
elif command -v brew &> /dev/null; then
PKG_MANAGER="brew"
INSTALL_CMD="brew install"
else
echo "无法识别的包管理器"
exit 1
fi
# 检查并安装缺失的命令
for cmd in "${REQUIRED_CMDS[@]}"; do
if ! command -v $cmd &> /dev/null; then
echo "✗ $cmd 未安装,正在安装..."
$INSTALL_CMD $cmd
else
echo "✓ $cmd 已安装"
fi
done
echo "所有依赖检查完成!"
Windows PowerShell版本
# check-dependencies.ps1
Write-Host "检查系统依赖..." -ForegroundColor Cyan
# 定义需要的命令
$requiredCommands = @("git", "node", "npm", "python")
foreach ($cmd in $requiredCommands) {
try {
$null = Get-Command $cmd -ErrorAction Stop
Write-Host "✓ $cmd 已安装" -ForegroundColor Green
} catch {
Write-Host "✗ $cmd 未安装" -ForegroundColor Red
# 使用chocolatey安装(需先安装choco)
try {
$null = Get-Command "choco" -ErrorAction Stop
Write-Host " 正在使用Chocolatey安装 $cmd..." -ForegroundColor Yellow
Start-Process "choco" -ArgumentList "install $cmd -y" -Wait -NoNewWindow
} catch {
Write-Host " 请手动安装 $cmd" -ForegroundColor Yellow
}
}
}
Write-Host "依赖检查完成!" -ForegroundColor Green
智能检测脚本(Python全能版)
#!/usr/bin/env python3
"""
智能依赖检测与安装脚本
支持多语言项目
"""
import subprocess
import sys
import json
import os
import platform
class DependencyChecker:
def __init__(self):
self.system = platform.system()
def check_python_deps(self):
"""检查Python依赖"""
req_file = 'requirements.txt'
if not os.path.exists(req_file):
return
print("\n检查Python依赖...")
try:
import pkg_resources
with open(req_file) as f:
packages = [line.strip() for line in f if line.strip() and not line.startswith('#')]
for package in packages:
try:
pkg_resources.require(package.split('>=')[0].split('==')[0])
print(f"✓ {package}")
except (pkg_resources.DistributionNotFound,
pkg_resources.VersionConflict):
print(f"✗ {package}")
subprocess.check_call([
sys.executable, '-m', 'pip', 'install', package
])
print(f" → 已安装")
except ImportError:
print("正在安装pkg_resources...")
subprocess.check_call([
sys.executable, '-m', 'pip', 'install', 'setuptools'
])
self.check_python_deps()
def check_node_deps(self):
"""检查Node.js依赖"""
if not os.path.exists('package.json'):
return
print("\n检查Node.js依赖...")
if not os.path.exists('node_modules'):
print("node_modules不存在,正在安装...")
subprocess.check_call(['npm', 'install'])
else:
subprocess.check_call(['npm', 'check', '--production'])
def run(self):
"""主运行函数"""
print("=" * 50)
print("智能依赖检查工具")
print("=" * 50)
# 检测项目类型
if os.path.exists('requirements.txt'):
self.check_python_deps()
if os.path.exists('package.json'):
self.check_node_deps()
print("\n✓ 依赖检查完成!")
if __name__ == '__main__':
checker = DependencyChecker()
checker.run()
使用建议
选择合适的脚本
- Python项目:使用Python版本的脚本
- Node.js项目:使用JavaScript版本的脚本
- 混合项目:使用智能检测脚本
安全性考虑
# 添加安全检查
def safe_install():
"""安全安装依赖"""
try:
# 验证源的安全性
trusted_sources = [
'pypi.org',
'npmjs.org',
]
# 使用虚拟环境
if not os.path.exists('venv'):
subprocess.check_call([
sys.executable, '-m', 'venv', 'venv'
])
# 在虚拟环境中安装
pip_path = os.path.join('venv', 'bin', 'pip')
subprocess.check_call([
pip_path, 'install', '-r', 'requirements.txt'
])
except Exception as e:
print(f"安全安装失败: {e}")
return False
GitHub Actions自动检查
# .github/workflows/deps.yml
name: Check Dependencies
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
check-deps:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup Python
uses: actions/setup-python@v2
with:
python-version: '3.9'
- name: Check Python deps
run: |
python -m pip install --upgrade pip
python deps_check.py
选择适合您项目的方案,建议将脚本添加到项目的scripts/或tools/目录中,并在README中说明使用方法。
版权声明: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直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播