我想知道是否有办法在 Python 项目中强制执行类型提示?
目前,我正在使用mypy 预提交挂钩.pre-commit-config.yaml:
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v0.931
hooks:
- id: mypy
Run Code Online (Sandbox Code Playgroud)
使用这个钩子,由于调用函数时的类型错误,我将(正确地)无法提交以下代码add:
def add(a: int, b: int) -> int:
return a + b
add(a=1.0, b=2.0)
Run Code Online (Sandbox Code Playgroud)
但是,使用上面的mypy和预提交钩子组合,类型提示仍然没有完全强制执行,我将能够在不使用类型提示的情况下提交以下代码:
def add(a, b):
return a + b
Run Code Online (Sandbox Code Playgroud)
我也很好奇,在动态类型语言(例如 Python)中强制执行类型提示是否是一个好主意?我知道我可以为我的项目选择一些静态类型语言(例如 Java),但是,我想使用带有强制类型提示的 Python 的原因是因为这允许我依赖现有的 Python 库(例如 Tensorflow),同时确保由于函数签名中指定了类型,所以编写的代码质量更好。
在尝试使用预提交挂钩时,我遇到了一些困难,包括Intel在 Conda 环境中以格式包形式发布的最新 Lava-nc 。.tar.gz pip
environment.yaml使用以下 Conda文件:
# This file is to automatically configure your environment. It allows you to
# run the code with a single command without having to install anything
# (extra).
# First run:: conda env create --file environment.yml
# If you change this file, run: conda env update --file environment.yml
# Instructions for this networkx-to-lava-nc repository only. First time usage
# On Ubuntu (this is needed for lava-nc): …Run Code Online (Sandbox Code Playgroud) 我看到我所能设置的只是%repos%和%txn%
我如何使用它们来获取提交消息(在我的情况下,所以我可以解析票号,这样我可以看到它在提交之前是否存在于bug数据库中)
我有一个预提交钩子,使用ruby gem semver2定义构建号.gem基本上只创建一个名为.semver的文件,用于存储包的版本信息.
钩子根据某些日期/提交参数生成构建号,然后使用此信息更改AssemblyInfo.cs,然后在提交之前添加更改的文件.
我在这里有几个问题:
就.NET而言,有一个钩子修改我的AssemblyInfo文件有危险吗?
是应该使用预提交挂钩还是其他挂钩?
我怎样才能知道这个钩子不同的行为上--amend,merge和rebase 承诺?
我怎么能告诉这个钩子在分支的基础上表现不同?
您是否有自动化构建号的不同解决方案?
钩子:
#!/bin/sh
#
# Append build number to semver version
#
# check semver has been initiated
if [ -f .semver ]; then
echo `semver`
else
echo `semver init`
echo `semver inc minor`
echo `semver pre 'alpha.1'`
echo `semver`
fi
# grab date string
date_str=`date +%y%m.%d.`
# grab commit count +1
build_num=$(git rev-list --since="00:00:00" HEAD --count)
let "build_num += 1"
# generate build …Run Code Online (Sandbox Code Playgroud) 如果特定的 testng 测试失败,我将如何编写一个 bash 脚本,该脚本将作为 git 预提交挂钩运行以失败?我目前通过 Maven Surefire 运行我的 testng 测试,如下所示:
mvn clean test -Dtest="MyTestName"
Run Code Online (Sandbox Code Playgroud) 在使用预提交时,有时我只想知道文件名将被传递到挂钩,只是为了验证--from-ref和to-ref是否正确。例如,我正在运行:
pre-commit run flake8 --from-ref $(git merge-base master HEAD) --to-ref HEAD
Run Code Online (Sandbox Code Playgroud)
我不确定哪些文件传递给了我的flake8钩子,添加--verbose没有帮助,因为flake8也不会输出文件名。
那么有什么方法可以告诉pre-commit只输出文件名列表而不运行实际的钩子?
我正在开发一个pre-commit==2.15.0已添加到 python 需求文件中的项目。我安装了要求。现在,当我尝试执行以下操作时,git commit出现以下错误:
An unexpected error has occurred: ExecutableNotFoundError: Executable `/bin/sh` not found
Check the log at C:\Users\username\.cache\pre-commit\pre-commit.log
Run Code Online (Sandbox Code Playgroud)
在我的预提交日志中,我有:
pre-commit version: 2.15.0
sys.version:
3.9.0 (tags/v3.9.0:9cf6752, Oct 5 2020, 15:34:40) [MSC v.1927 64 bit (AMD64)]
sys.executable: c:\users\username\appdata\local\programs\python\python39\python.exe
os.name: nt
sys.platform: win32
Traceback (most recent call last):
File "c:\users\username\appdata\local\programs\python\python39\lib\site-packages\pre_commit\error_handler.py", line 65, in error_handler
yield
File "c:\users\username\appdata\local\programs\python\python39\lib\site-packages\pre_commit\main.py", line 368, in main
return hook_impl(
File "c:\users\username\appdata\local\programs\python\python39\lib\site-packages\pre_commit\commands\hook_impl.py", line 231, in hook_impl
retv, stdin = _run_legacy(hook_type, hook_dir, args)
File "c:\users\username\appdata\local\programs\python\python39\lib\site-packages\pre_commit\commands\hook_impl.py", line …Run Code Online (Sandbox Code Playgroud) 有没有办法pytest.mark在预提交挂钩期间排除标记为 的 pytests 运行?特别是,我想排除标记为集成测试的测试。
测试的内容如下所示
pytestmark = [pytest.mark.integration, pytest.mark.reporting_api]
### some tests
Run Code Online (Sandbox Code Playgroud)
配置.pre-commit-conifg.yaml pytest是
- repo: local
hooks:
- id: pytest
name: pytest
entry: pytest test/
language: system
pass_filenames: false
types: [python]
stages: [commit, push]
Run Code Online (Sandbox Code Playgroud) 我的预提交钩子压缩/编译css/js文件.当发生错误时,我只是echo用来输出错误然后exit 1.但是,写入控制台的文本是WHITE,因此在发生错误时不容易看到.
是否有另一种方法可以写入控制台(errOut?),使文本变为RED?
我在运行 git pre-commit hook 时得到了奇怪的结果,例如,当我在终端中执行 git diff --name-only 时,它似乎给出了与在 .git/hooks/pre-commit 中执行时不同的结果
所以我的问题是:
我问这个是因为我尝试了 2 或 3 次:我修改文件,我手动运行脚本,它打印出来
#! /bin/sh -xv
files=$(git diff --name-only)
+ git diff --name-only
+ files=path/to/file.h
echo $files
+ echo path/to/file.h
path/to/file.h
...
Run Code Online (Sandbox Code Playgroud)
当我执行 git commit -am"eh" 时,输出会有所不同
#! /bin/sh -xv
files=$(git diff --name-only)
+ git diff --name-only
+ files=
echo $files
+ echo
Run Code Online (Sandbox Code Playgroud) click 8.1.1 和 black <=22.1.0 之间的不兼容性已报告并显然已在此处修复
但显然诗歌仍然是一个问题,正如这里报道的(并且显然也已修复)
配置:
poetry run pre-commit run --all-files系统地运行结果:
black....................................................................Failed
- hook id: black
- exit code: 1
Traceback (most recent call last):
File "/Users/charlotteweil1/.cache/pre-commit/repoqg3mkzrn/py_env-python3.9/bin/black", line 8, in <module>
sys.exit(patched_main())
File "/Users/charlotteweil1/.cache/pre-commit/repoqg3mkzrn/py_env-python3.9/lib/python3.9/site-packages/black/__init__.py", line 1372, in patched_main
patch_click()
File "/Users/charlotteweil1/.cache/pre-commit/repoqg3mkzrn/py_env-python3.9/lib/python3.9/site-packages/black/__init__.py", line 1358, in patch_click
from click import _unicodefun
ImportError: cannot import name '_unicodefun' from 'click' (/Users/charlotteweil1/.cache/pre-commit/repoqg3mkzrn/py_env-python3.9/lib/python3.9/site-packages/click/__init__.py)
Run Code Online (Sandbox Code Playgroud)
我尝试删除整个repoqg3mkzrn目录.cache/pre-commit并重新安装预提交,但行为是相同的:(
提前致谢!
更新到最新版本后,我在 Mac 操作系统中收到以下提交错误。尝试重新启动 VS Code,也尝试使用终端,但出现同样的错误。直到git add .这一步工作正常。只有提交命令无法正常工作。可能是什么问题?
git commit -m "Commit message"
.git/hooks/pre-commit: line 15: python: command not found
.git/hooks/pre-commit: line 16: python: command not found
Run Code Online (Sandbox Code Playgroud) pre-commit-hook ×12
git ×6
python ×4
pre-commit ×3
bash ×2
c# ×2
.net ×1
commit ×1
conda ×1
git-commit ×1
mypy ×1
pytest ×1
python-3.x ×1
sharpsvn ×1
stderr ×1
stdout ×1
svn ×1
testng ×1