我正在尝试从 PyCharm 中的“提交”按钮启动我的预提交挂钩(v. 2020.2)。 我使用 conda venv(用
conda create -n py38 python=3.8
创建),用 pip install
安装模块。
我的
.pre-commit-config.yaml
读到:
repos:
- repo: local
hooks:
- id: black
name: black
language: system
entry: black --check
types: [python]
- id: isort
name: isort
language: system
entry: isort --check-only
types: [python]
我在这里使用
local
存储库,因为我会将我的代码推送到未连接到互联网的内联网存储库。
运行
pre-commit run --all-files
在我的本地计算机上从命令行运行良好。但是当我尝试从 PyCharm 提交时(),它会引发以下错误:
Traceback (most recent call last):
File "c:\bib\envs\py38\lib\runpy.py", line 193, in _run_module_as_main
return _run_code(code, main_globals, None, File "c:\bib\envs\py38\lib\runpy.py", line 86, in _run_code exec(code, run_globals)
File "c:\bib\envs\py38\lib\site-packages\pre_commit\__main__.py", line 1, in
from pre_commit.main import main
File "c:\bib\envs\py38\lib\site-packages\pre_commit\main.py", line 13, in
from pre_commit.commands.autoupdate import autoupdate
File "c:\bib\envs\py38\lib\site-packages\pre_commit\commands\autoupdate.py", line 14, in
from pre_commit.clientlib import InvalidManifestError
File "c:\bib\envs\py38\lib\site-packages\pre_commit\clientlib.py", line 16, in
from pre_commit.error_handler import FatalError
File "c:\bib\envs\py38\lib\site-packages\pre_commit\error_handler.py", line 10, in
from pre_commit.store import Store
File "c:\bib\envs\py38\lib\site-packages\pre_commit\store.py", line 4, in
import sqlite3
File "c:\bib\envs\py38\lib\sqlite3\__init__.py", line 23, in
from sqlite3.dbapi2 import *
File "c:\bib\envs\py38\lib\sqlite3\dbapi2.py", line 27, in
from _sqlite3 import *
ImportError: DLL load failed while importing _sqlite3: The specified module could not be found.
我认为 pre-commit
的 github 上的
这个错误报告特别相关。如果我理解得很好,它暗示 PyCharm 实际上并未加载 venv,因此在此环境中找不到已安装的软件包。但没有提出解决方案。
有人有解决办法吗?
在执行 python 之前,您必须
source
为您的钩子设置环境。
创建 ENV,但您已经完成了该部分。
python3 -m venv path/to/venv
然后创建一个 shell 脚本来获取环境并执行你的钩子
source path/to/venv/bin/activate
python3 -m path/to/your/python-hook
这样你的钩子应该有正确的环境设置。 请记住 git hook 的路径始终从存储库根目录开始。