Python 修复导入
自动分割和排序您的 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
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
除非适用法律要求或书面同意,否则根据许可证分发软件时,软件按“原样”基础分发,不提供任何明示或暗示的保证或条件。请参阅许可证了解具体语言的许可权限和限制。