使用isort和autopep8统一代码风格

news2024/11/16 19:40:14

前言

今天和大家分享一篇关于python代码风格统一的方法。我自己之前有使用过,但都是使用公司现成的,没有自己动手去实操,所以为了一探究竟,今天专门花了一点时间去研究,这个过程还挺顺利的,这里我将这个过程分享给大家。

我这里主要分享python中的导包规范和内容规范统一的方法,分别使用到的两个工具是isort和autopep8,当然这样的工具有很多,至于为什么选择这两个工具:第一导包工具的格式化我只查到了isort这一个,第二autopep8是根据pep 8这个提议开发的,相对较官方。同时我也会分享如何在git中如何使用这两个工具,让你每次都能提交规范统一的代码,这里主要会用到pre- commit这个工具。

isort

isort的官方介绍:isort is a Python utility / library to sort imports alphabetically, and automatically separated into sections and by type. It provides a command line utility, Python library and plugins for various editors to quickly sort all your imports. It requires Python 3.7+ to run but supports formatting Python 2 code too.

通过官方介绍我们可以知道对我们有用的几点:

  • 1.它是按照字母顺序进行排序的,同时也会根据导入的类型(内置库,第三方库,自己的库)来进行分类排序
  • 2支持命令行(也能内嵌代码)
  • 3.python版本要求3.7+,python2的仅支持格式化(isort既支持导包格式化也支持内容格式化)

排序的规则

根据包的来源不同,我们可以分为内置库,第三方包和自己编写的库,按照导包的风格,我们可以分为from xxx import xxximport xxx两种风格。因此排序规则为:首先按照包的来源,然后按照导入风格,最后根据报名来进行排序,排序后的代码样子长成下面这个样子:

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")

使用

安装
pip install isort
命令行使用

官方的例子很好,我这里就直接贴出官方的例子来:

image.9814d010bced11ee9de617490ed73bd0.png

autopep8

上面使用isort进行了导包的规范,现在来使用autopep8来进行代码内容的规范。
它好像没有官网,但是有官方的github仓库:传送门。

官方介绍:autopep8 automatically formats Python code to conform to the PEP 8 style guide. It uses the pycodestyle utility to determine what parts of the code needs to be formatted. autopep8 is capable of fixing most of the formatting issues that can be reported by pycodestyle.
通过官方文档的介绍我们可以知道信息是:autoepep8主要实现了将代码格式转成pep8的格式。它借助了pycodestyle来检查哪些需要转化,然后它自己再去执行这些转化。具体的pep8规范大家可以参考上面的链接。

使用

安装
pip install autopep8
命令行使用

它的使用也和isort一样方便:

autopep8 filename

它的配置项有如下这些:
image.a3792c0ebcf111ee9de617490ed73bd0.png
其中有一个需要提到的配置就是这个–max-line-length n,它是用来限制每一行代码的最大长度的,默认是79个字符的长度,也就是超过了79个字符就不满足它的要求,会进行格式化。但是实际上我个人觉得79有点太短了,格式化之后反而会看着不舒服,不知道大家会不会有这个感觉。

git提交时自动格式化

isort和autopep8都支持命令行和代码内(很少这样使用)实现,上面主要分享了命令行内的使用方法,但是它也支持在git commit时自动格式化,这样就不需要我们每次写完代码再命令行输入命令进行格式化了。这里需要使用到另外一个工具,它就是:pre-commit,官方文档介绍如下:
image.3f38e060bcf411ee9de617490ed73bd0.png
其中红框是我认为比较重要的点:

  • 1.它会在每次commit的时候运行一些hooks(这里的hooks可以理解成上面的小工具)
  • 2.它的目的是让我们专注在内容上,而不是样式(提升效率)

使用

安装
pip install pre-commit
配置

配置的步骤主要有两点:

  1. 1.在项目的根目录下新建一个yaml文件,文件名为:.pre-commit-config.yaml
  2. 2.配置内容,格式如下所示。如果复制粘贴嫌太麻烦的话可以使用pre-commit sample-config > .pre-commit-config.yaml命令,它会生成一个样本配置到指定的文件。

image.e80bc272bd9711ee9de617490ed73bd0.png

知道了如上的配置规则后,配置isort和autopep8就容易很多了!一般官网也会给出相应的配置,isort的配置如下(参考链接):
(这里有一点需要注意的是:官方链接给出的样例中版本指定的是5.11.2,但是这个可能会有问题,指定更高的版本就可以了。)

-   repo: https://github.com/pycqa/isort
    rev: 5.12.0
    hooks:
      - id: isort
        name: isort (python)

autopep8的配置与isort类似,如下:

- repo: https://github.com/hhatto/autopep8
  rev: 2.0.4  # select the tag or revision you want, or run `pre-commit autoupdate`
  hooks:
  - id: autopep8

需要注意的是,通过pre-commit来运行这两个hook时,既可以在.pre-commit-config.yaml文件中指定参数,也可以在各自的配置文件中指定参数,各自的配置可以参考官方网站,我这里分享一下autopep8的配置,autopep8在运行时会默认读取全局配置,同时也会读取local的配置(如果local指定了的话)
image.fc2a10d0bd9f11ee9de617490ed73bd0.png
我这里在local指定一下配置文件:
image.031f4ca0bda211ee9de617490ed73bd0.png

通过这样指定后,你在命令行运行autopep8时就不需要再额外指定配置了,它会默认读取这个配置文件。配置完成之后,我最后的.pre-commit-config.yaml文件是下面这个样:

# See https://pre-commit.com for more information
# See https://pre-commit.com/hooks.html for more hooks
repos:
-   repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v4.5.0
    hooks:
    - id: trailing-whitespace
    - id: end-of-file-fixer
    - id: check-yaml
    - id: check-added-large-files
# isort的配置
-   repo: https://github.com/pycqa/isort
    rev: 5.13.2
    hooks:
      - id: isort
        name: isort (python)
# autopep8的配置
-   repo: https://github.com/hhatto/autopep8
    rev: v2.0.4  # select the tag or revision you want, or run `pre-commit autoupdate`
    hooks:
    - id: autopep8
      args: ["."]
安装git hook scripts

上面的配置算是完成了所有的准备工作,但是如何在commit时自动运行这两个hook,还需要最后一个步骤,那就是安装git hook scripts,这个步骤也非常简单,需要执行的命令如下:

pre-commit install

执行完这个命令后,你每次git commit时就会执行上面的两个hook啦!如果在commit时发现你的代码不符合规范,它会自动给你修改,这个时候你需要重新add并commit才能提交到远程仓库。

总结

这篇文章主要围绕代码规范统一,介绍了两个工具的使用方式,分别是isort和autopep8,他们都是针对python代码风格统一的工具,其中isort能够规范导包的风格,autopep8能够规范代码内容的风格,他们各自都支持命令行和内嵌代码来执行,最后介绍到了pre-commit这个工具,它能够将前面两个小工具“挂载”到git上,使得每次执行git commit命令的时候都自动去执行格式化。还等什么,快去规范一下你的代码风格吧!👻

更多内容可以关注博主的个人博客系统:《Python源码剖析》之对象的基石—PyObject

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1611173.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【最新可用】Claude国内镜像,可上传图片,可用Claude3全系模型,包括Pro版本的Opus),亲测比GPT好用

Claude对话、上传图片的超详细教程来啦! 近期,Claude 3 Opus的发布引发了网络上的广泛关注与热议,有观点认为其性能已经凌驾于GPT-4之上。虽然网络上已经出现了大量基于这两款先进AI技术的实际应用案例,但仍有许多人对在国内如何…

利用代码批量删减文件夹里面指定数量的图片

这段代码会遍历 parent_directory_path 下的所有子文件夹,并在每个子文件夹中删除指定数量 num_to_keep_per_folder 的图片。请确保 parent_directory_path 变量指向了你的父文件夹路径,并根据需要修改 num_to_keep_per_folder。 import osdef delete_i…

day03-(Centos7安装Docker)

0.安装Docker Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月。 Docker CE 分为 stable test 和 nightly 三个更新频道…

大模型的RAG(检索增强生成) ----大模型外挂

目录 1 什么是RAG 2 为什么需要RAG 3 如何使用RAG 3.1 RAG技术原理 3.2 RAG工作流程 3.2.1 最基础的RAG流程 3.2.2 增加预处理查询的 RAG 3.2.3 带有聊天历史的 RAG 3.2.4 增加自动排序的 RAG 1 什么是RAG 检索增强生成(RAG)是一个概念&#xff…

curlftpfs和fusermount

curlftpfs 是一种 Linux 系统下用来将 FTP 服务器挂载为文件系统的工具,这意味着可以通过本地目录来访问和操作 FTP 服务器上的文件。 挂载FTP服务器到本地系统 为了挂载FTP服务器到本地系统中,使用curlftpfs工具,可以按照以下格式书写命令…

鼎信通达语音网关怎么对接VOS3000

鼎信通达语音网关对接VOS3000的具体步骤可能会因版本和模型的不同而有所差异,但通常包括以下几个基本步骤: 登录VOS端:首先需要登录到VOS系统中,添加落地网关和账户。 添加账户:在账户管理中添加账户,并应…

线性表的链式存储(单循环链表)

文章目录 前言一、循环链表是什么?二、单循环链表三、单循环链表基本操作的实现总结 前言 T_T此专栏用于记录数据结构及算法的(痛苦)学习历程,便于日后复习(这种事情不要啊)。所用教材为《数据结构 C语言版…

PyTorch深度解析:Tensor——神经网络的核心构建块

在深度学习和神经网络的研究与应用中,Tensor(张量)无疑是一个核心概念。特别是在PyTorch这一强大的深度学习框架中,Tensor更是扮演了举足轻重的角色。本文将深入探讨PyTorch中的Tensor,从其基本定义、特性、操作到实际…

对组合模式的理解

目录 一、场景1、题目描述 【[案例来源](https://kamacoder.com/problempage.php?pid1090)】2、输入描述3、输出描述4、输入示例5、输出示例 二、实现(假的组合模式)1、代码2、为什么上面的写法是假的组合模式? 三、实现(真的组合…

【嵌入式Linux】STM32P1开发环境搭建

要进行嵌入式Linux开发,需要在Windows、Linux和嵌入式Linux3个系统之间来回跑,需要使用多个软件工具。经过了4小时的安装(包括下载时间),我怕以后会忘记,本着互利互助的原则,我打算把这些步骤详…

51.基于SpringBoot + Vue实现的前后端分离-校园志愿者管理系统(项目 + 论文)

项目介绍 本站是一个B/S模式系统,采用SpringBoot Vue框架,MYSQL数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得基于SpringBoot Vue技术的校园志愿者管理系统设计与实现管理工…

基于SSM,JSP超市进销存管理系统

目录 项目介绍 图片展示 运行环境 获取方式 项目介绍 权限划分:用户管理员 用户: 登录,注销,查看基本信息,修改基本信息 进货管理: 进货信息:可以新增进货,查询进货&#xff0…

跨站攻击CSRF实验

1.low等级 先利用Burp抓包 将get响应的url地址复制,发到网页上(Low等级到这完成) Medium: 再将抓到的包发到Repeater上,对请求中的Referer进行修改,修改成和url一样的地址,修改成功。 在这里修改后发送 然…

华为认证实验配置(10): 实现VLAN间通信

传统交换二层组网中,默认所有网络都处于同一个广播域,这带了诸多问题。VLAN技术的提出,满足了二层组网隔离广播域需求,使得属于不同VLAN的网络无法互访,但不同VLAN之间又存在着相互访问的需求 重点:使用路…

NtripShare2024年第一季度主要技术进展

迷迷糊糊又是一个月没有写点什么,近期想清楚NtripShare在2024的要做什么事情,暂且将NtripShare要做的主要事情为搭建由软件与硬件之间的技术桥梁。 在过去的几年时间里NtripShare对硬件方面一直是规避的态度,今年开始要做一点软硬件搭界的技…

国际汉服设计大赛活动策划方案

在全球化时代,时尚潮流打破了国界的限制,而这在当下随着国风文化的兴起,皆呼:国潮时代来了!“国潮”从字面来看意为“国风+潮流”,具有独特识别性而受大众认可的潮流风尚。“汉风”即可指汉文化…

Clark Transform的FPGA代码实现讲解

Clark 变换是坐标转换,将输入的三相电流转换到两相直角坐标下电流,如下图为坐标表示方法。 根据坐标的投影我们可以得到 从而可以推知: 上述公式为最终代码中实现的计算公式。 在FPGA中实现时,由于FPGA中不擅长浮点数计算&#xf…

【管理】杨三角模型

企业成功 成功 战略 X 组织能力 1)组织能力对于企业的重要性是和战略一样的; 2)组织能力必须与战略适配,才能共同造就企业的成功。 员工思维:员工愿不愿意参与战略落地的实践?员工每天所关心、追求和重视的…

细说postgresql之pg_rman备份恢复 —— 筑梦之路

pg_rman是一款开源的备份恢复软件,支持在线和基于PITR的备份恢复方式。 pg_rman类似于oracle的rman,可以进行全量、增量、归档日志的备份。 运行模式: 安装部署 Releases ossc-db/pg_rman GitHub 1、需要根据PG Server的版本,下…

【爬虫实战】2024微博·任意博主已发布的微博、自动翻页、多线程

大家好,应同学们私信要求,出一篇关于微博博主已发布的内容脚本可视化的案例,于是整理了一下,仅供学习参考。 项目功能简介: 1.可视化式配置; 2.任意博主; 3.自动翻页; 4.支持指…