100 lines
2.9 KiB
PowerShell
100 lines
2.9 KiB
PowerShell
$package = 'PyWin32'
|
|
$build = '219'
|
|
|
|
try {
|
|
# python.exe should be in PATH based on
|
|
#simulate the unix command for finding things in path
|
|
#http://stackoverflow.com/questions/63805/equivalent-of-nix-which-command-in-powershell
|
|
function Which([string]$cmd)
|
|
{
|
|
Get-Command -ErrorAction "SilentlyContinue" $cmd |
|
|
Select -ExpandProperty Definition
|
|
}
|
|
|
|
|
|
# Use PYTHONHOME if it exists, or fallback to 'Where' to search PATH
|
|
if ($Env:PYTHONHOME) { $localPython = Join-Path $Env:PYTHONHOME 'python.exe' }
|
|
|
|
if (!$Env:PYTHONHOME -or !(Test-Path $localPython))
|
|
{ $localPython = Which python.exe }
|
|
|
|
if (!(Test-Path $localPython))
|
|
{
|
|
Write-ChocolateyFailure 'PyWin32 requires a Python runtime to install'
|
|
return
|
|
}
|
|
|
|
$pythonRoot = Split-Path $localPython
|
|
|
|
$sitePackages = (Join-Path (Join-Path $pythonRoot 'Lib') 'site-packages')
|
|
if (!(Test-Path $sitePackages))
|
|
{
|
|
Write-ChocolateyFailure 'Could not find Python site-packages directory'
|
|
return
|
|
}
|
|
|
|
$7zip = Which 7z.exe
|
|
# guess that a bad install didn't put it in PATH
|
|
if (!$7zip)
|
|
{
|
|
$7zip = $Env:ProgramFiles, ${Env:ProgramFiles(x86)} |
|
|
% { Join-Path (Join-Path $_ '7-zip') '7z.exe' } |
|
|
? { Test-Path $_ } |
|
|
Select -First 1
|
|
}
|
|
if (!(Test-Path $7zip))
|
|
{
|
|
Write-ChocolateyFailure 'PyWin32 requires 7zip to silently install'
|
|
return
|
|
}
|
|
|
|
$pythonVersion = &$localPython --version 2>&1
|
|
|
|
$simpleVersion = $pythonVersion |
|
|
Select-String -Pattern '^.*\s+(\d\.\d)(\.\d+){0,1}$' |
|
|
% { $_.Matches.Groups[1].Value }
|
|
|
|
# http://www.jordanrinke.com/2011/06/22/pywin32-silent-install/
|
|
|
|
$destination = Join-Path $Env:Temp "pywin32-$build.$simpleVersion.exe"
|
|
$params = @{
|
|
packageName = $package;
|
|
fileFullPath = $destination;
|
|
url = "http://sourceforge.net/projects/pywin32/files/pywin32/Build%20$build/pywin32-$build.win32-py$simpleVersion.exe/download";
|
|
url64bit = "http://sourceforge.net/projects/pywin32/files/pywin32/Build%20$build/pywin32-$build.win-amd64-py$simpleVersion.exe/download";
|
|
}
|
|
|
|
# no special 64-bit for these python versions
|
|
if ('2.5', '2.4', '2.3' -contains $simpleVersion)
|
|
{
|
|
$params.url64bit = $params.url
|
|
}
|
|
|
|
Get-ChocolateyWebFile @params
|
|
|
|
$pyWin32Temp = Join-Path $Env:Temp 'pywin32-temp'
|
|
&$7zip x $destination "-o$pyWin32Temp"
|
|
|
|
'PLATLIB', 'SCRIPTS' |
|
|
% { Join-Path $pywin32Temp $_ } |
|
|
Get-ChildItem |
|
|
Move-Item -Destination $sitePackages
|
|
|
|
# some files are copied to c:\windows\system32
|
|
$installPyWin32Script = @"
|
|
Push-Location '$sitePackages'
|
|
&'$localPython' pywin32_postinstall.py `-install
|
|
Remove-Item .\pywin32_postinstall.py
|
|
"@
|
|
|
|
Start-ChocolateyProcessAsAdmin $installPyWin32Script
|
|
|
|
$pyWin32Temp, $destination |
|
|
Remove-Item -Recurse -ErrorAction SilentlyContinue
|
|
|
|
Write-ChocolateySuccess $package
|
|
} catch {
|
|
Write-ChocolateyFailure $package "$($_.Exception.Message)"
|
|
throw
|
|
}
|