Почему flake8 дает разные результаты для одной и той же команды локально и внутри tox? - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть Python проект, и я использую flake8 для выравнивания моего кода.

Локально, есть предупреждение, справедливо поднятое на flake8:

$ flake8 scripts src tests --ignore=W503,E501
src/projectname/workers/utils.py:22:20: W291 trailing whitespace

Однако та же команда в tox не вызывает никакого предупреждения:

$ tox -e flake8

получает следующий вывод:

flake8 develop-inst-noop: /home/username/Projects/projectname
flake8 installed: alembic==0.9.8, ..., zipp==0.5.2
flake8 runtests: PYTHONHASHSEED='2190899390'
flake8 runtests: commands[0] | flake8 scripts src tests --ignore=W503,E501
________________________________ summary _________________________________
  flake8: commands succeeded
  congratulations :)

Это содержимое моего tox.ini файла:

[tox]
envlist = flake8,py36

[testenv]
changedir = {toxworkdir}/{envname}
usedevelop = True
install_command = pip install {opts} {packages}
deps =
    py36: pytest-cov
    py36: pytest
    flake8: flake8
setenv =
    COVERAGE_FILE = {toxinidir}/.coverage.{envname}
commands =
    py36: pytest {toxinidir}/tests --cov=projectname {posargs}
    flake8: flake8 scripts src tests --ignore=W503,E501
    ;       E501: line too long
    ;       W503: line break before binary operator

Я проверил, и в обоих экспериментах у меня есть flake8==3.7.9
Почему flake8 и tox не возвращают код ошибки в этом случае, когда они должны?

1 Ответ

3 голосов
/ 03 апреля 2020

ваш tox.ini имеет:

changedir = {toxworkdir}/{envname}

это означает, что когда вы запускаете flake8 в токсикате, он задерживается (не существует) .tox/flake8/scripts / .tox/flake8/src / .tox/flake8/tests и т. Д. вы не видите ошибку (поведение 3.7.x состоит в том, чтобы молча игнорировать несуществующие вещи)

обратите внимание, что в flake8 3.8 (на момент написания невыпущенной) это снова станет ошибкой (E902):

$ flake8 does-not-exist
does-not-exist:0:1: E902 FileNotFoundError: [Errno 2] No such file or directory: 'does-not-exist'

отказ от ответственности: я являюсь текущим сопровождающим flake8 и одним из сопровождающих токса

...