跳转到主要内容

isort支持此requirements.txt和Pipfile

项目描述

isort
PyPI version Build Status Coverage License Join the chat at https://gitter.im/timothycrosley/isort

isort为您排序python导入,您无需手动操作。

isort是一个Python实用工具/库,用于按字母顺序排序导入,并自动将它们分隔到不同的部分。它提供了一个命令行实用程序、Python库以及各种编辑器的插件,以便快速排序所有导入。它目前支持Python 2.7 - 3.6,没有任何依赖项。

Example Usage

在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.cfgtox.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_lineTrue (在命令行上为 -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_modulespackages 中列出的文件。如果发现任何警告,命令将退出并返回错误代码。

$ 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 (62.4 kB 查看哈希值)

上传时间

由以下机构支持: