包需要不同的 Python: 2.7.17 not in '>=3.6.1' while setting up pre-commit

Roo*_*iat 6 python git pre-commit pre-commit-hook pre-commit.com

我克隆了一个存储库,安装了 pre-commit 并且是第一次提交 这是实际安装和设置预提交包的时间。我遇到了以下问题。

[INFO] Installing environment for https://github.com/asottile/seed-isort-config.
[INFO] Once installed this environment will be reused.
[INFO] This may take a few minutes...
An unexpected error has occurred: CalledProcessError: command: ('/home/roopak/.cache/pre-commit/repokb2ckm/py_env-python2.7/bin/python', u'/home/roopak/.cache/pre-commit/repokb2ckm/py_env-python2.7/bin/pip', 'install', '.')
return code: 1
expected return code: 0
stdout:
    Processing /home/roopak/.cache/pre-commit/repokb2ckm

stderr:
    DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. A future version of pip will drop support for Python 2.7. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support
    ERROR: Package 'seed-isort-config' requires a different Python: 2.7.17 not in '>=3.6.1'
Run Code Online (Sandbox Code Playgroud)

Roo*_*iat 5

问题是我同时安装了 Python2.7 和 3。我的pre-commit安装是使用 Python 2.7 作为默认值。


解决方案1:从Python2.7中删除pre-commit并添加到Python3中。

根据预提交的创建者 - @anthony-sottile - 最好将预提交与 Python3 一起使用。为此,我们必须从 Python2.7 中卸载 pre-commit 并通过 Python3 安装它。

$ pip uninstall pre-commit  # uninstall from Python2.7
$ pip3 install pre-commit # install with Python3
Run Code Online (Sandbox Code Playgroud)

解决方案2:保持与Python2.7的预提交(不推荐)

为了解决这个问题,我使用default_language_version了预提交文档。参考:https : //pre-commit.com/#overriding-language-version

通过设置default_language_version所有钩子将使用这个特定版本。如果需要覆盖任何特定的钩子,language_version:则可以在钩子上设置此属性 - -。

例如:-

default_language_version:
    # force all unspecified python hooks to run python3
    python: python3
repos:
-   repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v2.5.0
    hooks:
      - id: trailing-whitespace
        name: trim trailing whitespace
        description: This hook trims trailing whitespace on files
        entry: trailing-whitespace-fixer

      - id: check-merge-conflict
        name: check for merge conflict
        description: Prevent accidentally commiting files with merge conflicts.
        language_version:
            python: python2.7

Run Code Online (Sandbox Code Playgroud)

此示例.pre-commit-config.yaml文件将默认 Python 版本设置为 Python 3。对于钩子 -check-merge-conflict它将使用 Python 2.7。

  • 请注意,安装预提交到 python2 意味着您永远停留在旧版本(<2)上——我强烈建议不要这样做(免责声明:我是创建者) (3认同)