如何用 GitHub Actions 写出高质量的 Python代码?

Python测试驱动开发与CI/CD自动化实战:从Pytest到GitHub Actions 测试驱动开发是一种先编写测试用例再实现功能的软件设计方法论,其核心‘红-绿-重构’循环通过快速反馈驱动接口设计与代码实现,能有效提升代码的可测试性与设计质量。结合持续集成与持续部署自动化,可将代码集成、测试验证等流程固化为可靠流水线,为团队协作建立质量安全网。在Python生态中,Pytest框架凭借其简洁语法、强大的Fixture机制和丰富插件,为TDD提供了高效支持;而GitHub Actions则以其与代码仓库的原生集成和事件驱动模型,成为实现CI/CD自动化的优选方案。本文通过一个计算器库的开发实例 阅读详情

点击上方“编程派”,选择设为“设为星标”

优质文章,第一时间送达!

这篇博文将与你分享如何在Python项目中搭建起GitHub Actions工作流,以确保你写出的代码既优雅,又符合所有最佳实践,且已经过完备测试。

作者 | Wojciech Krzywiec

译者 | 香槟超新星,责编 | 郭芮

出品 | CSDN(ID:CSDNnews)

以下为译文:

最近,我决定开始学习Python了。如今它已位列最流行的编程语言之一,因此做出尝试一下的决定并没有什么困难的。尤其是我对自己的算法水平仍然不满意,所以我希望能够一石二鸟——学习Python,并用一些算法题目来练手。

因此,我在GitHub上创建了Algorithms Python项目,我会在上面发布一些自己觉得有趣的问题的答案。

但是在练习过程中,我遇到了一个问题。

如何确保我的代码是高质量的?

如何确保我的代码风格与官方指南PEP 8一致?

以及如何检查代码的测试是否完备?

其实是有解决方案的!那就是 GitHub Actions!

但是我想实现的究竟是什么?

我将向你展示:

  • 如何集成CodeFactor——一个可以在你的代码中发现潜在bug的工具;

  • 如何设置wemake-python-styleguide GitHub Actions工作流(用以检查你的代码是否符合PEP 8);

  • 如何运行单元测试并通过Codecov报告覆盖范围。

在接下来的步骤中,我默认你已经在GitHub上有一个Python项目了。如果你没有的话,就请先创建一个吧。

CodeFactor

这是一个非常简洁的工具,可以用来检查你的代码质量。它可以免费用于所有的公共库,以及1个私有库。

首先,请先去官方网站www.codefactor.io,并通过GitHub登录,创建一个新账号。(要完成此操作的)图标应该是位于主页的右上角。

注册后,单击右上角的加号,将1个库添加到你的控制面板。

从列表中选中你要分析的库,然后单击页面底部的import。

然后就好啦!现在你应该已经转到一个包含着已发现的所有问题的列表的控制面板了。太棒了!

wemake-python-styleguide

让我们接着讲第二个工具。这个工具能够检查代码是否符合官方Python风格指南。

这次我们不用在任何Web服务中创建新账号。我们将搭建起一个GitHub Actions工作流,每当一个pull request被创建出来时,该工作流都会被触发,并会在发现潜在问题时添加评论。

给那些还不了解GitHub Actions的人介绍一下:它是GitHub上的一项新功能,可以实现许多任务的自动化,通常被视为CI / CD工具(Continuous Integration/Continuous Deployment,持续集成/持续部署),能够进行测试,进行质量检查,然后部署。但这还不是它的唯一目标。

开始时,首先在项目的根文件夹中创建一个.github / workflows文件夹,你的工作流的定义将会被放在这里。

然后创建一个新文件,命名为workflow-pr.yaml。

name: Python Pull Request Workflow
on: [pull_request]
jobs:


  qa:
    name: Quality check
    runs-on: ubuntu-18.04
    steps:
      - uses: actions/checkout@v1
      - name: Set up Python
        uses: actions/setup-python@master
        with:
          python-version: 3.8
      - name: Run unit tests
        run: |
          pip install pytest
          pytest
      - name: Wemake Python Stylguide
        uses: wemake-services/wemake-python-styleguide@0.13.4
        continue-on-error: true
        with:
          reporter: 'github-pr-review'
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

这是一个非常简单的工作流,全名为Python Pull Request Workflow。每个pull request都能触发它,因此无论何时创建新的或更新现有的作业,都会运行。

上面的工作流仅包含一个qa工作,分为4个步骤:

  • actions / checkout @ v1——必须让GitHub Actions工作流知道它可以使用库中的代码

  • 使用actions/setup-python@master的Set up Python配置好一个Python版本,在本例中为使用的是python-version: 3.8。

  • Run unit tests将运行位于项目中的所有单元测试。为此,我使用的是pytest,首先需要安装pip install pytest,以便可以运行下一个命令pytest。如果这一步上有任何一个测试失败,则下一个测试将不会运行。

  • Wemake Python Styleguide的这一个步骤是我们最感兴趣的。它使用wemake-services/wemake-python-styleguide@0.13.4操作,这是工作流的基本组成单位。你可以在GitHub Marketplace上找到它们(https://github.com/marketplace?type=actions),就像上述提到的一样(https://github.com/marketplace/actions/wemake-python-styleguide)。将此代码配置为(with 语句)以使用github-pr-review reporter,就可以在code review中启用内联注释了。在官方网站上可以找到更多受支持的reporter选项。最后,此工作流需要传递你的GIHUB_TOKEN,这就是添加env语句的原因。

为了测试它的运行,你需要创建一个新的branch,提交一些更改并将其推送到GitHub。然后创建一个pull request,就能触发此工作流了。要检查它,请转到项目中的“Actions”选项,如果一切顺利则应如下图所示:

如果单击“Run unit tests”,则在console log中,你将看到测试报告:

如果返回到Pull request,则应该看到添加的注释。就像这里那样:https://github.com/wkrzywiec/algorithms-python/pull/6

Codecov

最后,我们想要一份涵盖范围的测试报告。为此,我们再次使用pytest库,它将为我们生成报告,然后我们将其上传到Codecov,后续的可视化就由它完成。

在定义一个新的工作流之前,你首先需要先创建一个Codecov账号。因此,你需要先单击右上角的“Sign Up”按钮转到https://codecov.io。

然后选择GitHub注册。

然后,你将被带到GitHub项目的控制面板,然后需要单击Add new repository按钮。

一个列表将出现,包含所有的项目,你可以从中选择一个来分析。

然后会出现一个带有令牌(token)的页面。把它保存下来,因为下一步中会用到。

现在回到GitHub的项目上,然后单击其“Settings”按钮。单击“Secrets”,然后添加一个新的secret,这时就可以用上你在Codecov网站上生成的令牌了。要完成这一步,单击Add secret。

好的,一切都已设置好了,接下来就可以继续定义GitHub工作流了。

name: Python Master Workflow
on:
  push:
    branches:
      - 'master'
jobs:
  codecov:
    name: Codecov Workflow
    runs-on: ubuntu-18.04
    
    steps:
      - uses: actions/checkout@v1
      - name: Set up Python
        uses: actions/setup-python@master
        with:
          python-version: 3.8
      - name: Generate coverage report
        run: |
          pip install pytest
          pip install pytest-cov
          pytest --cov=./ --cov-report=xml
      - name: Upload coverage to Codecov
        uses: codecov/codecov-action@v1
        with:
          token: ${{ secrets.CODECOV_TOKEN }}
          file: ./coverage.xml
          flags: unittests

再次,我们创建一个单独的文件,命名为workflow-master.yaml,因为这次我们不想在创建pull request时触发此工作流。这个工作流仅当在master branch上推送了新的提交时才会运行。

在jobs部分中,只有一个名为codecov的作业,包括四步:

  • uses: actions/checkout@v1——这个步骤,跟上次一样,也只是为了告诉GitHub Actions我们要使用当前库里的文件

  • uses: actions/setup-python@master——这个步骤之前也提到过,这里我们设置的Python版本是3.8

  • 然后是一个新步骤,负责生成覆盖率报告(Generate coverage report);这包含一系列脚本,涵盖了安装pytests(pip install pytest),pytest-cov(pip install pytest-cov)和运行实际测试(pytest-cov =./-cov-report = xml),

  • 最终,生成的测试覆盖率报告可以上传到Codecov(Upload coverage to Codecov)。在这里我们使用uses: codecov / codecov-action @ v1(https://github.com/marketplace/actions/codecov)。在其中,我们提供3个参数:token: ${{ secrets.CODECOV_TOKEN }},取值自我们放置在GitHub Secrets保管库的文件,(之前的步骤生成的)测试覆盖率报告的位置是file:./coverage.xml,而flags:unittests是对我们的单元测试进行分组的标志。

要进行测试,你需要将一些提交push到master branch。这可以直接在你的本地库中完成,也可以通过合并一个pull request完成。如果一切顺利,那页面应该是像这样的:

现在,如果你回到Codecov,回到你的项目控制面板,你应该能看到类似的输出:

好的,我们做到了!(Cheers!)

在结尾之前,我想告诉你的是,能帮你写出更高质量代码的工具并非只有CodeFactor,Codecov或wemake-python-styleguide。实际上,这样的工具有很多,例如SonarCloud,Pylint,Coveralls,DeepSource等等。其中一些可以在GitHub Marketplace上找到,如果你不喜欢我提议的这几个工具,那么最好从那上面的地方为起点开始寻找。

结论

希望通过这篇博文,你可以了解到,要如何设置GitHub库来确保写出高质量的代码。有了这样的工具集合,你可以找到所有的弱点和bug,但要记住,不是每个bug和每个问题都值得去花心思。有时候,最好是更专注于实际工作,而不是整理那些臭代码库。(wink)

原文:https://medium.com/@wkrzywiec/how-to-write-good-quality-python-code-with-github-actions-2f635a2ab09a

作者:Wojciech Krzywiec,Java开发工程师,DevOps新手,终生学习者。

回复下方「关键词」,获取优质资源

回复关键词「 pybook03」,立即获取主页君与小伙伴一起翻译的《Think Python 2e》电子版
回复关键词「入门资料」,立即获取主页君整理的 10 本 Python 入门书的电子版
回复关键词「m」,立即获取Python精选优质文章合集
回复关键词「book 数字」,将数字替换成 0 及以上数字,有惊喜好礼哦~
题图:pexels,CC0 授权。

你点的每一个在看,我认真当成了喜欢

点击阅读原文,查看详情

Python项目模板实战:基于Ruff、pytest与GitHub Actions的现代化开发脚手架 Python开发中,项目脚手架是构建高效、可维护代码库的基石。其核心原理在于通过预定义的配置和自动化工具链,将开发最佳实践固化为标准流程,从而确保团队协作的一致性与代码质量。这一技术的核心价值在于显著降低项目初始化成本,消除环境配置差异,并强制推行统一的代码风格与质量规范。在实际应用场景中,一个精心设计的模板通常会集成代码格式化、静态检查、自动化测试与持续集成等关键环节,这正是TechNickAI/python-template项目所体现的工程实践。该模板深度整合了Ruff这一高性能的代码检查与格式化工具 阅读详情

相关推荐

GitHub 高级应用:代码审查(Code Review)完全指南

代码审查(Code Review)是开发团队通过 Pull Request 审查他人代码、发现问题、优化质量的过程。它不仅能提高代码质量,还能促进团队协作与知识共享。“好的代码审查,是项目成功的隐形功臣。PR 是协作的桥梁Review 是质量的保障让每一行代码都被关心。

moton2017的博客 1171

RedwoodJS调度器:任务调度与定时执行的终极指南

RedwoodJS调度器是RedwoodGraphQL框架中强大的任务调度与定时执行工具,它能帮助开发者轻松管理后台任务、实现定时执行功能,提升应用的自动化处理能力。无论是发送邮件、生成报表还是处理数据同步,RedwoodJS调度器都能高效可靠地完成这些任务。 ## 为什么选择RedwoodJS调度器? 在现代Web应用开发中,许多任务需要在后台或特定时间执行。例如,电商平台需要定时生成销售报

gitblog_00059的博客 1055

wemake-python-styleguide:有史以来最严格,最自以为是的python linter!

wemake-python-styleguide 欢迎使用有史以来最严格,最有主见的python linter。 wemake-python-styleguide实际上是一个插件,带有作为依赖项。 快速开始 pip install wemake-python-styleguide 您还需要使用创建setup.cfg文件。 我们强烈建议您同时使用: ,可轻松集成到旧版代码库中 用于在多个项目之间共享和验证配置 跑步 flake8 your_module.py 这个程序仍然只是好老flake8 ! 而且它不会改变您现有的工作流程。 有关示例和集成,请参见文档中的。 我们还支持作为一流的公民。 ! 我们是关于什么 该项目的最终目标是使所有人都编写完全相同的python代码。 薄片8 皮林特 黑色 py wemake-python-styleguide 格式化代码? :cross_mark: :cross_mark: :white_heavy_check_mark: :cross_mark: :cross_mark: 发现样式问题? :thi

如何用GitHub Actions写出高质量Python代码

这篇博文将与你分享如何在Python项目中搭建起GitHub Actions工作流,以确保你写出代码既优雅,又符合所有最佳实践,且已经过完备测试。作者...

790

16 个好用的 Code Review 工具(1)

Codestriker 是一个开源的在线源码审查 Web 应用程序。此代码审查工具可以帮助我们在数据库中记录问题、注释和决策。它也可以用于代码检查(Code Inspections)。支持传统的文档审查它可以与 Bugzilla、ClearCase、CVS 等集成Codestriker 已获得 GPL 许可。Phabricator 是一个开源的源码扫描程序。它还包括了基于 Web 的轻量级代码审查、规划、测试、bug 发现等功能。

bfhye16552的博客 991

github 检查代码质量_如何用GitHub Actions写出高质量Python代码

这篇博文将与你分享如何在Python项目中搭建起GitHub Actions工作流,以确保你写出代码既优雅,又符合所有最佳实践,且已经过完备测试。作者 |Wojciech Krzywiec译者 |香槟超新星,责编 | 郭芮头图 | CSDN 下载自东方 IC出品 | CSDN(ID:CSDNnews)以下为译文:最近,我决定开始学习Python了。如今它已位列最流行的编程语言之一,...

weixin_42392054的博客 656

github 检查代码质量_如何用 GitHub Actions 写出高质量Python代码

这篇博文将与你分享如何在Python项目中搭建起GitHub Actions工作流,以确保你写出代码既优雅,又符合所有最佳实践,且已经过完备测试。作者 | Wojciech Krzywiec译者 | 香槟超新星,责编 | 郭芮头图 | CSDN 下载自东方 IC出品 | CSDN(ID:CSDNnews)以下为译文:最近,我决定开始学习Python了。如今它已位列最流行的编程语言之一,因此做出尝...

weixin_39821604的博客 167

如何在opengl用代码绘制英文_如何用 GitHub Actions 写出高质量Python代码

本文转自CSDN(订阅号:CSDNnews),经平台同意授权转载。这篇博文将与你分享如何在Python项目中搭建起GitHub Actions工作流,以确保你写出代码既优雅,又符合所有最佳实践,且已经过完备测试。作者 |Wojciech Krzywiec译者 |香槟超新星,责编 | 郭芮出品 | CSDN(ID:CSDNnews)以下为译文:最近,我决定开始学习Python了。...

weixin_39620099的博客 200

Python CI/CD(持续集成/持续部署)流程解析与 GitHub Actions 使用

CI/CD 是持续集成(Continuous Integration)和持续部署(Continuous Deployment)的缩写。持续集成强调开发者频繁地将代码变更合并到主分支中,并通过自动化工具进行构建和测试;而持续部署则进一步自动化了部署过程,使得每次代码提交都能自动触发部署操作。GitHub ActionsGitHub 提供的一种强大的工作流自动化工具。用户可以通过编写 YAML 文件来定义自己的工作流,从而实现从代码提交到生产环境部署的全自动化流程。

2501_91170080的博客 1361

我用 Python 写了个GitHub AI Agent,每天自动帮我挖掘 GitHub 热门项目,还能举一反三!

AI助手自动解析GitHub热门项目,帮你高效获取技术情报 开发者常面临手动刷GitHub Trending的效率问题:信息过载、理解困难、缺乏应用思考。为此,作者开发了GitHub Insight Agent,通过AI自动分析热门项目,生成结构化报告并推送至飞书/钉钉。 核心功能: 深度分析:用LLM解读项目痛点、核心价值及潜在商业应用; 零成本部署:基于GitHub Actions,无需服务器; 美观推送:生成排版清晰的飞书消息卡片。 技术架构: 爬取榜单(Collector)→ 获取README(Fe

2301_79503034的博客 2180

ta-lib-pythonGitHub Actions:自动化工作流配置终极指南

ta-lib-python是一个基于Cython的高性能Python技术分析库,提供150多种金融指标计算功能。通过GitHub Actions的自动化工作流配置,开发者可以确保项目的持续集成和测试质量。📈 本文将详细介绍如何为ta-lib-python项目配置GitHub Actions自动化工作流,让您的技术分析项目始终保持最佳状态。 ## 🚀 为什么需要GitHub Actions

gitblog_00835的博客 1068
上一篇: Python3 迁移怨声载道
下一篇: pip install 今年将出现重大变化!
codingpy
博客等级 码龄11年 1745粉丝 104原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值