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

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

“

阅读本文大概需要 13 分钟。

”

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

作者 | Wojciech Krzywiec

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

出品 | 优快云(ID:优快云news)

转载编辑 | 进击的coder

以下为译文:

最近,我决定开始学习 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新手,终生学习者。


● 80%的人都不知道,全球Python库下载前10名

● 我珍藏的一些好的Python代码,技巧|上篇

● 爬取300本Python书籍,用Python告诉你哪家强?

● 简单几步,100行代码用Python画一个蝙蝠侠的logo

点击阅读原文,原创400篇干货文章

基于Obsidian与GitHub Actions构建自动化内容工作流 在数字内容创作领域,自动化工作流是提升效率、对抗信息碎片化的关键技术。其核心原理在于通过工具链整合,将内容生产的全链路——从灵感捕捉、知识管理到多平台发布——实现标准化与自动化。这一技术的核心价值在于将创作者从重复性劳动中解放出来,使其能更专注于核心的思考与表达。它尤其适用于独立开发者、技术博主及知识工作者,帮助他们构建个人化的“数字内容工厂”。本文以开源工具Obsidian和GitHub Actions为核心,详细拆解了如何搭建一套高效、可定制的内容创作与发布系统,实现了从本地写作到全球发布的自动化闭环。 阅读详情

相关推荐

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

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

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

bfhye16552的博客 997

数据预处理之数据平滑处理#matlab

介绍基于 MATLAB 的数据平滑方法,主要介绍 smooth 函数、smoothts 函数和 medfilt1 函数的用法。

m0_56619132的博客 2417

GitHub帮你找缺陷

1. 进入市场 https://github.com/marketplace GitHub的marketplace中有很多的app,偶然我发现一款名为:CodeFactor的App,它能够对代码进行自动reviews并给出issue 2. 使用CodeFactor 1. 集成CodeFactor: https://github.com/marketplace/codefactor 2. 安装CodeFactor: https://www.codefactor.io/dashboard 在GitH

fanqiliang630的博客 1188

深入解析Flex NOC总线驱动的实时带宽与延迟优化策略

本文深入解析了Flex NOC总线驱动的核心价值与优化策略。通过解读`/proc/noc/real_time`中的实时带宽与延迟数据,并结合`sysfs`接口进行动态QoS调优,可以有效解决芯片内部数据拥堵问题。文章以智能摄像头和算力盒子的实际案例,详细说明了如何通过优先级调整、带宽限制和参数优化,提升系统在复杂任务下的实时性与稳定性。

weixin_29289821的博客 284

【智能机器人开发全流程:硬件选型、软件架构与ROS实战,打造高效机器人系统】

通过模块化设计与ROS框架的灵活扩展,可快速搭建适应不同场景的机器人系统。实际开发中需重点关注。

dally2的博客 6051

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

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

793

vue使用 APlayer+Meting实现音乐播放,支持多平台音乐:网易云、腾讯、虾米、酷狗、百度

  我之前写过一篇博客:使用 APlayer 实现音乐播放器,虽然 APlayer 让我实现了想要的音乐播放器效果,但是音频列表 audio 的音频链接、音频封面、歌词等,是需要自己去补充的。   那么这些数据从哪里来呢?   我昨天有发愁一会儿会儿,也去搜了获取音乐列表的接口,可以发请求去获取数据嘛。   也有瞅见MetingJS,A powerful plugin connect APlayer and Meting,一个连接APlayer和Meting的功能强大的插件,附上GitHub地址:https

小R.的博客 4799

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

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

weixin_42392054的博客 660

sentinel滑动时间窗口算法学习

滑动时间窗口 先不说sentinel的算法实现,先说什么是滑动时间窗口, 我们在进行限流的时候,比如通过QPS进行限流,那假如我们以秒为单位,举个例子: 我设置了限流规则,qps是10 如果不使用滑动窗口算法,在统计qps的时候,就有可能会有问题,比如: 在0 - 500ms中的请求数是0,但是在500ms - 1000 ms的请求数是10;在1000ms - 1500ms 之间又进来了5个请求,此时只判断了1000ms - 2000 ms之间的请求数 因为没有把1S进行拆分多个窗口,所以在1000ms之后

小小少年的博客 3982

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

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

weixin_39821604的博客 168

MIKE21 MIKE软件 教程 0.1 软件介绍与教学目录

MIKE 21是一个专业的工程软件包,用于模拟河流、湖泊、河口、海湾、海岸及海洋的水流、波浪、泥沙及环境问题。在MIKE Zero集成平台中,主要有MIKE11,MIKE21,MIKE3三类软件,分别对应一维,二维,三维的水动力模型模拟。同时还包括MIKE HYDRO,MIKE FLOOD等其他功能,各软件的具体介绍请参考DHI公司的官方文档,在此不作赘述。学习过程中,对于任何操作界面的疑问,建议大家仔细阅读帮助文档(在有疑问的界面按F1调出),同时官方也提供了对应的线上和线下教学服务(免费+收费)。

Hello Word 2万+

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

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

weixin_39620099的博客 203

【反封禁策略】集成 Undetected-Chromedriver:让 Browser-Use 绕过 Cloudflare 五秒盾

摘要:AI Agent如何突破Cloudflare检测的实战指南 本文针对AI Agent在Cloudflare检测下频繁受阻的问题,深入分析了undetected-chromedriver的工作原理与局限性。文章指出,Cloudflare 2026年的检测体系已升级为"浏览器指纹+IP信誉+协议指纹+行为模式"的多维交叉验证,单一伪装方案难以奏效。 核心内容包括: undetected-chromedriver的三层补丁体系解析 v2与v3版本的适用场景对比 两种Browser-Use集成方案:Selen

ZDQ58818的博客 284

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

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

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

2501_91170080的博客 1395

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

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

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

gitblog_00835的博客 1068

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

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

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

2301_79503034的博客 2258

基于Claude API与GitHub Actions构建AI自动化内容发布系统

静态站点生成器(SSG)与持续集成/持续部署(CI/CD)是现代Web开发中实现高效、低成本内容发布的核心技术组合。其原理在于将动态内容构建过程前置,生成纯静态文件,再通过自动化工作流实现一键部署。这种架构的技术价值在于显著降低了服务器运维成本、提升了网站性能与安全性,同时实现了开发流程的标准化。在工程实践中,该模式广泛应用于技术博客、文档站点和营销落地页等场景。本文聚焦于如何将AI内容生成能力融入此流程,通过设计Claude Routine工作流自动产出Markdown格式文章,并利用GitHub Act

weixin_30509393的博客 265
上一篇: 我用Python分析了《青春有你2》109位漂亮小姐姐,真香!
下一篇: 通晓多种编程语言的程序员,真香?
菜鸟学Python
博客等级 码龄9年 8088粉丝 571原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值