ctrl+shift+p filters: :st2 :st3 :win :osx :linux
浏览

Python 修复导入

gsemet ST3

自动分割和排序您的 Python 脚本中的导入语句

详情

安装

  • 总计 19K
  • Win 9K
  • Mac 4K
  • Linux 6K
8 月 6 日 8 月 5 日 8 月 4 日 8 月 3 日 8 月 2 日 8 月 1 日 7 月 31 日 7 月 30 日 7 月 29 日 7 月 28 日 7 月 27 日 7 月 26 日 7 月 25 日 7 月 24 日 7 月 23 日 7 月 22 日 7 月 21 日 7 月 20 日 7 月 19 日 7 月 18 日 7 月 17 日 7 月 16 日 7 月 15 日 7 月 14 日 7 月 13 日 7 月 12 日 7 月 11 日 7 月 10 日 7 月 9 日 7 月 8 日 7 月 7 日 7 月 6 日 7 月 5 日 7 月 4 日 7 月 3 日 7 月 2 日 7 月 1 日 6 月 30 日 6 月 29 日 6 月 28 日 6 月 27 日 6 月 26 日 6 月 25 日 6 月 24 日 6 月 23 日 6 月 22 日
Windows 0 1 1 1 0 2 2 0 2 2 1 2 0 1 1 1 1 0 2 1 1 1 0 0 0 0 3 0 1 1 0 2 1 2 2 1 1 0 2 1 1 3 0 0 0 2
Mac 1 1 1 1 0 1 0 0 2 0 0 0 1 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0
Linux 0 1 2 0 1 0 0 0 0 1 1 0 0 1 0 5 4 0 0 0 0 0 5 0 0 0 0 1 0 1 1 0 2 0 0 0 0 0 0 0 2 0 0 1 0 0

README

源代码
raw.githubusercontent.com

Python 修复导入

Python Fix Imports 是一个 Sublime Text 3 插件,可以自动重新排列您的 Python 脚本中的导入语句。请阅读 "Rationale" 部分以获取更多信息。

该插件来自为 Buildbot 项目编写的脚本,旨在帮助开发者确保他们在 Python 文件中正确组织导入语句。

原因

每个 Python 脚本的开始部分很可能是整个文件生命周期中变化最多的代码部分。导入语句会不断添加、删除、重新组织。

感谢分布式版本控制系统(如 Git),许多人可以很容易地同时处理同一个文件。当每个开发者添加他们的修改时,导入语句的管理可能引起冲突。

当我们设置了多个分支的自动合并时,我们真正开始需要自动重新组织脚本。大多数时候,冲突被发现是在导入行。

以下是一些 fiximports 脚本强制执行的规则

规则 1

每个导入语句只导入一个方法、类或模块。

是的

from abc import dce
from abc import fgh

from abc import dce, fgh
from abc import (dce,
                 fgh)
from abc import dce, \
                fgh

fiximports 自动分割使用逗号的导入语句。不支持反斜杠和括号。

奖励:假设您想要知道 "object_name" 对象在哪里以及如何导入。这项规则确保您将始终找到以下搜索模式的导入出现:import object_name。不需要使用正则表达式,只需 ``import `` + 您要查找的内容。

规则 2

导入语句按空行分隔的块组织。每个块按字母顺序排序。

这消除了在给定块中导入行放置的任何歧义。当两个不同的开发者想要在同一个文件中添加相同的导入时,该行的位置将是相同的,因此合并(如果有的话)将非常明显。

是的

from abc import aaaa
from abc import bbbb
from abc import cccc

from abc import bbbb
from abc import aaaa
from abc import cccc

排序仅在给定的块上执行,如果在任何原因下需要将一个导入语句放置在另一个之后,只需添加一个空行。

fiximports可以一次性对所有导入语句进行排序(保留'group'分割)。

在某些项目中,我倾向于强制执行组本身的排序

  • 首先是标准库导入

    import json
    import login
    import os
    
  • 形式为 from ... import 的标准库

    from textwrap import dedent
    from twisted.internet import defer
    
  • 具有完整名称的项目模块(始终使用 from __future__ import absolute_import)

    from myproject.the.module.name import ClassName
    from myproject.the.other.module.name import TheOtherClassName
    

示例

让我们看看以下代码

import datetime
import collections

from io import BytesIO, UnsupportedOperation
from .hooks import default_hooks
from .structures import CaseInsensitiveDict

from .auth import HTTPBasicAuth
from .cookies import cookiejar_from_dict, get_cookie_header
from .packages.urllib3.fields import RequestField
from .packages.urllib3.filepost import encode_multipart_formdata
from .packages.urllib3.util import parse_url
from .packages.urllib3.exceptions import DecodeError, ReadTimeoutError, ProtocolError, LocationParseError
from .exceptions import HTTPError, MissingSchema, InvalidURL, ChunkedEncodingError, ContentDecodingError, ConnectionError, StreamConsumedError
from .utils import guess_filename, get_auth_from_url, requote_uri, stream_decode_response_unicode, to_key_val_list, parse_header_links, iter_slices, guess_json_utf, super_len, to_native_string
from .compat import cookielib, urlunparse, urlsplit, urlencode, str, bytes, StringIO, is_py2, chardet, json, builtin_str, basestring
from .status_codes import codes

这个插件自动这样做

import collections
import datetime

from .hooks import default_hooks
from .structures import CaseInsensitiveDict
from io import BytesIO
from io import UnsupportedOperation

from .auth import HTTPBasicAuth
from .compat import StringIO
from .compat import basestring
from .compat import builtin_str
from .compat import bytes
from .compat import chardet
from .compat import cookielib
from .compat import is_py2
from .compat import json
from .compat import str
from .compat import urlencode
from .compat import urlsplit
from .compat import urlunparse
from .cookies import cookiejar_from_dict
from .cookies import get_cookie_header
from .exceptions import ChunkedEncodingError
from .exceptions import ConnectionError
from .exceptions import ContentDecodingError
from .exceptions import HTTPError
from .exceptions import InvalidURL
from .exceptions import MissingSchema
from .exceptions import StreamConsumedError
from .packages.urllib3.exceptions import DecodeError
from .packages.urllib3.exceptions import LocationParseError
from .packages.urllib3.exceptions import ProtocolError
from .packages.urllib3.exceptions import ReadTimeoutError
from .packages.urllib3.fields import RequestField
from .packages.urllib3.filepost import encode_multipart_formdata
from .packages.urllib3.util import parse_url
from .status_codes import codes
from .utils import get_auth_from_url
from .utils import guess_filename
from .utils import guess_json_utf
from .utils import iter_slices
from .utils import parse_header_links
from .utils import requote_uri
from .utils import stream_decode_response_unicode
from .utils import super_len
from .utils import to_key_val_list
from .utils import to_native_string

确实,文件的开始部分更加详细,但合并会更容易(因为当我们切换到这个范式时,在这些行上几乎没有冲突)。

安装

为了避免依赖关系,所有必需的模块已包含在包中。

使用 Sublime Package Control

  • 使用 cmd+shift+P 快捷键,然后选择 Package Control: Install Package
  • 查找 Python Fix Imports 并安装它。

使用 GitHub 上的 Git 仓库

  • 打开终端,移动到 Packages 目录(指使用 Preferences > 查看包... 菜单打开的文件夹)。

  • 然后在终端输入

    git clone https://github.com/Stibbons/python-fiximports python_fiximports
    

设置

全局设置

您可以在偏好设置菜单中找到设置(偏好设置 > 包设置 > Python Fix Imports)。

{
    // Automatically fix the imports on save
    "autofix_on_save": false,

    // Enable or disabl split of every imports in own line (one object import per line)
    "split_import_statements": true,

    // Enable or disabl sorting or import in its own group
    "sort_import_statements": true,
}

通过编辑用户设置,您的个人偏好将在插件升级中得到保护。

按项目设置

{
    "settings": {
        "python_fiximports": {
            "autofix_on_save": true
        }
    }
}

用法

格式应用于整个文档。

使用键盘

  • GNU/Linux: ctrl+alt+shift+i
  • Windows: ctrl+alt+shift+i
  • OSX: ctrl+command+shift+i

侧边栏

右键单击文件(或文件夹)

在保存时

如果设置了以下设置:autofix_on_save,则在保存时自动重新组织导入。

命令面板

打开命令面板并选择以下选项之一

Python Fix Imports: 立即在当前文件中执行 Fix imports。

启用 Python Fix Imports (直到重启):切换到使 autofix_on_save 选项启用的总设置,直到 Sublime 重启(覆盖项目和全局设置)。

禁用 Python Fix Imports (直到重启):切换到使 autofix_on_save 选项禁用的总设置,直到 Sublime 重启(覆盖项目和全局设置)。

禁用当前文件的 Python Fix Imports (直到重启):独立于全局设置 autofix_on_save 禁用当前文件中导入语句的自动修复。

启用当前文件的 Python Fix Imports (直到重启):独立于全局设置 autofix_on_save 启用当前文件中导入语句的自动修复。

提示: 打开命令面板(ctrl+shift+P),并输入 Fix... 高亮显示完整标题。

许可证

版权 2015 Semet Gaetan <[email protected]>

根据 Apache License,版本 2.0(“许可证”);除了遵守许可证规定外,不得使用此文件。可以从以下地址获取许可证副本:

http://www.apache.org/licenses/LICENSE-2.0

除非适用法律要求或书面同意,否则根据许可证分发软件时,软件按“原样”基础分发,不提供任何明示或暗示的保证或条件。请参阅许可证了解具体语言的许可权限和限制。