假设我想使用黑色作为 API,并执行以下操作:
import black
black.format("some python code")
Run Code Online (Sandbox Code Playgroud)
通过调用black二进制文件来格式化代码Popen是另一种选择,但这不是我要问的。
Python 格式化工具 Black 是否有一个选项可以撤消它在运行后所做的格式化更改?还是假设我正在使用源代码控制并制作自己的备份?这是截至 2019 年 12 月和黑色版本 19.3b0。
我们正在将 Black 代码风格应用于 django 项目。
在我找到的所有教程/示例中(例如在 django cookiecutter和这个博客中),我一直看到 django 的迁移文件被排除在 linter 之外。
但在我看来,这些仍然是 python 文件。当然,django 可能不会自动生成它们以满足 Black 规范。但这并不像开发人员总是编写他们的代码来满足 Black 规范......这就是 linting 的用途!
为什么迁移文件被认为与任何其他 python 文件不同?!
注意,如果您有预先存在的迁移,我知道有可能更改已应用的迁移 - 这需要注意第一个应用程序(坦率地说,第一个应用程序对代码库的其余部分也是如此)但肯定不是有理由不这样做吗?
编辑 - @torxed 要求提供 django 迁移文件的示例
我不确定这会有多大帮助,但典型的 django 迁移文件可能如下所示(在这种情况下,向表中添加一个字符字段):
# Generated by Django 2.2.3 on 2019-10-28 09:45
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('api', '0009_figures_notes_tables'),
]
operations = [
migrations.AlterField(
model_name='project',
name='processed_kmz_sha',
field=models.CharField(max_length=255),
),
]
Run Code Online (Sandbox Code Playgroud) 我想在我的预提交挂钩中使用python 黑色代码重新格式化程序,但在我的公司中,他们决定在 python 代码中使用制表符而不是空格。所以我尝试更改黑色配置,但我没有看到任何使用制表符的选项,唯一可以影响的是行长度。
黑色是否与 PEP8 标准紧密相连以至于永远不允许制表符?
Python 格式化指南,著名的PEP8建议行长度不要超过79 个字符。
我可以使用Black Formatter轻松地将代码自动格式化为最大行长度,但它不会破坏长字符串。linter 仍然会抱怨代码中的长 URL,而 Black 也无济于事。
是否可以使用 Black 格式化程序自动断开长字符串?
当我在此提交上运行 GitLab CI 时
\n有了这个gitlab-ci.yml:
stages:\n - format\n - test\n\nblack_formatting:\n image: python:3.6\n stage: format\n \n before_script:\n # Perform an update to make sure the system is up to date.\n - sudo apt-get update --fix-missing\n # Download miniconda.\n - wget -q https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh; bash miniconda.sh -b -f -p $HOME/miniconda;\n # Ensure the (mini) conda environment can be activated.\n - export PATH="$HOME/miniconda/bin:$PATH"\n # (Re)create the environment.yml file for the repository.\n - conda env create -q -f …Run Code Online (Sandbox Code Playgroud) python formatting continuous-integration gitlab python-black
我目前正在研究Black作为我们的默认格式化程序,但是,我有一些边缘情况不能很好地格式化,我想知道是否有办法获得我想要的结果。
Black的文档部分探讨了我的问题,我有一个水平分布的字典表达式,我想保持这种状态,因为我希望添加行,例如:
# Black would keep this as-is because of the trailing comma
TRANSLATIONS = {
"en_us": "English (US)",
"pl_pl": "polski",
}
Run Code Online (Sandbox Code Playgroud)
但在我的情况下,字典在列表理解中:
res = [
{
'id': item.id,
'name': item.name,
}
for item in items.select()
]
Run Code Online (Sandbox Code Playgroud)
无论尾随逗号如何,哪个 Black 都会崩溃,如下所示:
res = [
{"id": item.id, "name": item.name,}
for item in items.select()
]
Run Code Online (Sandbox Code Playgroud)
在这些情况下,有没有办法告诉黑方保留水平结构?
我刚刚开始在 Visual Studio Code 中使用“ Black ”格式化程序模块。一切都很顺利,直到我注意到它使用双引号而不是我已经在代码中使用的单引号......并且它覆盖了......
那么,是否有一个 Black 参数可以添加到 Visual Studio Code 中来解决这个问题?
基于诗歌文档:
同样,如果您有命令行工具,例如
pytest或black您可以使用以下命令运行它们poetry run pytest
使用黑色的建议方法是:
poetry run black myscript.py
Run Code Online (Sandbox Code Playgroud)
但是,如果我只使用,我没有注意到行为有任何差异
black myscript.py
Run Code Online (Sandbox Code Playgroud)
这两种方法有什么区别?
从现在开始,我将在所有 Python 项目中改用 Black。到目前为止,我一直使用 autopep8 作为我的自动格式化程序和 isort 来对我的导入进行排序。但在使用 Black 时,我发现 Black 单独完成了排序工作以及格式化我的代码。虽然我不介意 Black 对导入进行排序的方式,但我仍然想使用 isort 来处理我的导入,并且我希望 Black 只处理我的代码,而不是导入。那么,有没有办法将 Black 配置为仅格式化我的代码而不触及导入?顺便说一句,我正在使用 VS Code,因此有关如何在 VS Code 中应用配置的一些帮助也会有所帮助。谢谢!