-
Notifications
You must be signed in to change notification settings - Fork 90
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
add appveyor stuff add hdf5 req mkdir set path try conda try exe yaml escape wheel always install update escape chekc2 nose abspath s/build/install/ matplotlib wheel seaborn from whl try variable powershell if more in loop semicolon vanilla if/else for matplotlib fix path 64 amd64 python build build 64 first 64 first fix 64 version stuff fix quote remove cli add back install
- Loading branch information
Showing
8 changed files
with
469 additions
and
24 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,145 @@ | ||
environment: | ||
HDF5_LIBDIR: C:\HDF5 | ||
|
||
global: | ||
# SDK v7.0 MSVC Express 2008's SetEnv.cmd script will fail if the | ||
# /E:ON and /V:ON options are not enabled in the batch script intepreter | ||
# See: http://stackoverflow.com/a/13751649/163740 | ||
CMD_IN_ENV: "cmd /E:ON /V:ON /C .\\appveyor\\run_with_env.cmd" | ||
|
||
matrix: | ||
|
||
- PYTHON: "C:\\Python27-x64" | ||
PYTHON_VERSION: "2.7.x" # currently 2.7.9 | ||
PYTHON_ARCH: "64" | ||
|
||
|
||
# Python 2.7.10 is the latest version and is not pre-installed. | ||
- PYTHON: "C:\\Python27.10-x64" | ||
PYTHON_VERSION: "2.7.10" | ||
PYTHON_ARCH: "64" | ||
|
||
|
||
- PYTHON: "C:\\Python27.10" | ||
PYTHON_VERSION: "2.7.10" | ||
PYTHON_ARCH: "32" | ||
|
||
# Pre-installed Python versions, which Appveyor may upgrade to | ||
# a later point release. | ||
# See: http://www.appveyor.com/docs/installed-software#python | ||
- PYTHON: "C:\\Python27" | ||
PYTHON_VERSION: "2.7.x" # currently 2.7.9 | ||
PYTHON_ARCH: "32" | ||
|
||
# Major and minor releases (i.e x.0.0 and x.y.0) prior to 3.3.0 use | ||
# a different naming scheme. | ||
|
||
#- PYTHON: "C:\\Python270" | ||
# PYTHON_VERSION: "2.7.0" | ||
# PYTHON_ARCH: "32" | ||
# | ||
#- PYTHON: "C:\\Python270-x64" | ||
# PYTHON_VERSION: "2.7.0" | ||
# PYTHON_ARCH: "64" | ||
|
||
install: | ||
# If there is a newer build queued for the same PR, cancel this one. | ||
# The AppVeyor 'rollout builds' option is supposed to serve the same | ||
# purpose but it is problematic because it tends to cancel builds pushed | ||
# directly to master instead of just PR builds (or the converse). | ||
# credits: JuliaLang developers. | ||
- ps: if ($env:APPVEYOR_PULL_REQUEST_NUMBER -and $env:APPVEYOR_BUILD_NUMBER -ne ((Invoke-RestMethod ` | ||
https://ci.appveyor.com/api/projects/$env:APPVEYOR_ACCOUNT_NAME/$env:APPVEYOR_PROJECT_SLUG/history?recordsNumber=50).builds | ` | ||
Where-Object pullRequestId -eq $env:APPVEYOR_PULL_REQUEST_NUMBER)[0].buildNumber) { ` | ||
throw "There are newer queued builds for this pull request, failing early." } | ||
- ECHO "Filesystem root:" | ||
- ps: "ls \"C:/\"" | ||
|
||
- ECHO "Installed SDKs:" | ||
- ps: "ls \"C:/Program Files/Microsoft SDKs/Windows\"" | ||
|
||
# Install Python (from the official .msi of http://python.org) and pip when | ||
# not already installed. | ||
#- ps: if (-not(Test-Path($env:PYTHON))) { & appveyor\install.ps1 } | ||
- ps: "appveyor\\install.ps1" | ||
|
||
# https://github.com/aldanor/hdf5-rs/blob/master/appveyor.yml | ||
- cmd: mkdir C:\HDF5 | ||
#- cmd: mkdir C:\HDF5\lib | ||
#- ps: Invoke-WebRequest "https://github.com/kkirstein/hdf5-rs/releases/download/alpha/hdf5.dll" -OutFile "C:\HDF5\lib\hdf5.dll" | ||
#- cmd: set PATH=C:\HDF5\bin;%PATH% | ||
#- cmd: set PATH=C:\HDF5\bin;%PATH% | ||
#- ps: Invoke-WebRequest "https://github.com/kkirstein/hdf5-rs/releases/download/alpha/hdf5.dll" -OutFile "C:\HDF5\lib\hdf5.dll" | ||
|
||
# Prepend newly installed Python to the PATH of this build (this cannot be | ||
# done from inside the powershell script as it would require to restart | ||
# the parent CMD process). | ||
- "SET PATH=%PYTHON%;%PYTHON%\\Scripts;%PATH%;C:\\HDF5" | ||
|
||
# Check that we have the expected version and architecture for Python | ||
- "python --version" | ||
- "python -c \"import struct; print(struct.calcsize('P') * 8)\"" | ||
|
||
# Upgrade to the latest version of pip to avoid it displaying warnings | ||
# about it being out of date. | ||
- "pip install --disable-pip-version-check --user --upgrade pip" | ||
|
||
- "%CMD_IN_ENV% pip install wheel" | ||
- "%CMD_IN_ENV% pip install nose" | ||
|
||
# Install the build dependencies of the project. If some dependencies contain | ||
# compiled extensions and are not provided as pre-built wheel packages, | ||
# pip will build them from source using the MSVC compiler matching the | ||
# target Python version and architecture | ||
# | ||
- ps: if ($env:PYTHON_ARCH -eq "32") { ` | ||
Invoke-WebRequest "http://www.lfd.uci.edu/~gohlke/pythonlibs/djcobkfp/h5py-2.5.0-cp27-none-win32.whl" -OutFile "C:\HDF5\h5py-2.5.0-cp27-none-win32.whl"; | ||
pip install C:\HDF5\h5py-2.5.0-cp27-none-win32.whl ` | ||
} else { ` | ||
Invoke-WebRequest "http://www.lfd.uci.edu/~gohlke/pythonlibs/djcobkfp/h5py-2.5.0-cp27-none-win_amd64.whl" -OutFile "C:\HDF5\h5py-2.5.0-cp27-none-win_amd64.whl"; | ||
pip install C:\HDF5\h5py-2.5.0-cp27-none-win_amd64.whl ` | ||
} | ||
|
||
- ps: if ($env:PYTHON_ARCH -eq "32") { ` | ||
Invoke-WebRequest "http://www.lfd.uci.edu/~gohlke/pythonlibs/djcobkfp/matplotlib-1.5.1-cp27-none-win32.whl" -OutFile "C:\HDF5\matplotlib-1.5.1-cp27-none-win32.whl"; | ||
pip install C:\HDF5\matplotlib-1.5.1-cp27-none-win32.whl ` | ||
} else { ` | ||
Invoke-WebRequest "http://www.lfd.uci.edu/~gohlke/pythonlibs/djcobkfp/matplotlib-1.5.1-cp27-none-win_amd64.whl" -OutFile "C:\HDF5\matplotlib-1.5.1-cp27-none-win_amd64.whl"; | ||
pip install C:\HDF5\matplotlib-1.5.1-cp27-none-win_amd64.whl ` | ||
} | ||
|
||
#- ps: Invoke-WebRequest "https://pypi.python.org/packages/2.7/h/h5py/h5py-2.5.0.win32-py2.7.exe" -OutFile "C:\HDF5\h5py-2.5.0.win32-py2.7.exe" | ||
#- ps: Invoke-WebRequest "http://www.lfd.uci.edu/~gohlke/pythonlibs/djcobkfp/h5py-2.5.0-cp27-none-win%PYTHON_ARCH%.whl" -OutFile "C:\HDF5\h5py-2.5.0-cp27-none-win%PYTHON_ARCH%.whl" | ||
#- "%CMD_IN_ENV% C:\\HDF5\\h5py-2.5.0.win32-py2.7.exe" | ||
#- "%CMD_IN_ENV% pip install C:\\HDF5\\h5py-2.5.0-cp27-none-win.whl" | ||
#- "%CMD_IN_ENV% pip install -r requirements.txt" | ||
# | ||
#- ps: Invoke-WebRequest "http://www.lfd.uci.edu/~gohlke/pythonlibs/djcobkfp/matplotlib-1.5.1-cp27-none-win32.whl" -OutFile "C:\HDF5\matplotlib-1.5.1-cp27-none-win32.whl" | ||
#- "%CMD_IN_ENV% C:\\HDF5\\h5py-2.5.0.win32-py2.7.exe" | ||
#- "%CMD_IN_ENV% pip install C:\\HDF5\\matplotlib-1.5.1-cp27-none-win32.whl" | ||
|
||
|
||
- ps: Invoke-WebRequest "http://www.lfd.uci.edu/~gohlke/pythonlibs/djcobkfp/seaborn-0.7.0-py2.py3-none-any.whl" -OutFile "C:\HDF5\seaborn-0.7.0-py2.py3-none-any.whl" | ||
#- "%CMD_IN_ENV% C:\\HDF5\\h5py-2.5.0.win32-py2.7.exe" | ||
- ps: pip install C:\\HDF5\\seaborn-0.7.0-py2.py3-none-any.whl | ||
|
||
|
||
build_script: | ||
# Build the compiled extension | ||
- "%CMD_IN_ENV% python setup.py build" | ||
- "%CMD_IN_ENV% python setup.py install" | ||
|
||
test_script: | ||
# Run the project tests | ||
- "%CMD_IN_ENV% python setup.py nosetests" | ||
|
||
after_test: | ||
# If tests are successful, create binary packages for the project. | ||
- "%CMD_IN_ENV% python setup.py bdist_wheel" | ||
- "%CMD_IN_ENV% python setup.py bdist_wininst" | ||
- "%CMD_IN_ENV% python setup.py bdist_msi" | ||
- ps: "ls dist" | ||
|
||
artifacts: | ||
# Archive the generated packages in the ci.appveyor.com build report. | ||
- path: dist\* |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,229 @@ | ||
# Sample script to install Python and pip under Windows | ||
# Authors: Olivier Grisel, Jonathan Helmus, Kyle Kastner, and Alex Willmer | ||
# License: CC0 1.0 Universal: http://creativecommons.org/publicdomain/zero/1.0/ | ||
|
||
$MINICONDA_URL = "http://repo.continuum.io/miniconda/" | ||
$BASE_URL = "https://www.python.org/ftp/python/" | ||
$GET_PIP_URL = "https://bootstrap.pypa.io/get-pip.py" | ||
$GET_PIP_PATH = "C:\get-pip.py" | ||
|
||
$PYTHON_PRERELEASE_REGEX = @" | ||
(?x) | ||
(?<major>\d+) | ||
\. | ||
(?<minor>\d+) | ||
\. | ||
(?<micro>\d+) | ||
(?<prerelease>[a-z]{1,2}\d+) | ||
"@ | ||
|
||
|
||
function Download ($filename, $url) { | ||
$webclient = New-Object System.Net.WebClient | ||
|
||
$basedir = $pwd.Path + "\" | ||
$filepath = $basedir + $filename | ||
if (Test-Path $filename) { | ||
Write-Host "Reusing" $filepath | ||
return $filepath | ||
} | ||
|
||
# Download and retry up to 3 times in case of network transient errors. | ||
Write-Host "Downloading" $filename "from" $url | ||
$retry_attempts = 2 | ||
for ($i = 0; $i -lt $retry_attempts; $i++) { | ||
try { | ||
$webclient.DownloadFile($url, $filepath) | ||
break | ||
} | ||
Catch [Exception]{ | ||
Start-Sleep 1 | ||
} | ||
} | ||
if (Test-Path $filepath) { | ||
Write-Host "File saved at" $filepath | ||
} else { | ||
# Retry once to get the error message if any at the last try | ||
$webclient.DownloadFile($url, $filepath) | ||
} | ||
return $filepath | ||
} | ||
|
||
|
||
function ParsePythonVersion ($python_version) { | ||
if ($python_version -match $PYTHON_PRERELEASE_REGEX) { | ||
return ([int]$matches.major, [int]$matches.minor, [int]$matches.micro, | ||
$matches.prerelease) | ||
} | ||
$version_obj = [version]$python_version | ||
return ($version_obj.major, $version_obj.minor, $version_obj.build, "") | ||
} | ||
|
||
|
||
function DownloadPython ($python_version, $platform_suffix) { | ||
$major, $minor, $micro, $prerelease = ParsePythonVersion $python_version | ||
|
||
if (($major -le 2 -and $micro -eq 0) ` | ||
-or ($major -eq 3 -and $minor -le 2 -and $micro -eq 0) ` | ||
) { | ||
$dir = "$major.$minor" | ||
$python_version = "$major.$minor$prerelease" | ||
} else { | ||
$dir = "$major.$minor.$micro" | ||
} | ||
|
||
if ($prerelease) { | ||
if (($major -le 2) ` | ||
-or ($major -eq 3 -and $minor -eq 1) ` | ||
-or ($major -eq 3 -and $minor -eq 2) ` | ||
-or ($major -eq 3 -and $minor -eq 3) ` | ||
) { | ||
$dir = "$dir/prev" | ||
} | ||
} | ||
|
||
if (($major -le 2) -or ($major -le 3 -and $minor -le 4)) { | ||
$ext = "msi" | ||
if ($platform_suffix) { | ||
$platform_suffix = ".$platform_suffix" | ||
} | ||
} else { | ||
$ext = "exe" | ||
if ($platform_suffix) { | ||
$platform_suffix = "-$platform_suffix" | ||
} | ||
} | ||
|
||
$filename = "python-$python_version$platform_suffix.$ext" | ||
$url = "$BASE_URL$dir/$filename" | ||
$filepath = Download $filename $url | ||
return $filepath | ||
} | ||
|
||
|
||
function InstallPython ($python_version, $architecture, $python_home) { | ||
Write-Host "Installing Python" $python_version "for" $architecture "bit architecture to" $python_home | ||
if (Test-Path $python_home) { | ||
Write-Host $python_home "already exists, skipping." | ||
return $false | ||
} | ||
if ($architecture -eq "32") { | ||
$platform_suffix = "" | ||
} else { | ||
$platform_suffix = "amd64" | ||
} | ||
$installer_path = DownloadPython $python_version $platform_suffix | ||
$installer_ext = [System.IO.Path]::GetExtension($installer_path) | ||
Write-Host "Installing $installer_path to $python_home" | ||
$install_log = $python_home + ".log" | ||
if ($installer_ext -eq '.msi') { | ||
InstallPythonMSI $installer_path $python_home $install_log | ||
} else { | ||
InstallPythonEXE $installer_path $python_home $install_log | ||
} | ||
if (Test-Path $python_home) { | ||
Write-Host "Python $python_version ($architecture) installation complete" | ||
} else { | ||
Write-Host "Failed to install Python in $python_home" | ||
Get-Content -Path $install_log | ||
Exit 1 | ||
} | ||
} | ||
|
||
|
||
function InstallPythonEXE ($exepath, $python_home, $install_log) { | ||
$install_args = "/quiet InstallAllUsers=1 TargetDir=$python_home" | ||
RunCommand $exepath $install_args | ||
} | ||
|
||
|
||
function InstallPythonMSI ($msipath, $python_home, $install_log) { | ||
$install_args = "/qn /log $install_log /i $msipath TARGETDIR=$python_home" | ||
$uninstall_args = "/qn /x $msipath" | ||
RunCommand "msiexec.exe" $install_args | ||
if (-not(Test-Path $python_home)) { | ||
Write-Host "Python seems to be installed else-where, reinstalling." | ||
RunCommand "msiexec.exe" $uninstall_args | ||
RunCommand "msiexec.exe" $install_args | ||
} | ||
} | ||
|
||
function RunCommand ($command, $command_args) { | ||
Write-Host $command $command_args | ||
Start-Process -FilePath $command -ArgumentList $command_args -Wait -Passthru | ||
} | ||
|
||
|
||
function InstallPip ($python_home) { | ||
$pip_path = $python_home + "\Scripts\pip.exe" | ||
$python_path = $python_home + "\python.exe" | ||
if (-not(Test-Path $pip_path)) { | ||
Write-Host "Installing pip..." | ||
$webclient = New-Object System.Net.WebClient | ||
$webclient.DownloadFile($GET_PIP_URL, $GET_PIP_PATH) | ||
Write-Host "Executing:" $python_path $GET_PIP_PATH | ||
& $python_path $GET_PIP_PATH | ||
} else { | ||
Write-Host "pip already installed." | ||
} | ||
} | ||
|
||
|
||
function DownloadMiniconda ($python_version, $platform_suffix) { | ||
if ($python_version -eq "3.4") { | ||
$filename = "Miniconda3-3.5.5-Windows-" + $platform_suffix + ".exe" | ||
} else { | ||
$filename = "Miniconda-3.5.5-Windows-" + $platform_suffix + ".exe" | ||
} | ||
$url = $MINICONDA_URL + $filename | ||
$filepath = Download $filename $url | ||
return $filepath | ||
} | ||
|
||
|
||
function InstallMiniconda ($python_version, $architecture, $python_home) { | ||
Write-Host "Installing Python" $python_version "for" $architecture "bit architecture to" $python_home | ||
if (Test-Path $python_home) { | ||
Write-Host $python_home "already exists, skipping." | ||
return $false | ||
} | ||
if ($architecture -eq "32") { | ||
$platform_suffix = "x86" | ||
} else { | ||
$platform_suffix = "x86_64" | ||
} | ||
$filepath = DownloadMiniconda $python_version $platform_suffix | ||
Write-Host "Installing" $filepath "to" $python_home | ||
$install_log = $python_home + ".log" | ||
$args = "/S /D=$python_home" | ||
Write-Host $filepath $args | ||
Start-Process -FilePath $filepath -ArgumentList $args -Wait -Passthru | ||
if (Test-Path $python_home) { | ||
Write-Host "Python $python_version ($architecture) installation complete" | ||
} else { | ||
Write-Host "Failed to install Python in $python_home" | ||
Get-Content -Path $install_log | ||
Exit 1 | ||
} | ||
} | ||
|
||
|
||
function InstallMinicondaPip ($python_home) { | ||
$pip_path = $python_home + "\Scripts\pip.exe" | ||
$conda_path = $python_home + "\Scripts\conda.exe" | ||
if (-not(Test-Path $pip_path)) { | ||
Write-Host "Installing pip..." | ||
$args = "install --yes pip" | ||
Write-Host $conda_path $args | ||
Start-Process -FilePath "$conda_path" -ArgumentList $args -Wait -Passthru | ||
} else { | ||
Write-Host "pip already installed." | ||
} | ||
} | ||
|
||
function main () { | ||
InstallPython $env:PYTHON_VERSION $env:PYTHON_ARCH $env:PYTHON | ||
InstallPip $env:PYTHON | ||
} | ||
|
||
main |
Oops, something went wrong.