在Docker映像上的预提交钩子中为python 2.7和3.7运行pylint

时间:2019-06-18 18:10:53

标签: python pylint pre-commit

我正在尝试使用CircleCI运行一个预提交钩子,该钩子同时为Python 2.7和3.7运行pylint。

.circleci/config.yml对Python 2和Python 3运行预提交。

jobs:
  lint-py2:
    docker:
      - image: python:2.7.14
    steps:
      {snip}
      - run: pre-commit run --all-files
      {snip}

  lint-py3:
    docker:
      - image: python:3.7.3
    steps:
      {snip}
      - run: pre-commit run --all-files
      {snip}

除其他事项外,预提交运行pylint:

-   repo: https://github.com/pre-commit/mirrors-pylint
    rev: v2.3.1  # Which version here?
    hooks:
    -   id: pylint

这里的问题是there is no version of pylint that is compatible with both Python 2.7 and 3.7:Python 2.7需要pylint 1.x,Python 3.7需要pylint 2.x。

如何使Circle CI使用不同版本的pylint运行两个棉绒作业?

我正在考虑几种选择:

  • 在预提交配置中两次添加pylint(使用不同的别名),并在作业定义中disable一个添加另一个
    • 似乎pre-commit尝试在查看SKIP变量之前安装依赖项 ,因此Python 2.7运行仍然尝试安装pylint 2,并且出现{{1}错误}
  • 在挂钩级别使用同时具有Python版本和set the python version的Docker映像
    • 这需要构建我自己的Docker映像
  • 跳过其中一项皮棉工作
  • 放弃2.7或3.7支持

1 个答案:

答案 0 :(得分:1)

最简单的选择可能是同时安装python2和python3,尽管可以使用多个配置文件来完成所需的操作:

另一种选择是通过使用--config选项在CI中仅运行其中的一个

有了这个,您将拥有默认的const robotFactory = (model, mobi) => { return { model: model, mobi: mobi, beep() { console.log('Beep Boop'); } } }; const one = robotFactory('P-500', true); console.log(one.model); 和一个特殊的.pre-commit-config.yaml,其中包括python2.7 pylint而不是python3 pylint

在CI中,您将为python2.7调用.pre-commit-config-py27.yaml,为非py27运行调用普通pre-commit run --config .pre-commit-config-py27.yaml --all-files --show-diff-on-failure