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.
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).
Assurez-vous qu'il n'y a pas .pyc fichier, qui peut avoir existé dans le passé.
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.
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
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 {} \;
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.
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.