140 lines
4.8 KiB
PowerShell
140 lines
4.8 KiB
PowerShell
#!/usr/bin/env powershell
|
|
# EG Windows 构建环境检查脚本
|
|
|
|
Write-Host "========================================" -ForegroundColor Cyan
|
|
Write-Host " EG 构建环境检查" -ForegroundColor Cyan
|
|
Write-Host "========================================" -ForegroundColor Cyan
|
|
|
|
$Issues = @()
|
|
$Warnings = @()
|
|
|
|
# 检查 Python
|
|
Write-Host "`n[1/6] 检查 Python..." -ForegroundColor Yellow
|
|
try {
|
|
$PythonVersion = python --version 2>&1
|
|
if ($PythonVersion -match "Python (\d+)\.(\d+)") {
|
|
$Major = [int]$Matches[1]
|
|
$Minor = [int]$Matches[2]
|
|
if ($Major -ge 3 -and $Minor -ge 8) {
|
|
Write-Host " ✓ $PythonVersion (符合要求)" -ForegroundColor Green
|
|
} else {
|
|
Write-Host " ⚠ $PythonVersion (建议 3.8+)" -ForegroundColor Yellow
|
|
$Warnings += "Python 版本较旧"
|
|
}
|
|
}
|
|
} catch {
|
|
Write-Host " ✗ Python 未找到" -ForegroundColor Red
|
|
$Issues += "需要安装 Python 3.8+"
|
|
}
|
|
|
|
# 检查 pip
|
|
Write-Host "`n[2/6] 检查 pip..." -ForegroundColor Yellow
|
|
try {
|
|
$PipVersion = pip --version 2>&1
|
|
Write-Host " ✓ $PipVersion" -ForegroundColor Green
|
|
} catch {
|
|
Write-Host " ✗ pip 未找到" -ForegroundColor Red
|
|
$Issues += "需要安装 pip"
|
|
}
|
|
|
|
# 检查 PowerShell 执行策略
|
|
Write-Host "`n[3/6] 检查 PowerShell 执行策略..." -ForegroundColor Yellow
|
|
$Policy = Get-ExecutionPolicy
|
|
if ($Policy -eq "Restricted") {
|
|
Write-Host " ✗ 当前策略: $Policy (需要修改)" -ForegroundColor Red
|
|
$Issues += "执行策略需要设置为 RemoteSigned: Set-ExecutionPolicy RemoteSigned -Scope CurrentUser"
|
|
} else {
|
|
Write-Host " ✓ 当前策略: $Policy" -ForegroundColor Green
|
|
}
|
|
|
|
# 检查必要模块
|
|
Write-Host "`n[4/6] 检查 Python 模块..." -ForegroundColor Yellow
|
|
$Modules = @("nuitka", "pyinstaller")
|
|
foreach ($mod in $Modules) {
|
|
$result = pip show $mod 2>$null
|
|
if ($result) {
|
|
$version = ($result | Select-String "Version:").ToString().Split(":")[1].Trim()
|
|
Write-Host " ✓ $mod $version" -ForegroundColor Green
|
|
} else {
|
|
Write-Host " ⚠ $mod 未安装 (将自动安装)" -ForegroundColor Yellow
|
|
}
|
|
}
|
|
|
|
# 检查项目依赖
|
|
Write-Host "`n[5/6] 检查项目依赖..." -ForegroundColor Yellow
|
|
$ReqFile = "$PSScriptRoot\..\requirements\requirements.txt"
|
|
if (Test-Path $ReqFile) {
|
|
Write-Host " ✓ 找到 requirements.txt" -ForegroundColor Green
|
|
|
|
# 检查几个关键包
|
|
$KeyPackages = @("Panda3D", "PyQt5", "openvr", "imgui-bundle")
|
|
foreach ($pkg in $KeyPackages) {
|
|
$result = pip show $pkg 2>$null
|
|
if ($result) {
|
|
Write-Host " ✓ $pkg" -ForegroundColor Green
|
|
} else {
|
|
Write-Host " ⚠ $pkg 未安装" -ForegroundColor Yellow
|
|
}
|
|
}
|
|
} else {
|
|
Write-Host " ✗ 未找到 requirements.txt" -ForegroundColor Red
|
|
$Warnings += "未找到依赖文件"
|
|
}
|
|
|
|
# 检查 Inno Setup
|
|
Write-Host "`n[6/6] 检查 Inno Setup..." -ForegroundColor Yellow
|
|
$ISCCPaths = @(
|
|
"C:\Program Files (x86)\Inno Setup 6\ISCC.exe",
|
|
"C:\Program Files\Inno Setup 6\ISCC.exe"
|
|
)
|
|
$Found = $false
|
|
foreach ($path in $ISCCPaths) {
|
|
if (Test-Path $path) {
|
|
Write-Host " ✓ 找到: $path" -ForegroundColor Green
|
|
$Found = $true
|
|
break
|
|
}
|
|
}
|
|
if (!$Found) {
|
|
Write-Host " ⚠ Inno Setup 未找到 (可选,用于创建安装程序)" -ForegroundColor Yellow
|
|
Write-Host " 下载: https://jrsoftware.org/isdl.php" -ForegroundColor Gray
|
|
$Warnings += "Inno Setup 未安装 (可选)"
|
|
}
|
|
|
|
# 检查编译器
|
|
Write-Host "`n[7/6] 检查 C++ 编译器..." -ForegroundColor Yellow
|
|
$CL = Get-Command cl -ErrorAction SilentlyContinue
|
|
$GCC = Get-Command gcc -ErrorAction SilentlyContinue
|
|
|
|
if ($CL) {
|
|
Write-Host " ✓ 找到 MSVC (cl)" -ForegroundColor Green
|
|
} elseif ($GCC) {
|
|
Write-Host " ✓ 找到 GCC" -ForegroundColor Green
|
|
} else {
|
|
Write-Host " ⚠ 未找到 C++ 编译器" -ForegroundColor Yellow
|
|
Write-Host " Nuitka 将尝试自动安装 MinGW64 或使用已安装的 Visual Studio" -ForegroundColor Gray
|
|
$Warnings += "未找到 C++ 编译器 (Nuitka 会尝试自动解决)"
|
|
}
|
|
|
|
# 总结
|
|
Write-Host "`n========================================" -ForegroundColor Cyan
|
|
if ($Issues.Count -eq 0 -and $Warnings.Count -eq 0) {
|
|
Write-Host " ✓ 环境检查通过!" -ForegroundColor Green
|
|
Write-Host " 可以开始构建" -ForegroundColor Green
|
|
exit 0
|
|
} else {
|
|
if ($Issues.Count -gt 0) {
|
|
Write-Host " 发现问题 ($($Issues.Count)):" -ForegroundColor Red
|
|
foreach ($issue in $Issues) {
|
|
Write-Host " - $issue" -ForegroundColor Red
|
|
}
|
|
}
|
|
if ($Warnings.Count -gt 0) {
|
|
Write-Host " 警告 ($($Warnings.Count)):" -ForegroundColor Yellow
|
|
foreach ($warn in $Warnings) {
|
|
Write-Host " - $warn" -ForegroundColor Yellow
|
|
}
|
|
}
|
|
exit 1
|
|
}
|