在不正确的环境中运行的PyCharm中的Git钩子

时间:2019-06-24 20:37:14

标签: python git pycharm anaconda

我最近在PyCharm中启动了一个新项目,最终利用了anaconda环境。但是,在尝试通过PyCharm进行首次提交后,似乎使用的是本机python,而不是PyCharm中设置的环境。我尝试过几次重新启动PyCharm,重新启动计算机,然后重新安装虚拟环境。

以下是预提交钩子的副本:

set -e

# Run linters and tests
source scripts/lint.sh

以下是短毛绒:(已添加{which python以突出显示该问题)

set -e
set -v

which python

flake8 ~project name~
mypy ~project name~
pytest -x
black --check --fast --quiet ~project name~

set +v

我正在通过PyCharm-> VCS-> Commit运行提交。在PyCharm内部,提交失败

enter image description here (下面是大量的mypy错误,但请注意环境)

但是,如果我使用$ git commit -m "testing commit"从终端运行提交,则提交有效。它提供以下响应:

enter image description here

这是项目内部的正确虚拟环境,请参见此处: enter image description here

我设置不正确吗?我非常喜欢PyCharm的VCS,并且不想在终端上不必使用git。

5 个答案:

答案 0 :(得分:1)

似乎上述PyCharm票不会很快修复(自2014年以来就存在)。

以下这种技巧对我有用; I added this to the PyCharm ticket

这对我来说是一个有点烦人的解决方法:

  1. 关闭PyCharm。
  2. cd /your/project/dir
  3. 从以下命令行打开PyCharm:PYENV_VERSION="$(pyenv local | head -1)" open /Applications/PyCharm.app/。我正在使用macOS, 应该根据您的操作系统修改open命令。

每次切换项目时都必须这样做,否则pylint pre-commit钩子不起作用。如果你有一个 项目的类似配置(Python版本且未使用 PyLint),只需从CLI运行一次PyCharm。

答案 1 :(得分:0)

PyCharm不在虚拟环境下运行git hooks。错误跟踪器中的相关票据:https://youtrack.jetbrains.com/issue/PY-12988

答案 2 :(得分:0)

您可以手动编辑自动生成的预提交文件(位于项目目录中的.git/hooks/pre-commit),以添加虚拟环境的路径,替换为:

# start templated
INSTALL_PYTHON = 'PATH/TO/YOUR/ENV/EXECUTABLE'

使用

# start templated
INSTALL_PYTHON = 'PATH/TO/YOUR/ENV/EXECUTABLE'
os.environ['PATH'] = f'{os.path.dirname(INSTALL_PYTHON)}{os.pathsep}{os.environ["PATH"]}'

答案 3 :(得分:0)

这对我有用。

我遇到以下错误:

18:37   Commit failed with error
            0 file committed, 1 file failed to commit: Update pre-commit hooks
            env: python3.7: No such file or directory

当我在项目存储库中导航到.git/hooks/pre-commit时,发现shebang行是#!/usr/bin/env python3.7

这是一个问题,因为在MacOS上调用python3.7会导致以下结果:

zsh: command not found: python3.7

我可以添加一个全局python3.7,或者更新shebang。我选择了后者,将shebang行更改为:

#!/usr/bin/env python3

这为我解决了这个问题。

答案 4 :(得分:0)

以上解决方案都不适用于我:PyCharm 2020.3 上的 Windows 10

我所做的是重命名 .git\hooks\pre-commit -> .git\hooks\pre-commit.py

并用下一个内容创建了一个新的 .git\hooks\pre-commit

#!/bin/bash

BASEDIR=$(dirname "$0")
/c/<PATH-to-YOUR-Python>/python.exe $BASEDIR/pre-commit.py $@

很有魅力!