Lorsque j'utilise la commande python setup.py test, toute la documentation J'ai vu que setuptools gérera l'installation des dépendances de test. Où les installe-t-il et sont-ils supprimés de la machine après l'exécution de la suite de tests ? J'ai remarqué qu'aucun des modules de test n'est réellement installé dans mon environnement virtuel une fois cette commande terminée.

Je comprends qu'il prend tous les modules de la liste tests_require et les installe quelque part, mais je ne sais pas où, ce qu'il en fait par la suite et pourquoi il le fait. De plus, existe-t-il un moyen de passer des arguments à la commande sans utiliser d'indicateurs, comme avec un fichier de configuration ou quelque chose du genre ?

2
Johnny Metz 7 mars 2019 à 06:07

2 réponses

Meilleure réponse

Il les installe dans un sous-répertoire créé automatiquement de la base de code nommé .eggs comme .eggs. C'est parce que les .egg sont conçus pour être importables depuis n'importe quel endroit.

Cela ne fonctionnera donc probablement pas dans un environnement moderne car les packages ne sont pas distribués en tant que .eggs (ce qui a perdu la concurrence des .whls) donc setuptools devra les construire à partir des sources (avec bdist_egg). Ce qui est susceptible d'échouer pour de nombreux packages binaires largement utilisés avec des exigences de construction non triviales (sans parler du temps nécessaire et du fait que les packages ne sont pas non plus testés en tant que .eggs, et peuvent échouer lorsqu'ils sont emballés de cette manière).


Au lieu de cela, lister les exigences de construction dans requirements.txt et appeler pip install -r requirements.txt avant la construction semble être devenu une pratique répandue. Cependant, cela ne rend pas setup.py automatiquement constructible à partir de la source par pip.

J'ai essayé de les installer moi-même à partir de setup.py mais cela s'est avéré fragile (par exemple si l'utilisateur n'a pas d'accès en écriture à site-packages).

La meilleure solution adoptée par au moins un certain nombre de projets de grande envergure semble être de simplement faire échouer setup.py s'ils ne sont pas présents. Ceci est particulièrement utile si les exigences ne sont pas Python mais les bibliothèques C car setup.py ne sait pas comment les installer dans l'environnement spécifique de toute façon. Comme vous pouvez le voir, cela complète naturellement requirements.txt.

1
ivan_pozdeev 7 mars 2019 à 04:04

Évitez python setup.py test et tests_require, c'est une vieille bêtise d'une "fonctionnalité".

Cela télécharge simplement les deps de test dans le répertoire d'installation du projet, ce qui est rarement ce que le développeur voulait ou s'attendait à ce qu'il se produise ! Cela ne fonctionne pas bien dans un flux de travail CI moderne avec des environnements virtuels, où vous voudriez que vos dépendances soient installées sur des packages de site.

La méthode recommandée pour le faire à l'aide des outils de configuration de nos jours est d'utiliser un extras_require balise.. Voir ici pour un exemple.

2
wim 7 mars 2019 à 03:12