Message "Pas de source pour le code" dans Coverage.py

J'ai fait un build hier soir, avec succès. Je me suis levé ce matin et j'en ai couru un autre sans changer de configuration ni modifier de code source. Maintenant, mon build échoue avec le message "Pas de source pour le code" lors de l'exécution de mon nosetests avec couverture.

NoSource: No source for code: '/home/matthew/.hudson/jobs/myproject/workspace/tests/unit/util.py'
. . . 
No source for code: '/home/matthew/.hudson/jobs/myproject/workspace/__init__.py'

Le seul indice que j'ai est que les fichiers qu'il dit qu'il ne peut pas trouver ne sont pas là, mais ils ne l'étaient jamais et ils ne sont pas censés l'être. par exemple, dans ce dernier, L'espace de travail de Hudson n'est pas Module Python, donc __init__.py ne serait pas là.

Update: j'ai confirmé que ce n'est pas un problème Hudson. Quand je lance des nostalgiques avec une couverture dans le répertoire lui-même, je vois des messages similaires. Encore une fois, les fichiers que coverage recherche n'étaient jamais là pour commencer, ce qui rend cela très déroutant.

29
demandé sur Matt Norris 2010-03-05 16:21:19

7 réponses

Je ne sais pas pourquoi il pense que ce fichier existe, mais vous pouvez le dire coverage.py pour ignorer ces problèmes avec un commutateur coverage xml -i.

Si vous voulez traquer l'erreur, envoyez-moi une ligne (ned à ned batchelder com).

30
répondu Ned Batchelder 2010-03-08 12:25:19

Assurez-vous qu'il n'y a pas .pyc fichier, qui peut avoir existé dans le passé.

36
répondu Ross 2010-03-08 16:22:26

Résumé: Existant .les données de couverture sont conservées lors de l'exécution de nosetests --with-coverage, Supprimez-les d'abord.

Details : moi aussi, je viens de rencontrer cela via Hudson et nosetests. Cette erreur venait de coverage/results.py:18 (couverture 3.3.1-il y avait 3 endroits soulevant cette erreur, mais c'était le cas). Il essaie d'ouvrir le fichier .py correspondant au module qui a été réellement tracé. Une petite démo:

$ echo print > hello.py
$ echo import hello > main.py
$ coverage run main.py

$ rm hello.py
$ coverage xml
No source for code: '/tmp/aoeu/hello.py'

Apparemment, j'avais un fichier stopwords.pyc qui a été exécuté / tracé, mais Non stopwords.py. pourtant, nulle part dans mon code, j'ai importé des mots d'arrêt, et même supprimé le .pyc j'ai toujours l'erreur.

Un simple strings .coverage a alors révélé que la référence à stopwords.py toujours existé. nosetests --with-coverage utilise la fonctionnalité Ajouter ou fusionner de coverage, ce qui signifie l'ancienne.les données de couverture persistent encore. En effet, la suppression .couverture abordé la question.

14
répondu Yang 2010-06-26 08:25:15

Utilisez simplement l'argument' --cover-erase'. Il corrige cette erreur et vous n'avez pas à supprimer manuellement les fichiers de couverture

nosetests --with-coverage --cover-erase

Je recommande fortement de vérifier l'aide pour voir quels autres arguments vous manquent aussi et n'oubliez pas non plus ces plugins

9
répondu Adam Spence 2012-10-02 15:32:20

Le problème est que Le .pyc fichier existe toujours.

Une solution rapide et sale consiste à supprimer tous les fichiers .pyc dans ce répertoire:

find . -name "*.pyc" -exec rm -rf {} \;
6
répondu Rick Hanlon II 2015-02-14 22:04:40

J'ai également rencontré ce problème en essayant d'exécuter la couverture nosetests via setuptools. Comme mentionné, il est possible de supprimer les .fichiers pyc mais cela peut être lourd.

J'ai fini par avoir à créer un .fichier coveragerc avec

[rapport]

Du Paramètre Ignore_errors = True

Pour corriger cette erreur.

1
répondu Danny D'Amours 2015-05-27 17:10:45

Peut-être que cela aidera, mais j'ai rencontré une erreur similaire aujourd'hui. Et c'est une erreur d'autorisation. Mon code utilise une caisse d'un autre utilisateur (par conception, vers le bas demander) et j'ai besoin de sudo pour que la couverture fonctionne. Donc, votre problème peut avoir quelque chose à lui.

0
répondu Jorge Vargas 2010-07-22 19:05:08