标签归档:formatter

Isort-用于对import进行排序的Python实用程序/库

isort 是一个Python的实用程序/库,它会按字母顺序对导入(import)的库进行排序,并自动分组。它提供多种实用方式,包括命令行、Python库和VSCode、Pycharm插件快速分拣你所有的import。

它基于Python 3.6+实现,但也支持格式化Python 2代码

在isort之前:

from my_lib import Object
import os
from my_lib import Object3
from my_lib import Object2
import sys
from third_party import lib15, lib1, lib2, lib3, lib4, lib5, lib6, lib7, lib8, lib9, lib10, lib11, lib12, lib13, lib14
import sys
from __future__ import absolute_import
from third_party import lib3
print("Hey")
print("yo")

排序后:

from __future__ import absolute_import import os
import sys from third_party import (lib1, lib2, lib3, lib4, lib5, lib6, lib7, lib8,
                        lib9, lib10, lib11, lib12, lib13, lib14, lib15)

from my_lib import Object, Object2, Object3 
print("Hey")
print("yo")

安装isort

安装isort非常简单,只需:

pip install isort

安装isort,并提供Requirements.txt支持:

pip install isort[requirements_deprecated_finder]

安装支持管道文件的isort:

pip install isort[pipfile_deprecated_finder]

安装支持两种格式的isort:

pip install isort[requirements_deprecated_finder,pipfile_deprecated_finder]

使用isort

从命令行

要在特定文件上运行,请执行以下操作:

isort mypythonfile.py mypythonfile2.py

要递归应用,请执行以下操作:

isort .

如果globstar已启用,isort .相当于:

isort **/*.py

要查看建议的更改而不应用它们,请执行以下操作:

isort mypythonfile.py --diff

最后,要对项目自动运行isort,仅在未引入语法错误的情况下应用更改:

isort --atomic .

(注意:这在默认情况下是禁用的,因为它阻止isort针对使用不同版本的Python编写的代码运行。)

从Python内部

import isort
isort.file(“pythonfile.py”)

或者:

import isort
sorted_code = isort.code(“import b\nimport a\n)

为您首选的文本编辑器安装isort

已经编写了几个插件,可以在各种文本编辑器中使用isort。您可以找到它们的完整列表on the isort
wiki
此外,我将热情地接受包括其他文本编辑器插件的Pull请求,并在收到通知时为它们添加文档

多行输出模式

您将注意到上面的“MULTI_LINE_OUTPUT”设置。此设置定义当从导入扩展到超过line_length限制并具有12 possible settings

压痕

要更改常量缩进的显示方式-只需使用以下可接受的格式更改缩进属性:

  • 您想要的空间数。例如:4将导致标准的4空格缩进
  • 选项卡
  • 带引号的逐字字符串

例如:

"    "

等于4

对于使用圆括号的导入样式,可以控制是否在上次导入后使用include_trailing_comma选项(默认为False)

智能平衡多行导入

从isort3.1.0开始,添加了对平衡多行导入的支持。启用此功能后,isort会将导入长度动态更改为生成最平衡格网的长度,同时保持在定义的最大导入长度以下

示例:

from __future__ import (absolute_import, division,
                        print_function, unicode_literals)

将会产生,而不是:

from __future__ import (absolute_import, division, print_function,
                        unicode_literals)

要启用此设置,请执行以下操作balanced_wrappingTrue在您的配置中,或将-e选项添加到命令行实用程序中

自定义节和排序

isort提供了配置选项来更改导入在各个部分中的组织、排序或分组方式的几乎每一个方面

Click here有关所有这些选项的概述,请参阅

跳过导入处理(配置之外)

要使isort忽略单个导入,只需在包含文本的导入行末尾添加注释isort:skip

import module  # isort:skip

或者:

from xyz import (abc,  # isort:skip
                 yo,
                 hey)

要使isort跳过整个文件,只需添加isort:skip_file添加到模块的文档字符串:

""" my_module.py
    Best module ever

   isort:skip_file
"""

import b
import a

从多个文件添加或删除导入

可以运行isort或将其配置为自动添加/删除导入

See a complete guide here.

使用isort验证代码

这个--check-only选项

也可以使用isort来验证代码的格式是否正确,方法是使用-c任何包含错误排序和/或格式化导入的文件都将输出到stderr

isort **/*.py -c -v

SUCCESS: /home/timothy/Projects/Open_Source/isort/isort_kate_plugin.py Everything Looks Good!
ERROR: /home/timothy/Projects/Open_Source/isort/isort/isort.py Imports are incorrectly sorted.

可以使用它的一个很好的地方是使用预先提交的git钩子,比如@acdha提供的这个钩子:

https://gist.github.com/acdha/8717683

这有助于在整个项目中确保一定级别的代码质量

Git钩子

isort提供了一个钩子函数,该函数可以集成到Git预提交脚本中,以便在提交之前检查Python代码

More info here.

Setuptools集成

安装后,isort将启用setuptools用于检查项目声明的Python文件的命令

More info here.

把消息传出去

将此徽章放在存储库的顶部,让其他人知道您的项目使用了isort

对于Readme.md:

[![Imports: isort](https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat&labelColor=ef8336)](https://pycqa.github.io/isort/)

或readme.rst:

.. image:: https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat&labelColor=ef8336
    :target: https://pycqa.github.io/isort/

安全联系信息

若要报告安全漏洞,请使用Tidelift security
contact
Tidelift将协调修复和披露

为什么是伊索尔?

isort简单地表示导入排序。它最初名为“sortImports”,但是我厌倦了键入额外的字符,并意识到CamelCase并不是巨蟒

我之所以编写isort,是因为在我曾经工作过的一个组织中,经理有一天来了,他决定所有代码都必须按字母顺序对导入进行排序。代码库很大–他的意思是让我们手工完成。然而,作为一名程序员-我太懒了,不会花8个小时盲目地执行一个函数,但也不会太懒,不会花16个小时让它自动化。我获得了开放源码sortImports的许可,我们在这里:)


Get professionally supported isort with the Tidelift
Subscription

对isort的专业支持是作为Tidelift
Subscription
Tidelift为软件开发团队提供了购买和维护软件的单一来源,并由最了解该技术的专家提供专业级别保证,同时与现有工具无缝集成


谢谢,我希望你觉得isort有用!

~蒂莫西·克罗斯利

Black-不折不扣的Python代码格式化程序

“你喜欢什么颜色都行。”

黑色是不折不扣的Python代码格式化程序。通过使用它,您同意放弃对手动格式化细节的控制。作为回报,黑色为您提供速度、决定论和从pycodestyle对格式化喋喋不休。你将为更重要的事情节省时间和精力。

不管您正在阅读的是什么项目,被涂黑的代码看起来都是一样的。格式在一段时间后会变得透明,您可以将注意力放在内容上

黑色通过产生尽可能小的差异,使代码审查速度更快

现在使用Black Playground看这场比赛PyCon 2019 talk了解更多信息


Read the documentation on ReadTheDocs!


安装和使用

安装

黑色可以通过运行以下命令来安装pip install black它需要运行Python 3.6.2+。如果还想格式化Python 2代码,请使用安装pip install black[python2]

如果你不能等最新的热度要从GitHub安装,请使用:

pip install git+git://github.com/psf/black

用法

要立即开始使用合理的默认值,请执行以下操作:

black {source_file_or_directory}

你可以跑黑色如果将其作为脚本运行不起作用,则将其作为程序包运行:

python -m black {source_file_or_directory}

有关更多信息,请参阅我们的文档:

注意:这是测试版产品

黑色已经是很久以前的事了successfully used许多项目,大大小小的。Black有一个全面的测试套件,具有高效的并行测试,以及我们自己的自动格式化和并行持续集成运行器。然而,黑色仍然是测试版。在一段时间内,情况可能会不稳定。这是由“Beta”Trove分类器以及版本号中的“b”明确表示的。这对你来说意味着在格式化程序变得稳定之前,您应该预期将来会更改一些格式这就是说,没有计划进行重大的风格改变,主要是对bug报告的响应

此外,作为减慢处理的安全措施,黑色将检查重新格式化的代码是否仍然生成与原始代码有效等效的有效AST(请参阅Pragmatism部分获取详细信息)。如果你感到自信,使用--fast

这个黑色代码样式

黑色是一个符合PEP8标准的固执己见的格式化程序。黑色就地重新格式化整个文件。样式配置选项是故意限制的,很少添加。它不考虑以前的格式(请参见Pragmatism(对于例外情况)

我们的文档涵盖了当前黑色代码样式,但也记录了对其的计划更改。它们都值得一看:

在提交问题之前,请参阅本文档。看起来像是窃听器的行为可能是故意的

实用主义

早期版本的黑色在某些方面曾经是专制主义的。他们模仿它的最初作者。这在当时是不错的,因为它使实现更简单,而且用户也不多。报道的边缘病例不多。作为一个成熟的工具,黑色确实对它本来持有的规则做出了一些例外

请在提交问题之前参考本文档,就像上面的文档一样。看起来像是窃听器的行为可能是故意的

配置

黑色控件读取其命令行选项的特定于项目的默认值。pyproject.toml文件。这对于指定自定义--include--exclude/--force-exclude/--extend-exclude项目的模式

您可以在我们的文档中找到更多详细信息:

如果您正在寻找更一般的配置文档,请执行以下操作:

PRO-TIP:如果您问自己“我需要配置什么吗?”答案是否定的。黑色都是关于合理的违约。应用这些缺省值将使您的代码与许多其他代码兼容黑色格式化项目

使用方

以下值得注意的开源项目值得信任黑色实施一致的代码样式:pytest、毒性、金字塔、Django通道、假设、attrs、SQLAlChemy、诗歌、Pypa应用程序(Warehouse、Bandersnatch、Pipenv、viralenv)、Pandas、Pillow、Every Datadog Agent Integration、Home Assistant、Zulip

以下组织使用黑色:Facebook,Dropbox,Mozilla,Quora,Duolingo

我们有没有错过什么人?让我们知道

推荐信

迈克·拜耳author of SQLAlchemy

在我整个编程生涯中,我想不出有哪一个工具能通过它的引入给我带来更大的生产力提升。我现在可以进行大约1%的按键重构,这是以前我们无法格式化代码时所需要的

尘土飞扬的菲利普斯writer

黑色固执己见,所以你不必

希内克·施拉瓦克creator of attrs,Twisted和CPython的核心开发者:

我想要的圣诞礼物就是一个不会让人讨厌的自动格式化程序!

卡尔·迈耶Django核心开发者:

至少名字是好的

肯尼思·赖茨(Kenneth Reitz),创建者requestspipenv

这极大地改进了我们代码的格式。万分感谢!

展现你的风格

使用项目自述文件中的徽章。md:

[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)

使用Readme.rst中的徽章:

.. image:: https://img.shields.io/badge/code%20style-black-000000.svg
    :target: https://github.com/psf/black

如下所示:

许可证

麻省理工学院

贡献

欢迎!很高兴看到你愿意把项目做得更好。您可以通过阅读以下内容开始:

您也可以查看投稿文档的睡觉或者与开发者对话:

更改日志

木头已经变得相当长了。它移到了自己的文件中

看见CHANGES

作者

现在的作者名单相当长,所以它在自己的档案里

看见AUTHORS.md

行为规范

所有参加这次活动的人黑色项目,特别是在问题跟踪器、拉取请求和社交媒体活动中,应该尊重他人,更普遍地遵循Python Community Code of Conduct

同时,幽默也受到鼓励。事实上,基本熟悉Monty Python的飞行马戏团是可以预期的。我们不是野蛮人

如果你真的需要打人耳光,边跳舞边和鱼做