isort支持此requirements.txt和Pipfile
项目描述
isort为您排序python导入,您无需手动操作。
isort是一个Python实用工具/库,用于按字母顺序排序导入,并自动将它们分隔到不同的部分。它提供了一个命令行实用程序、Python库以及各种编辑器的插件,以便快速排序所有导入。它目前支持Python 2.7 - 3.6,没有任何依赖项。
在isort之前
from my_lib import Object
print("Hey")
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("yo")
在isort之后
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
支持requirements.txt的isort安装
pip install isort[requirements]
支持Pipfile的isort安装
pip install isort[pipfile]
同时支持两种格式的isort安装
pip install isort[requirements,pipfile]
使用isort
从命令行:
isort mypythonfile.py mypythonfile2.py
或递归地
isort -rc .
这相当于
isort **/*.py
或在不应用它们的情况下查看建议的更改
isort mypythonfile.py --diff
最后,为了原子性地运行isort对项目,仅在它们不引入语法错误的情况下应用更改
isort -rc --atomic .
(注意:默认情况下此选项是禁用的,因为它防止isort针对使用不同Python版本编写的代码运行)
在Python内部:
from isort import SortImports
SortImports("pythonfile.py")
或
from isort import SortImports
new_contents = SortImports(file_contents=old_contents).output
在 Kate 中
ctrl+[
或
menu > Python > Sort Imports
安装 isort 的 Kate 插件
适用于 KDE 4.13+ / Pate 2.0+
wget https://raw.github.com/timothycrosley/isort/master/kate_plugin/isort_plugin.py --output-document ~/.kde/share/apps/kate/pate/isort_plugin.py
wget https://raw.github.com/timothycrosley/isort/master/kate_plugin/isort_plugin_ui.rc --output-document ~/.kde/share/apps/kate/pate/isort_plugin_ui.rc
wget https://raw.github.com/timothycrosley/isort/master/kate_plugin/katepart_isort.desktop --output-document ~/.kde/share/kde4/services/katepart_isort.desktop
适用于所有旧版本
wget https://raw.github.com/timothycrosley/isort/master/kate_plugin/isort_plugin_old.py --output-document ~/.kde/share/apps/kate/pate/isort_plugin.py
然后您需要重新启动 kate,并启用 Python 插件以及 isort 插件本身。
为您的首选文本编辑器安装 isort
已经编写了几个插件,使得可以在各种文本编辑器中使用 isort。您可以在 isort 维基 上找到它们的完整列表。此外,我将热情地接受包括其他文本编辑器插件在内的拉取请求,并在得知后添加它们的文档。
isort 的工作原理是什么?
isort 解析指定文件的全局级别导入行(try / except 块、函数等之外的导入),并将它们全部放在文件顶部,按导入类型分组。
未来
Python 标准库
第三方
当前 Python 项目
显式本地(在导入前加 .,如在:from . import x)
自定义单独部分(由配置文件中的 forced_separate 列表定义)
自定义部分(由配置文件中的 sections 列表定义)
在每一部分内部,导入项按字母顺序排序。isort 自动删除重复的 Python 导入,并将长 from 导入包裹到指定的行长度(默认为 79)。
isort 何时不会工作?
如果您遇到需要在顶级导入中间放置 try / except 块或您的导入顺序直接与优先级相关联的情况。
例如:在 Django 设置文件中,一种常见的做法是从各种设置文件导入 * 以形成一个新的设置文件。在这种情况下,如果任何导入的顺序发生变化,您实际上是在更改设置定义本身。
然而,您可以配置 isort 跳过这些文件 - 或者甚至强制某些导入到顶部。
配置 isort
如果您发现默认的 isort 设置对您的项目不起作用,isort 提供了多种调整行为的方法。
要为单个用户配置 isort,创建一个 ~/.isort.cfg 文件
[settings]
line_length=120
force_to_top=file1.py,file2.py
skip=file3.py,file4.py
known_future_library=future,pies
known_standard_library=std,std2
known_third_party=randomthirdparty
known_first_party=mylib1,mylib2
indent=' '
multi_line_output=3
length_sort=1
forced_separate=django.contrib,django.utils
default_section=FIRSTPARTY
no_lines_before=LOCALFOLDER
此外,您可以通过在项目的根目录下放置一个 .isort.cfg 文件来指定项目级别的配置。isort 将向上查找最多 25 个目录,从它运行的文件开始,以查找特定于项目的配置。
或者,如果您愿意,您可以在项目的 setup.cfg 或 tox.ini 文件中添加一个 isort 部分,并包含任何所需的设置。
然后,您可以通过使用命令行参数或通过向 SortImports 类传递覆盖值来覆盖这些设置中的任何一项。
自版本 3.0 以来,isort 支持使用以下标准语法定义的 editorconfig 文件:[http://editorconfig.org/](http://editorconfig.org/)
这意味着您可以在 *.py 部分下的 .editorconfig 文件中放置任何标准的 isort 配置参数,并将得到尊重。
有关 isort 设置及其含义的完整列表,请参阅 isort 维基。
多行输出模式
您会注意到“multi_line_output”设置上方。此设置定义了从导入超出行长度限制时的包裹方式,并具有 6 种可能的设置
0 - 网格
from third_party import (lib1, lib2, lib3,
lib4, lib5, ...)
1 - 垂直
from third_party import (lib1,
lib2,
lib3
lib4,
lib5,
...)
2 - 悬挂缩进
from third_party import \
lib1, lib2, lib3, \
lib4, lib5, lib6
3 - 垂直悬挂缩进
from third_party import (
lib1,
lib2,
lib3,
lib4,
)
4 - 悬挂网格
from third_party import (
lib1, lib2, lib3, lib4,
lib5, ...)
5 - 悬挂网格分组
from third_party import (
lib1, lib2, lib3, lib4,
lib5, ...
)
6 - NOQA
from third_party import lib1, lib2, lib3, ... # NOQA
或者,您可以设置 force_single_line 为 True (在命令行上为 -sl)并且每个导入都会单独出现在一行上
from third_party import lib1
from third_party import lib2
from third_party import lib3
...
注意:要更改常量缩进的显示方式,只需更改缩进属性,使用以下接受的格式:* 您想要的空格数量。例如:4 将导致标准4个空格缩进。* 制表符 * 带引号的文本字符串。
例如
" "
等同于 4。
对于使用括号的导入样式,您可以使用 include_trailing_comma 选项来控制是否在最后一个导入后包含尾随逗号(默认为 False)。
智能平衡多行导入
从 isort 3.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 选项。
自定义部分和排序
您可以使用 sections 选项更改部分顺序,从默认的
FUTURE,STDLIB,THIRDPARTY,FIRSTPARTY,LOCALFOLDER
更改为您的首选
sections=FUTURE,STDLIB,FIRSTPARTY,THIRDPARTY,LOCALFOLDER
您还可以定义自己的部分及其顺序。
示例
known_django=django
known_pandas=pandas,numpy
sections=FUTURE,STDLIB,DJANGO,THIRDPARTY,PANDAS,FIRSTPARTY,LOCALFOLDER
将创建两个新的部分,其中包含指定的已知模块。
no_lines_before 选项将防止所列部分通过空行与上一个部分分开。
示例
sections=FUTURE,STDLIB,THIRDPARTY,FIRSTPARTY,LOCALFOLDER
no_lines_before=LOCALFOLDER
将生成一个包含 FIRSTPARTY 和 LOCALFOLDER 模块的组合部分。
自动注释导入部分
一些项目更喜欢将导入部分具有独特标题,以便在视觉扫描时快速识别。isort 也可以自动化此过程。为此,只需为每个您希望自动注释的部分设置 import_heading_{section_name} 设置 - 到所需的注释。
例如
import_heading_stdlib=Standard Library
import_heading_firstparty=My Stuff
将产生以下输出
# Standard Library
import os
import sys
import django.settings
# My Stuff
import myproject.test
按导入长度排序
isort 还可以轻松地对导入进行排序,只需将 length_sort 选项设置为 True。这将产生以下输出样式
from evn.util import (
Pool,
Dict,
Options,
Constant,
DecayDict,
UnexpectedCodePath,
)
跳过导入处理(外部配置)
要使 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 -a "from __future__ import print_function" *.py
在 Kate 中
ctrl+]
或
menu > Python > Add Import
从多个文件中删除导入
isort 还使您能够轻松地从多个文件中删除导入,而无需担心其原始格式。
从命令行
isort -r "os.system" *.py
在 Kate 中
ctrl+shift+]
或
menu > Python > Remove Import
使用 isort 验证代码
--check-only 选项
isort 还可以用于通过运行 -c 来验证代码的正确格式。任何包含排序错误和/或格式错误的导入文件都将输出到 stderr。
isort **/*.py -c -vb
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.
这是一个很好的使用场景,例如使用 @acdha 的这个 pre-commit git 钩子
https://gist.github.com/acdha/8717683
这可以帮助确保项目中的代码质量达到一定水平。
Git 钩子
isort 提供了一个钩子函数,可以集成到您的 Git pre-commit 脚本中,在提交之前检查 Python 代码。
要使提交失败(严格模式)如果存在 isort 错误,请在 .git/hooks/pre-commit 中包含以下内容
#!/usr/bin/env python
import sys
from isort.hooks import git_hook
sys.exit(git_hook(strict=True))
如果您只想显示警告,但仍然允许提交,请在调用 git_hook 时不要使用 strict 参数。
Setuptools 集成
安装时,isort 会启用一个 setuptools 命令,用于检查您的项目声明的 Python 文件。
在命令行中运行 python setup.py isort 会检查 py_modules 和 packages 中列出的文件。如果发现任何警告,命令将退出并返回错误代码。
$ python setup.py isort
此外,为了使用户能够在不自行安装 isort 的情况下使用此命令,将 isort 添加到 setup() 的 setup_requires 中,如下所示:
setup(
name="project",
packages=["project"],
setup_requires=[
"isort"
]
)
为什么使用 isort?
isort 简单代表导入排序。它最初被称为“sortImports”,但是因为经常输入额外的字符,我意识到 camelCase 并非 Python 风格。
我编写 isort 是因为在一个我曾经工作的组织中,经理有一天决定所有代码都必须有按字母顺序排序的导入。代码库很大——他意思是让我们手动完成。然而,作为一个程序员——我太懒了,不愿意花8小时无意义地执行一个功能,但又不至于懒到不愿意花16小时来自动化它。我得到了开源 sortImports 的许可,于是就有了现在这个样子 :)
感谢您,希望您觉得 isort 有用!
~Timothy Crosley
项目详情
isort-plus-5.1.3.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ec7b3b7c090c51a266811bc540d6175d9c33633cdf08f71992d189af8d899833 |
|
MD5 | 6a9b062b18f17b1b794db4e9b702021f |
|
BLAKE2b-256 | 44bc7e0b8d242450a6517f22f1ca60069c4807e61894293ccdafe4d291a4899e |