isort 是一个Python的实用程序/库,它会按字母顺序对导入(import)的库进行排序,并自动分组。它提供多种实用方式,包括命令行、Python库和VSCode、Pycharm插件快速分拣你所有的import。
它基于Python 3.6+实现,但也支持格式化Python 2代码
- Try isort now from your browser!
- Using black? See the isort and black compatibility guide.
- isort has official support for pre-commit!
在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_wrapping
至True
在您的配置中,或将-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或将其配置为自动添加/删除导入
使用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代码
Setuptools集成
安装后,isort将启用setuptools
用于检查项目声明的Python文件的命令
把消息传出去
将此徽章放在存储库的顶部,让其他人知道您的项目使用了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
contactTidelift将协调修复和披露
为什么是伊索尔?
isort简单地表示导入排序。它最初名为“sortImports”,但是我厌倦了键入额外的字符,并意识到CamelCase并不是巨蟒
我之所以编写isort,是因为在我曾经工作过的一个组织中,经理有一天来了,他决定所有代码都必须按字母顺序对导入进行排序。代码库很大–他的意思是让我们手工完成。然而,作为一名程序员-我太懒了,不会花8个小时盲目地执行一个函数,但也不会太懒,不会花16个小时让它自动化。我获得了开放源码sortImports的许可,我们在这里:)
Get professionally supported isort with the Tidelift
Subscription
对isort的专业支持是作为Tidelift
SubscriptionTidelift为软件开发团队提供了购买和维护软件的单一来源,并由最了解该技术的专家提供专业级别保证,同时与现有工具无缝集成
谢谢,我希望你觉得isort有用!
~蒂莫西·克罗斯利