标签: python-black

使用代码格式化程序时如何逐行保留 git 作者?

我们厌倦了掉毛。所以我们想在我们的项目中使用黑色。不幸的是,它几乎改变了我们项目中的所有其他行,这会使我们丢失大部分作者信息。我们annotate在 pycharm 中使用或git blame很多来确定在查看特定代码片段时与谁交谈。在一次提交中更改大量文件时,如何保留这些信息?

编辑:由于这是这个问题的重复,我想专注于“尽可能好”的方法。

让我们假设 lint 提交是由人工(但已知)作者创建的,因此用作标志。那么是否可以创建一个git blame类似的输出来显示自此关键 lint 提交以来的所有作者以及在该提交中更改的行的任何先前作者?

我意识到这对于拆分/合并的线路效果不佳,但它至少提供了一种更快的方法来限制潜在人员与 1、2、3 人交谈的范围。

git lint git-blame python-black

7
推荐指数
1
解决办法
743
查看次数

黑色 --exclude 参数不排除所需文件

假设exclude_from_black.py我的项目根目录中有以下 python 文件:

print('I want single quotes')
Run Code Online (Sandbox Code Playgroud)

我试图从黑色重新格式化中排除此文件,但以下命令似乎都不起作用:

black --exclude="exclude_from_black.py"
black --exclude="exclude_from_black\.py"
black --exclude="exclude\_from\_black\.py"
Run Code Online (Sandbox Code Playgroud)

根据文档,exclude参数采用正则表达式。我在这里做错了什么?

regex python-black

7
推荐指数
2
解决办法
4923
查看次数

Flake8 禁用所有格式规则

flake8用于 linting 和black格式化。

flake8执行规则格式规则产生警告:

在此处输入图片说明

我只想看执行规则。我不关心格式规则,因为它们会通过black格式自动修复:

在此处输入图片说明

我可以通过运行一次禁用这些规则flake8 --ignore=E271,E225,W291,E231。但是,没有要禁用的格式规则的详尽列表,必须一次发现一个。拥有类似于 JavaScript 的 eslint 的东西会很棒,其中有一个插件可以禁用代码格式化程序涵盖的所有格式化规则。

有没有类似的方法来禁用所有格式规则flake8

解决方案:根据以下答案,我最终忽略了使用此命令的所有格式规则:

flake8 --ignore=E101,E111,E114,E115,E116,E117,E12,E13,E2,E3,E401,E5,E70,W1,W2,W3,W5 file.py
Run Code Online (Sandbox Code Playgroud)

python formatting flake8 python-black

7
推荐指数
2
解决办法
1091
查看次数

如何处理丑陋的代码格式化程序输出?(黑色)

我目前正在尝试使用适用于Python的Black代码格式化程序。在超过90%的情况下,我对输出(使用默认配置)感到满意,但是它经常发生,它以对我来说似乎很丑陋的方式格式化某些行。

这是一个使用黑色格式化前后的示例。

之前: 格式化之前

后: 格式化后

这两行的语法本来是相同的(相同的函数,相同数量的参数...),所以以相同的方式格式化它们是有意义的。但是,由于第一行稍长,Black对其格式有所不同,这使得阅读和解释代码变得更加困难。

当然,在这种特定情况下,您可以增加linelengthBlack 的参数,但这通常并不能真正解决问题,我想坚持使用默认配置。

我遇到过许多这样的情况,也使用其他格式化程序,例如JavaScript的Prettier。您如何处理这些情况?例如,是否有一种方法可以告诉Black忽略这些特定行而不格式化它们?

python code-formatting visual-studio-code python-black

6
推荐指数
0
解决办法
1722
查看次数

如何在诗歌虚拟环境中更改 black 或 flake8 的默认行长度?

我已将 black 和 flake8 加载到诗歌虚拟环境中。我想将默认线长度更改为黑色或 flake8,以便他们同意。做这个的最好方式是什么?

flake8 python-black python-poetry

6
推荐指数
2
解决办法
2万
查看次数

Python:黑色不包裹长行

我正在使用black==20.8b1.

我有一个很长的字符串,如:

return f"{self.name}, a {adjective.to_name()} {kin_string}{self._type.to_name()} who works for the {target.get_relationship_target_string()}."
Run Code Online (Sandbox Code Playgroud)

我跑:

$ black -l 80 . -t py38
All done! ?  ?
2 files left unchanged.
Run Code Online (Sandbox Code Playgroud)

为什么字符串没有包裹?我认为现在black支持包装字符串(基于github中的问题)。

python word-wrap python-black

6
推荐指数
3
解决办法
1924
查看次数

vscode 设置中代码的换行格式

我们可以在 VS Code中使用Ctrl++来自动格式化代码。vscode 断行超过 80 个字符。改变并不会改变它。我想把 120 放入我的 python 代码中。解决办法是什么?Shiftilinewidth

我在挖掘以前的问题时没有发现类似的问题。

这是我的setting.json

{
    "workbench.panel.defaultLocation": "right",
    "workbench.startupEditor": "none",
    "workbench.sideBar.location": "right",
    "python.pythonPath": "/usr/bin/python3",
    "editor.minimap.enabled": false,
    "workbench.colorTheme": "Monokai",
    "C_Cpp.updateChannel": "Insiders",
    "update.showReleaseNotes": false,
    "update.mode": "manual",
    "workbench.editorAssociations": [
        {
            "viewType": "jupyter.notebook.ipynb",
            "filenamePattern": "*.ipynb"
        }
    ],
    "files.associations": {
        "*.rmd": "markdown"
    },
    "window.zoomLevel": 1,
    "prettier.printWidth": 120,
    "editor.wordWrap": "wordWrapColumn",
    "editor.wrappingIndent": "same",
    "editor.wordWrapColumn": 120

}
Run Code Online (Sandbox Code Playgroud)

正如@Subrato 建议的那样,这对我有用:

"editor.defaultFormatter": "esbenp.prettier-vscode",
  "[python]": {
    "editor.defaultFormatter": null
  },
  "python.formatting.blackArgs": ["--line-length", "120"],
  "python.formatting.provider": "black",
Run Code Online (Sandbox Code Playgroud)

python visual-studio-code python-black

6
推荐指数
1
解决办法
2万
查看次数

是否可以从 python 中的 black 命令运行 isort formatter

我喜欢从精心设计的 Python 项目中获取灵感。

最后一个给我启发的是诗歌库

我从中复制了很多,但这篇文章的主题是blackisort

两者都配置良好pyproject.toml

[tool.isort]
profile = "black"
...
known_first_party = "poetry"


[tool.black]
line-length = 88
include = '\.pyi?$'
exclude = '''
/(
...
)/
'''
Run Code Online (Sandbox Code Playgroud)

格式设置如下Makefile

format: clean
    @poetry run black poetry/ tests/
Run Code Online (Sandbox Code Playgroud)

我认为运行make format会运行black,它将在内部运行isort,但是当我运行时isort .,它随后正确地格式化了导入语句。然后好像black没跑isort

问:内部运行吗?blackisort

python isort python-black python-poetry

6
推荐指数
1
解决办法
8307
查看次数

Black 不尊重 pyproject.toml 中的扩展排除

在 VSCode 中,使用 Python 3.9 和 black==22.6.0,我的项目结构如下:

--- root
------src
---------module0.py
---------module1.py
------tests
---------test_folder0
------------test_file0.py
------------test_file1.py
---------test_folder1
---------etc.
Run Code Online (Sandbox Code Playgroud)

pyproject.toml无法获得extend-exlude实际排除我的测试文件的部分。我已经尝试了多种不同的方法,包括整个测试文件夹以及 test_whatever.py 文件,但似乎没有任何效果,即使我的各种尝试已经过https://regex101.com/的验证。最简单的例子:

[tool.black]
line-length = 200
target-version = ['py39']
include = '\.pyi?$'
extend-exclude = '''.*test_.*'''
Run Code Online (Sandbox Code Playgroud)

要么我的正则表达式错误(或者黑色需要一些修改),要么 VSCode 忽略我的项目配置或 idk。

python visual-studio-code python-black pyproject.toml

6
推荐指数
1
解决办法
9448
查看次数

如何在 cookiecutter 模板上运行黑色格式?

我正在使用预提交blackflake8钩子。

error: cannot format在尝试对以下代码进行黑色格式化时得到了这个

from {{cookiecutter.project_name}} import my_module
Run Code Online (Sandbox Code Playgroud)

无论如何,是否有指示黑色,跳过/忽略特定于 cookiecutter 的语法?

python pre-commit cookiecutter python-black

5
推荐指数
0
解决办法
804
查看次数