PyConFr 2015

}

samedi 16:15:00–16:40:00

Guix-tox, une version fonctionnelle de tox.

Cyril Roelandt

Audience level:
Intermediate

Description

Tox est un outil, très utilisé dans les projets Python, qui permet de lancer des tests au sein d'environnements virtuels créés par virtualenv. Cette approche souffre de plusieurs défauts qui affectent la reproductibilité des tests. Nous verrons comment il est possible de remplacer virtualenv par Guix et donnerons quelques exemples issus du quotidien d'un développeur OpenStack.

Abstract

Tox permet de lancer les tests d'un paquet Python dans des environnements virtuels. L'utilisation de ces derniers pose plusieurs problèmes:

  • seuls les paquets disponibles sur PyPI sont gérés. Ainsi, il est parfois nécessaire d'utiliser le gestionnaire de paquets de sa distribution pour installer des fichiers d'en-tête (on pense notamment à lib*-dev sous Debian);

  • lorsque plusieurs environnements ont besoin de la même dépendance, cette dernière est installée plusieurs fois, et est dupliquée sur le disque, ce qui provoque une perte d'espace disque;

  • mauvais niveau d'abstraction : la tendance actuelle consiste à utiliser des gestionnaires de paquets spécifiques à des langages (pip, npm, cpan...) plutôt qu'un gestionnaire de paquets robuste;

  • manque de reproductibilité des tests : les environnements de tests sont loin d'être parfaitement isolés (les variables d'environnement, les fichiers présents dans /usr, le choix des locales... peuvent influencer le déroulement des tests).

GNU Guix est un gestionnaire de paquets fonctionnel (comme dans "programmation fonctionnelle") basé sur Nix. Il permet de construire des paquets dans un environnement complètement isolé utilisant les conteneurs fournis par le noyau Linux qui garantit la reproductibilité de l'opération. Nous ferons une présentation de cet outil et nous attarderons notamment sur la fonctionnalité que nous serons amenés à utiliser pour guix-tox : "guix environment", qui permet de créer un environnement isolé contenant uniquement certains paquets.

Enfin, nous verrons comment il est possible de remplacer virtualenv par Guix dans tox, afin de profiter des avantages de ce gestionnaire de paquets de façon quasi-transparente. Nous montrerons comment il est possible de l'utiliser afin de travailler sur des projets OpenStack tels que python-keystoneclient ou encore la bibliothèque Oslo.