In my last post I wrote about Travis CI: Travis CI overview. In this post I want to write how to use Travis CI for Python/Django project.
I started to be interested in Travis CI when I decided it’s time for some continuous integration for my recent side project - frisor (firsor repo).
Quick reminder what is frisor
Frisor is a web application in Python/Django which is just a box for interesting urls. When using untrusted network I don’t want to login anywhere to save interesting content I found. More about this is here: Introduction to frisor.
Here is Travis CI support file for my project: travis support file.
I also configured code coverage for my build:
Travis CI configuration for Python language
To define how application build should be performed,
we need to create
.travis.yml file. It has to contain three parts:
- Declaration of language or technologies used
- Install instructions - for installing necessary dependencies
- Script instructions - for building
How to declare Python language in .travis.yml?
.travis.yml you should define language you use using
Then define Python versions - default is 2.7:
Build will be performed for all declared versions. Travis CI uses virtualenv for Python environments (for each declared Python version there will be a separate one). After declaring a language, we need to write commands which should be executed when installing dependencies.
Installation part of .travis.yml
It’s recommended to install necessary dependencies by
If you want
apt-get (for example for numpy or matplotlib libraries) you need to
before_install tag, for example:
By default these libraries are preinstalled:
Default instruction for installing part will be performed when you don’t write it at all:
For some small projects it can be enough, so don’t forget to add
to your repository!
Multiple Django versions support in .travis.yml
Python projects quite often come with Django framework. If you are using only
one version of that library, it’s enough to install it by adding it
But if you want to test against multiple versions,
you can add environment variables (remember, Travis CI will create a build
matrix for all Python versions and
env variables for your project):
Then in your
install instructions you should use
DJANGO_VERSION environment variable
for installing proper version of Django, for example:
You can use the same way for managing multiple versions of other libraries too.
Script part of .travis.yml for Python
There is no default script part - build will fail if your
.travis.yml doesn’t contain it.
Usually you just want to run tests:
For project in Django it can look like this:
Code coverage in Travis CI for Python
For code coverage you will need to install necessary tools first:
Then, after successful build run code coverage tools:
It’ll print coverage results into Travis CI console:
Of course you can’t forget to use
coverage run when running your tests!
Usually it means that you should change Travis CI
script commands a bit, for me
it looks like:
It can also put information about code coverage in pull requests. More about it on coveralls.
Adding Travis CI support for Python/Django project is easy, especially
if you follow good practices for this technologies like using
virtualenv and having dependencies in some
There are plenty other useful tools which can be integrated with Travis CI like tools for code coverage, slack integrations, email notifications, etc. For side projects it is more than enough. For commercial ones I’ve never used Travis CI, but it happen I used other integrations existing on github.