run online job example delivery python continuous-integration code-coverage nosetests

python - online - Mensaje de "No hay fuente para el código" en Coverage.py



jenkins y python (7)

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

Corrí una versión anoche, con éxito. Me levanté esta mañana y corrí otra sin cambiar ninguna configuración ni modificar ningún código fuente. Ahora mi compilación está fallando con el mensaje "No hay fuente para el código" al ejecutar mis pruebas con cobertura .

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 que dice que no puede encontrar no están allí, pero nunca estuvieron y se supone que no deben estar. Por ejemplo, en el ú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 nostests con cobertura en el propio directorio, veo mensajes similares. Una vez más, los archivos que está buscando la cobertura nunca estuvieron allí para empezar, haciendo esto muy desconcertante.


El problema es que el archivo .pyc todavía existe.

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

find . -name "*.pyc" -exec rm -rf {} /;


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

Si desea localizar el error, escríbame una línea (ned at ned batchelder com).


Solo usa el argumento ''- cover-erase''. Corrige este error y no tiene que eliminar manualmente los archivos de cobertura

nosetests --with-coverage --cover-erase

Recomiendo encarecidamente consultar la ayuda para ver qué otros argumentos te faltan y no olvides esos complementos tampoco.


Tal vez esto ayude, pero me encontré con un error similar hoy. Y es un error de permiso. Mi código está usando una verificación de otro usuario (por diseño, no disponible) y necesito sudo para que la cobertura funcione. Así que su problema puede tener algo que ver.


También me encontré con este problema al intentar ejecutar la cobertura de pruebas a través de setuptools. Como se mencionó, es posible eliminar los archivos .pyc existentes, pero eso puede ser engorroso.

Terminé teniendo que crear un archivo .coveragerc con lo siguiente

[informe]

ignore_errors = True

para solucionar este error.


Resumen : los datos de .coverage existentes se mantienen cuando se ejecutan las nosetests --with-coverage , así que elimínelos primero.

Detalles : Yo también acabo de encontrar esto a través de Hudson y nos detestamos. Este error provenía de coverage/results.py:18 (cobertura 3.3.1 - hubo 3 lugares que provocaron este error, pero este fue el relevante). Está intentando abrir el archivo .py correspondiente al módulo que realmente fue rastreado. 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''

Aparentemente tenía un archivo stopwords.pyc que fue ejecutado / rastreado, pero no stopwords.py. Sin embargo, en ninguna parte de mi código estaba importando palabras clave, e incluso eliminando el .pyc aún obtenía el error.

Una serie de strings .coverage reveló que la referencia a stopwords.py todavía existía. nosetests --with-coverage es usar la funcionalidad de añadir o combinar cobertura, lo que significa que los antiguos datos de cobertura aún persisten. De hecho, la eliminación de .coverage abordó el problema.