Tox.ini配置异常:flake8与mypy无法识别exclude参数及文件夹
问题原因分析
你的问题出在两个核心点上:
工具参数解析规则差异:
black使用Click库处理参数,允许全局选项(如--exclude)出现在路径参数之后,因此你把--exclude放在路径后的写法能被正常识别。- 但
flake8和mypy的参数解析逻辑要求全局选项必须放在路径参数之前。当你把--exclude放在pages这类路径后面时,这两个工具会将--exclude误认为是未知的路径/文件名,从而抛出unrecognized arguments错误。
变量中的参数顺序错误:
你在[vars]里定义的TASKS和PAGES采用了「路径 + --exclude + 排除路径」的顺序,完全不符合flake8和mypy的参数规范。
解决方法
方法一:统一管理排除规则(推荐)
将排除路径单独提取,放在命令的全局选项位置,避免变量中混合选项与路径:
修改tox.ini的对应配置块:
[vars] PROJECT = django_project TASKS = tasks PAGES = pages # 用逗号分隔多个需要排除的路径 EXCLUDE_PATHS = tasks/migrations,pages/migrations [testenv:flake8] basepython=python3 deps = -rrequirements-dev.txt commands= python -m flake8 --max-line-length=100 --exclude {[vars]EXCLUDE_PATHS} {[vars]PROJECT} {[vars]TASKS} {[vars]PAGES} whitelist_externals = /usr/bin/python3 [testenv:mypy] deps = -rrequirements-dev.txt commands = mypy --install-types --non-interactive \ --ignore-missing-imports \ --disallow-untyped-defs \ --disallow-incomplete-defs \ --disallow-untyped-decorators \ --exclude {[vars]EXCLUDE_PATHS} \ {[vars]PROJECT} {[vars]TASKS} {[vars]PAGES}
方法二:调整变量内的参数顺序
如果坚持要在变量中包含排除选项,需将--exclude放在路径前面,匹配工具的参数要求:
[vars] PROJECT = django_project TASKS = --exclude tasks/migrations tasks PAGES = --exclude pages/migrations pages # 后续的commands配置保持原有写法即可
替换后,flake8和mypy的命令会自动变成「--exclude选项在前、路径在后」的正确格式,就能正常识别参数了。
内容的提问来源于stack exchange,提问作者J. Donič
相关产品推荐
相关产品推荐

