Подтвердить что ты не робот

Сообщение "Нет источника для кода" в 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'

Единственный ключ, который у меня есть, это то, что файлы, которые он говорит, что они не могут найти, отсутствуют, но они никогда не были, и они не должны быть. Например, в последнем рабочем пространстве Hudson не является модулем Python, поэтому __init__.py там не будет.

Обновление: Я подтвердил, что это не проблема Хадсона. Когда я запускаю nostests с охватом в самой директории, я вижу похожие сообщения. Опять же, файлы, на которые распространяется покрытие, никогда не начинались, делая это очень озадачивающим.

4b9b3361

Ответ 1

Я не уверен, почему он считает, что файл существует, но вы можете сказать, что cover.py игнорирует эти проблемы с помощью переключателя coverage xml -i.

Если вы хотите отследить ошибку, напишите мне строку (ned at ned batchelder com).

Ответ 2

Убедитесь, что там нет файла .pyc, который, возможно, существовал в прошлом.

Ответ 3

Сводка. Существующие .coverage данные хранятся при запуске nosetests --with-coverage, поэтому сначала удалите его.

Детали. Я тоже просто столкнулся с этим через Хадсон и носетисты. Эта ошибка исходила от coverage/results.py:18 (охват 3.3.1 - было 3 места, которые поднимали эту ошибку, но это было актуально). Он пытается открыть файл .py, соответствующий модулю, который был фактически прослежен. Небольшая демонстрация:

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

По-видимому, у меня был файл stopwords.pyc, который был выполнен/прорисован, но не stopwords.py. Но нигде в моем коде не было импортирования стоп-слов и даже удаления .pyc, я все еще получил ошибку.

Простой strings .coverage затем показал, что ссылка на stopwords.py все еще существует. nosetests --with-coverage использует функции добавления или объединения покрытия, что означает, что старые данные .coverage все еще задерживаются. Действительно, удаление .coverage устраняет проблему.

Ответ 4

Просто используйте аргумент '--cover-erase'. Он исправляет эту ошибку, и вам не нужно вручную удалять файлы покрытия

nosetests --with-coverage --cover-erase

Я бы настоятельно рекомендовал проверить помощь, чтобы увидеть, что другие аргументы, которые вам тоже не хватает, и не забывайте эти плагины либо

Ответ 5

Проблема заключается в том, что файл .pyc все еще существует.

Быстрое и грязное решение - удалить все .pyc файлы в этом каталоге:

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

Ответ 6

Возможно, это поможет, но сегодня я столкнулся с подобной ошибкой. И это ошибка разрешения. Мой код использует выписку от другого пользователя (по дизайну, вниз спросить), и мне нужно sudo, чтобы покрытие работало. Таким образом, ваша проблема может иметь что-то для этого.

Ответ 7

Я столкнулся с этой проблемой, пытаясь запустить nosetests через setuptools. Как уже упоминалось, можно удалить существующие файлы .pyc, но это может быть громоздким.

Мне пришлось создать файл .coveragerc со следующим

[отчет]

ignore_errors = True

чтобы исправить эту ошибку.