How to continuously test your Python code on Windows using AppVeyor
In the previous post I illustrated how to setup continuous integration testing of your Python code using Travis CI. Travis CI is great when working on Linux. However, what can you do if you wanted to setup automated continuous integration testing on Windows?
To me, a Linux enthusiast, this problem sounded almost insurmountable…
AppVeyor to the rescue
However, it turns out that AppVeyor has provided a service for solving this problem.
One simply needs to create an appveyor.yml
file to configure the running of
the test suite. The code below creates a testing matrix for running the test
suite on 32-bit Python 2.7, 3.3 and 3.4 using the nosetests
test runner.
build: false
environment:
matrix:
- PYTHON: "C:\\Python27"
PYTHON_VERSION: "2.7.8"
PYTHON_ARCH: "32"
- PYTHON: "C:\\Python33"
PYTHON_VERSION: "3.3.5"
PYTHON_ARCH: "32"
- PYTHON: "C:\\Python34"
PYTHON_VERSION: "3.4.1"
PYTHON_ARCH: "32"
init:
- "ECHO %PYTHON% %PYTHON_VERSION% %PYTHON_ARCH%"
install:
- "%PYTHON%/Scripts/pip.exe install nose"
- "%PYTHON%/Scripts/pip.exe install coverage"
test_script:
- "%PYTHON%/Scripts/nosetests"
Note that we use pip
to install the nose
and coverage
packages
before we run the test suite.
Commit and push this file and login to AppVeyor using your GitHub account. Sync your GitHub repositories and then select the project you want AppVeyor to run continuous integration testing on.
Job done!
Using Minconda to test projects that depend on the numpy
/scipy
stack
Again testing projects that depend on numpy
and scipy
present problems
in that these packages take too long to build from scratch. However, just like
in the
previous post
we can make use of Miniconda.
In fact the kind people at AppVeyor have already deployed Minicoda to their build workers (github.com/appveyor/ci/issues/359).
So to test a project that depends on numpy
and scipy
one can simply
use the appveyor.yml
file below.
build: false
environment:
matrix:
- PYTHON_VERSION: 2.7
MINICONDA: C:\Miniconda
- PYTHON_VERSION: 3.4
MINICONDA: C:\Miniconda3
init:
- "ECHO %PYTHON_VERSION% %MINICONDA%"
install:
- "set PATH=%MINICONDA%;%MINICONDA%\\Scripts;%PATH%"
- conda config --set always_yes yes --set changeps1 no
- conda update -q conda
- conda info -a
- "conda create -q -n test-environment python=%PYTHON_VERSION% numpy scipy nose"
- activate test-environment
- pip install coverage
test_script:
- nosetests
The script above installs numpy
, scipy
and nose
using the
Conda package manager. However, the Conda package manager does not contain
the coverage
package. We therefore install that using pip
instead after
the virtual environment has been activated.
The fact that Miniconda is included in the AppVeyor makes it trivial to test Python code with scientific dependencies.
Great stuff!
See also
- Oliver Grisel and Kyle Kaster’s tutorial Building Binary Wheels for Windows using Appveyor
- Robert T. McGibbon’s Python Appveyor Conda example