0

0

Python isort 配置:实现基于行长度的条件式多行导入格式化

DDD

DDD

发布时间:2025-09-29 14:23:00

|

925人浏览过

|

来源于php中文网

原创

Python isort 配置:实现基于行长度的条件式多行导入格式化

本教程详细介绍了如何配置 isort 和 VSCode,以实现 Python 导入语句的智能格式化。通过在 pyproject.toml 文件中设置 isort 的 multi_line_output 和 force_grid_wrap 参数,并相应调整 VSCode 的 settings.json,可以确保导入语句仅在超出指定行长度限制时才自动拆分为多行,从而保持代码的简洁性和可读性。

1. 理解 isort 的导入格式化行为

isort 是一个流行的 python 库,用于自动排序和格式化导入语句。它提供了多种输出样式(multi_line_output),允许开发者根据团队规范或个人偏好来调整导入的显示方式。然而,在某些情况下,isort 可能会在导入语句未达到指定行长度限制时,也将其自动拆分为多行,这可能与预期行为不符。

例如,原始导入语句可能如下:

import pandas as pd
from tableau_api_lib.utils.querying import get_datasources_dataframe, get_workbooks_dataframe

在某些默认或不当配置下,isort 可能会将其格式化为:

import pandas as pd
from tableau_api_lib.utils.querying import (
    get_datasources_dataframe,
    get_workbooks_dataframe,
)

而我们期望的是,只有当导入语句的长度超过设定的 line_length(例如 120 字符)时,才将其拆分为多行。

2. 通过 pyproject.toml 精细化 isort 配置

为了实现基于行长度的条件式多行导入格式化,我们需要在项目的 pyproject.toml 文件中为 isort 进行详细配置。pyproject.toml 是现代 Python 项目中管理工具配置的首选方式,它能确保项目内所有开发者和自动化工具(如 GitHub Actions)使用一致的格式化规则。

立即学习Python免费学习笔记(深入)”;

以下是推荐的 isort 配置示例:

[tool.isort]
line_length = 120
multi_line_output = 3
include_trailing_comma = true
force_grid_wrap = 0
use_parentheses = true
ensure_newline_before_comments = true

各项配置的解释如下:

  • line_length = 120: 设置单行代码的最大字符长度为 120。isort 将尝试在此限制内保持导入语句为单行。
  • multi_line_output = 3: 指定多行导入的输出样式为“垂直悬挂缩进”(Vertical Hanging Indent)。这是 black 格式化器所采用的风格,它在导入语句需要拆分时,将每个导入项放置在新行上,并使用括号包裹。
    • 例如:
      from some_module import (
          item_one,
          item_two,
      )
  • include_trailing_comma = true: 在多行导入的最后一个元素后添加逗号。这有助于版本控制系统中的差异对比,并允许更灵活地添加或删除导入项。
  • force_grid_wrap = 0: 这是实现条件式多行格式化的关键。 将此值设置为 0 意味着 isort 不会强制将导入语句以网格(grid)形式(即每个导入项都独占一行)进行包装,除非它们超出了 line_length 限制。如果设置为 1 或更大,isort 会尝试在达到指定数量的导入项后强制换行,无论行长度如何。
  • use_parentheses = true: 强制在多行导入中使用括号。这与 multi_line_output = 3 样式配合使用。
  • ensure_newline_before_comments = true: 确保在导入语句后的注释前有一个新行,以提高可读性。

通过这些配置,isort 将只在导入语句的长度超过 120 字符时,才将其拆分为 multi_line_output = 3 样式。

3. 配置 VSCode 以配合 isort

为了让 VSCode 在保存文件时自动应用上述 isort 配置,我们需要调整 settings.json 文件。关键在于让 VSCode 知道 isort 的配置信息来自 pyproject.toml,而不是直接在 VSCode 中重复定义。

Kacha
Kacha

KaCha是一款革命性的AI写真工具,用AI技术将照片变成杰作!

下载

请更新您的 VSCode settings.json 文件,如下所示:

{
    "editor.formatOnSave": true,
    "editor.defaultFormatter": "ms-python.python",
    "[python]": {
        "editor.codeActionsOnSave": {
            "source.organizeImports": true
        }
    }
}

各项配置的解释如下:

  • "editor.formatOnSave": true: 启用在保存文件时自动格式化。
  • "editor.defaultFormatter": "ms-python.python": 设置 Python 文件的默认格式化程序为 VSCode Python 扩展提供的内置格式化功能。请注意,如果您同时使用 black 作为主要的代码格式化工具,并希望它作为默认格式化器,则此项可能需要设置为 "ms-python.black-formatter"。然而,对于 isort 的导入组织功能,source.organizeImports 是关键。
  • "[python]": { ... }: 针对 Python 文件特定的设置。
  • "editor.codeActionsOnSave": { "source.organizeImports": true }: 这是触发 isort 工作的核心。 当保存 Python 文件时,VSCode 会执行 source.organizeImports 操作。这个操作会调用项目中安装的 isort 工具,并根据 pyproject.toml 中的配置来组织和格式化导入语句。

重要提示:

  • 请确保移除 settings.json 中任何与 isort.args 相关的配置(例如 "isort.args": ["--line-length", "120", "--profile", "black"]),因为这些硬编码的参数会覆盖 pyproject.toml 中的设置。让 isort 自动发现并使用 pyproject.toml 是最佳实践。
  • 确保您的项目虚拟环境中已安装 isort。如果您使用 poetry 或 pipenv 等工具管理依赖,请确保 isort 已添加到项目的依赖中。

4. 效果验证

经过上述配置后,当您在 VSCode 中保存 Python 文件时,isort 将按照 pyproject.toml 中定义的规则进行导入格式化。

  • 对于长度未超过 120 字符的导入语句:

    from tableau_api_lib.utils.querying import get_datasources_dataframe, get_workbooks_dataframe

    它将保持在单行,因为 force_grid_wrap = 0 阻止了不必要的换行。

  • 对于长度超过 120 字符的导入语句: 它将被自动拆分为多行,并采用 multi_line_output = 3 定义的垂直悬挂缩进样式。

这种配置方法不仅在本地开发环境中提供了智能的格式化体验,还能通过在 CI/CD 流水线(如 GitHub Actions)中使用 isort --check . 命令,确保整个团队的代码库都遵循相同的导入格式化标准。

总结

通过在 pyproject.toml 文件中精确配置 isort 的 line_length、multi_line_output 和 force_grid_wrap 等参数,并配合 VSCode 的 source.organizeImports 功能,我们能够实现 Python 导入语句的条件式多行格式化。这不仅提高了代码的可读性,也确保了团队内部代码风格的一致性,从而提升了开发效率和代码质量。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

455

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

546

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

334

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

82

2025.09.10

length函数用法
length函数用法

length函数用于返回指定字符串的字符数或字节数。可以用于计算字符串的长度,以便在查询和处理字符串数据时进行操作和判断。 需要注意的是length函数计算的是字符串的字符数,而不是字节数。对于多字节字符集,一个字符可能由多个字节组成。因此,length函数在计算字符串长度时会将多字节字符作为一个字符来计算。更多关于length函数的用法,大家可以阅读本专题下面的文章。

954

2023.09.19

github中文官网入口 github中文版官网网页进入
github中文官网入口 github中文版官网网页进入

github中文官网入口https://docs.github.com/zh/get-started,GitHub 是一种基于云的平台,可在其中存储、共享并与他人一起编写代码。 通过将代码存储在GitHub 上的“存储库”中,你可以: “展示或共享”你的工作。 持续“跟踪和管理”对代码的更改。

4126

2026.01.21

vscode
vscode

VS Code(Visual Studio Code)是一款免费、开源的跨平台代码编辑器,由微软开发和维护。它被广泛用于软件开发和编程,支持多种编程语言和框架。VS Code 同时提供了丰富的功能和扩展性,使开发者可以高效地编写、编辑和调试代码。

628

2023.06.30

vscode怎么运行代码
vscode怎么运行代码

vscode是一个运行于MacOS X、Windows和Linux之上的,针对于编写现代Web和云应用的跨平台源代码编辑器;vscode免费而且功能强大,对JavaScript和NodeJS的支持非常好,自带很多功能,例如代码格式化,代码智能提示补全、Emmet插件等。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

228

2023.07.21

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 4.9万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号