2010-03-05 16 views
27

Ejecuté una compilación anoche, con éxito. Me levanté esta mañana y ejecuté otro sin cambiar ninguna configuración ni modificar ningún código fuente. Ahora mi versión está fallando con el mensaje "No hay código fuente" al ejecutar mis nosetests con cobertura.Mensaje "No hay código fuente" en Coverage.py

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' 

La única pista que tengo es que los archivos se dice que no puede encontrar no están disponibles, pero nunca fueron y no se supone que sea. Por ejemplo, en este último, el espacio de trabajo de Hudson no es un módulo de Python, por lo que __init__.py no estaría allí.

Actualización: He confirmado que esto no es un problema de Hudson. Cuando ejecuto nostálgicas con cobertura en el directorio, veo mensajes similares. Una vez más, los archivos que la cobertura está buscando nunca estuvieron allí para empezar, lo que hace que esto sea muy desconcertante.

+0

¿Funciona de nuevo si haces un pago limpio? Quizás el proceso de creación está dejando algo atrás que está arruinando el espacio de trabajo. –

+0

He eliminado el espacio de trabajo y reconstruido, pero obtengo el mismo error. Incluso copié el trabajo con un nuevo nombre. ¿Hay algo más que pueda hacer para asegurar que sea un "pago limpio"? –

Respuesta

29

No estoy seguro de por qué cree que ese archivo existe, pero puede decirle a coverage.py que ignore estos problemas con un modificador coverage xml -i.

Si desea rastrear el error, envíeme una línea (ned en ned batchelder com).

+0

Gracias, Ned. ¿La bandera -i está documentada en su sitio? Debo haberlo perdido. ¿Te importaría publicar el enlace? –

+0

Hmm, ahora que lo menciona, [los documentos] (http://nedbatchelder.com/code/coverage/cmd.html) no parecen mencionar '-i', aunque la línea de comandos ayuda (' cobertura ayuda xml') hace. –

+0

FWIW, agregué una respuesta que rastreó el error. – Yang

34

Asegúrese de que no haya ningún archivo .pyc allí, que pueda haber existido en el pasado.

+2

En mi caso, esto es exactamente lo que ayudó: eliminar todo * .pyc y también .coverage y todos los archivos xml presentes. – xaralis

+1

gracias, gracias, gracias, – juliomalegria

+1

Esta debería ser la respuesta aceptada. –

14

Resumen: Los datos de cobertura existentes se conservan cuando se ejecuta nosetests --with-coverage, por lo tanto, quítelos primero.

Detalles: Yo también acabo de encontrar esto a través de Hudson y nosetests. Este error venía de coverage/results.py:18 (cobertura 3.3.1 - hubo 3 lugares que presentaron este error, pero este fue el relevante). Está intentando abrir el archivo .py correspondiente al módulo que realmente se rastreó. Una pequeña demostración:

$ 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' 

Al parecer, tenía un stopwords.pyc archivo que se ha ejecutado/rastrearse, pero sin stopwords.py. Sin embargo, en ningún lugar de mi código importé palabras vacías, e incluso eliminando el .pyc aún recibí el error.

Un simple strings .coverage reveló que la referencia a stopwords.py aún existía. nosetests --with-coverage está utilizando la función de agregar o fusionar de cobertura, lo que significa que los datos antiguos de cobertura aún persisten. De hecho, eliminar .coverage abordó el problema.

+2

Genial para ver que llegaste al fondo. Por cierto: en lugar de 'cadenas .coverage', puede usar' coverage debug data', que le dará un resumen de los datos en el archivo '.coverage'. –

0

Quizás esto ayude, pero me encontré con un error similar hoy. Y es un error de permiso. Mi código está utilizando un pago de otro usuario (por diseño, preguntar) y necesito sudo para que la cobertura funcione. Por lo tanto, su problema puede tener algo que ver.

9

Simplemente use el argumento '--cover-erase'. Se corrige este error y usted no tiene que eliminar manualmente los archivos de cobertura

nosetests --with-coverage --cover-erase 

que había fuertemente recomendamos que visites la ayuda para ver qué otros argumentos que se está perdiendo demasiado y no se olvide de esos plugins ya sea

6

El problema es que el archivo .pyc aún existe.

Una solución rápida y sucia es eliminar todos los archivos .pyc en ese directorio:

find . -name "*.pyc" -exec rm -rf {} \; 
+2

Un atajo: 'encontrar. -name "* .pyc" -delete' – slackmart

0

me encontré con este problema también cuando se trata de ejecutar nosetests cobertura a través de setuptools. Como se mencionó, es posible eliminar archivos .pyc existentes, pero eso puede ser engorroso.

terminé tener que crear un archivo con el siguiente .coveragerc

[informe]

ignore_errors = true

para corregir este error.

Cuestiones relacionadas