GitHub Actions,卧槽!牛批!

【Github Action】这篇文章教会你如何开发Github Action,并且让你明白它是什么,怎么用,如何做到的。 教会你如何开发action,介绍了配置action和开发一个action的详细步骤,并且展开介绍了很多工具。 阅读详情

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

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

“

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

”

作者:崔庆才

现在 DevOps 的理念可谓是相当火,其中 CI/CD(持续集成、持续部署)是必不可少的环节。有了它们,我们开发完软件之后,一些测试、构建、部署的环节就可以自动化完成了。

我开发的的这款分布式爬虫管理框架—— Gerapy,代码也是放在了 GitHub 上面,但在之前 GitHub 上面是缺少原生的 CI/CD 功能支持的,可能需要根据第三工具或者 Webhook 等来配合实现项目的自动测试、构建和部署。

比如我可能有这么一些需求:

•每次合并代码到 master 分支时,想测试这个项目能否在各个版本的 Python 环境下正常安装和运行。•我为 Gerapy 新建了一个独立的 Repo,叫做 Gerapy/Gerapy,在 docs 文件夹下存放文档说明,但我还另外新建了一个 Repo 专门用来存放文档,叫做 Gerapy/Docs,希望能把 Gerapy/Gerapy 的 docs 子文件夹下的内容整个自动同步到 Gerapy/Docs 这个 Repo 的根目录。•每次 Gerapy 发布新版本的时候,自动构建 Docker 镜像,并上传到 Docker Hub,打上 latest 标签和版本号标签。•每次 master 分支提交代码的时候,自动构建 Docker 镜像,并上传到 Docker Hub,打上 master 标签,代表当前 master 分支版本。

上面的功能之前有一部分工作是手工操作的,有一部分是借助于第三方工具来自动操作的,感觉并不是一个很好的解决方案

在最近一段时间,GitHub 上面上线了 Actions 功能,它就是为 CI/CD 而生的,和 GitHub 项目原生紧密结合。然而几个月以来一直处于内测阶段。就在 11 月 13 日,GitHub Actions 功能正式上线了。

上线之后,我就开始正式使用这个功能了,是真的香!

上面的四个需求,我用 GitHub Actions 已经完全实现了自动化,非常简单方便。

接下来简单介绍下我的一些实现方式。

GitHub Actions

首先简单介绍下 GitHub Actions,其官方介绍页面为:https://github.com/features/actions,介绍语如下:

Automate your workflow from idea to production. GitHub Actions makes it easy to automate all your software workflows, now with world-class CI/CD. Build, test, and deploy your code right from GitHub. Make code reviews, branch management, and issue triaging work the way you want.

简而言之就是提供了一个高效易用的 CI/CD 工作流,帮助我们自动构建、测试、部署我们的代码。

另外它支持三大平台—— Linux、MacOS、Windows,支持任何编程语言,而且官方提供了许许多多的 Actions 库供我们直接使用,帮助我们更快地搭建工作流。

GitHub Actions 的官方文档可以见:https://help.github.com/en/actions/automating-your-workflow-with-github-actions,如果大家想好好研究下的话,一定要好好看看。

下面我就介绍我使用 GitHub Actions 实现上文所述的四个需求的方法。

自动测试

由于我开发的 Gerapy 是一个 Python Package,因此我看重的是测试它是否可以在各个 Python 平台下安装和正常使用,于是我新建了一个 GitHub Action,它会自动在项目目录下生成一个 .github/workflows/*.yml 文件,内容如下:

name: build
on: 
  push:
    branches: 
    - master
    - dev
jobs:
  test:
    runs-on: 
    - ubuntu-latest
    strategy:
      max-parallel: 3
      matrix:
        python-version: [3.5, 3.6, 3.7]
    steps:
    - uses: actions/checkout@v1
    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v1
      with:
        python-version: ${{ matrix.python-version }}
    - name: Install Dependencies
      run: |
        python -m pip install --upgrade pip
        pip install .
    - name: Run Gerapy
      run: |
        gerapy -v
        gerapy init
        cd gerapy
        gerapy migrate
        gerapy initadmin

其实在这里一个 Action 就是一个 YAML 文件,其后缀为 yml,它规定了一系列语法规则,我们根据它的语法规则写出一些工作流,在符合一定条件时,这些工作流会被触发,自动执行。

比如这里最开头,on 就是监听某个事件,其内容为 push,意思就是当 push 代码的时候,就会触发。再进一步地,这里定义了两个分支 master 和 dev。这什么意思呢?就是当我往 master 或者 dev 分支 push 代码的时候,我们定义的工作流就会执行。

下面的 jobs 就是工作流的定义了,包括在什么平台运行,具体执行什么步骤。

比如这里 runs-on 我就定义了在 ubuntu-latest 版本上运行,另外定义了一些并行策略和参数,比如这里就定义了 Python 的三个版本参数,在 3.5、3.6、3.7 版本上运行。

下面的 steps 就是具体执行哪些步骤了。第一步和第二步,我们可以看到它都有一个 uses 参数,内容都为 actions 开头,这就说明我们使用了 GitHub 提供的写好的 Action,我们只需要引用它的名字就能使用了。这两步运行完毕之后,Python 环境会被初始化,同时会从 GitHub Clone Gerapy 项目代码到本地。

在第三步和第四步,就是我自定义的 Task 了,这里自持直接写入 Shell 脚本。在这里我分了两步。

第三步 Install Dependencies 就是安装 pip 和 Gerapy 安装包,其中一句 pip install . 就是安装当前 Gerapy 目录下的内容到系统中,安装完成之后,就可以使用 gerapy 命令了。

于是第四步 Run Gerapy 就是测试了 gerapy 命令的一些初始化使用,包括初始化工作环境、数据库迁移、初始化账号等等,当然还有更多,比如运行某些测试,运行服务等等,这里我只把一些必要的内容写进去了。

好,基本内容就是这样。

保存这个 Action,命名为 build.yml,它会保存为 .github/workflows/build.yml 文件。同时在保存的时候,我们就相当于执行了一次 Push 任务,这时候我们就可以看到这个 Action 已经启动了,页面如下:

我们所定义的每一个步骤以及对应的执行结果都会显示在控制台中,一目了然。

可以看到这里初始化了三个版本的 Python 环境,同时都运行了其中的测试流程。如果测试成功,会打绿色的勾,如果失败,会提示红色的叉,并有邮件提示。

这样以来,一些自动化的测试就完成了!!!

同步文档到新的 Repo

接下来我这个需求可以说稍微有点奇葩了。

写项目免不了的要写文档,这里文档我是用 Sphinx 来写的,可以借助于 ReadTheDocs 自动构建并分发到 readthedocs.io 上面,类似这样子:

但文档的源代码我是放在了 Gerapy/Gerapy 这个 Repo 的 docs 文件夹,向 Scrapy 看齐,是这样子的:

但我想着还新建一个 Repo,来单独存放文档,比如我新建一个 Gerapy/Docs 这个 Repo,我在 Gerapy/Gerapy docs 子文件夹下的内容可以被自动同步到 Gerapy/Docs 根目录下面,这样我只需要往 Gerapy/Gerapy 上面提交代码,docs 子文件夹下面的内容变了,Gerapy/Docs 下面的内容也会跟着变。

那这个能不能做到呢?能!(我问你答,快乐神仙;自问自答,法力无边~~

这个流程可以分为四步:

•下载 Gerapy/Gerapy Repo 的源代码。•利用 git 的 subtree 命令将 docs 文件夹下的内容分离到新的分支。•将新分离的分支推送到 Docs 这个 Repo 下面。•推送 Docs 这个 Repo 到远程 Gerapy/Docs Repo。

这里面就有一个关键地方,那就是怎样无需密码将内容推送到远程 Gerapy/Docs 这个 Repo 下面,当然就是 SSH 了。(啊,超爽der)

那 SSH 的话应该怎么设置呢?我们首先要有一对公钥和私钥,这个我们用 ssh-keygen 命令自己生成就好了。

那接下来 Gerapy/Docs 里面需要存有公钥,怎么办呢?我们可以借助于 GitHub 提供的 Deploy Key 配置好公钥即可:

然后我们需要将私钥上传到 Action 所运行的虚拟机里面,但我们又不能明文将其放在 yml 文件里面,那这个怎么做到呢?只需要将其配置到 Secrets 里面即可,Action 是有权限访问到的:

嗯,做好这两部分工作之后,接下来完善一下 yml 文件就好了,内容如下:

name: sync docs
on: 
  push:
    branches: 
    - master
jobs:
  sync:
    runs-on: ubuntu-latest
    steps:
    - name: Set SSH Environment
      env:
        DOCS_DEPLOY_KEY: ${{ secrets.DOCS_DEPLOY_KEY }}
      run: |
        mkdir -p ~/.ssh/
        echo "$DOCS_DEPLOY_KEY" > ~/.ssh/id_rsa
        chmod 600 ~/.ssh/id_rsa
        ssh-keyscan github.com > ~/.ssh/known_hosts
        chmod 700 ~/.ssh && chmod 600 ~/.ssh/*
        git config --global user.email "cqc@cuiqingcai.com"
        git config --global user.name "Germey"
    - name: Sync Docs of Gerapy
      run: |
        cd /tmp
        git clone git@github.com:Gerapy/Docs.git docs
        cd docs
        git branch -D docs || true
        git push origin --delete docs || true
        git clone https://github.com/Gerapy/Gerapy.git gerapy
        cd gerapy
        git subtree split --prefix=docs --squash -b docs
        git checkout docs
        git push /tmp/docs docs:docs
        cd /tmp/docs
        git checkout docs
        git checkout -b master || git checkout master || true
        git reset --hard docs
        git push origin master --force

可以看到,这里主要就分了两步。

第一部分就是设置虚拟机的 SSH 环境,这里 secrets.DOCS_DEPLOY_KEY 就是我们刚才在 Secrets 里面定义的私钥,对应的运行命令就是将私钥添加到 ~/.ssh/id_rsa 里面。

第二部分就是分离 docs 文件夹到新的分支,然后将其上传到新的 Repo 下了。

那么这里有两条比较关键的命令:

git subtree split --prefix=docs --squash -b docs

这条命令就是将 docs 文件夹的内容分离到一个新的分支的根目录下,新的分支的名称为 docs。

git push /tmp/docs docs:docs

这条命令就是将本地的分支推送到另外一个本地 Repo 下,注意这里 push 的目标不一定是远端的 Repo 地址,也可以是本地的 Repo 地址。

最后,将新的 Repo 内容强制推送到远程即可。

这样我们就可以实现,Gerapy/Gerapy Repo docs 文件夹下内容的变动,会自动更新到 Gerapy/Docs Repo 了。

例如 docs 下是这样的:

Gerapy/Docs Repo 下和子文件的内容会一直维持同步,并在 master 分支上面:

自动构建 Docker 镜像

由于 Gerapy 是一个 Web 工程,所以它非常适合于打包一个 Docker 镜像。对于 Docker 的镜像,我期望有三个版本:

•当前 master 分支的版本,比较稳定,但未发布版本。•最新版本,latest,代表最新的发布版本。•每个历史版本,每次发布版本的版本号,都标记一个 tag。

最后我们自动构建的镜像都自动 Push 到 Docker Hub 上面,这样大家都可以使用了。

那这个怎么做到呢,同样借助于 GitHub Action 也可以轻松做到。

首先 master 版本,由于没有发版,所以前端需要自行 build,然后 Python Package 需要安装本地代码。废话不多说了,上代码:

name: build docker image master
on:
  push:
    branches: 
    - master
    paths:
    - .github/workflows/**
    - gerapy/**
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout Source
      uses: actions/checkout@v1
    - name: Docker Login
      run: docker login -u germey -p ${{ secrets.DOCKERHUB_LOGIN_PASSWORD }}
    - name: Setup Node.js
      uses: actions/setup-node@v1.1.0
      with:
        version: 10.x
    - name: Build Frontend Source
      run: |
        cd gerapy/client
        npm install
        npm run build
    - name: Build the Docker Image
      run: |
        docker build -t germey/gerapy:master -f ./docker/Dockerfile .
    - name: Push the Docker Image
      run: docker push germey/gerapy:master

可以看到这里,监听了 master 分支的变动,同时限定了路径 workflows 文件夹和 gerapy 文件夹下变动。

流程包括了前端的构建和 Docker 的打包,Docker 打包的时候使用了 -f 命令指定了 Dockerfile 的路径,并将打包完成之后的镜像标记为 gerapy:master,推送到 Docker Hub 即可。

对于发布新版本的时候,则直接监听 tag 的变动即可:

name: build docker image release
on:
  push:
    tags:
      - 'v*.*.*'
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout Source
      uses: actions/checkout@v1
    - name: Docker Login
      run: docker login -u germey -p ${{ secrets.DOCKERHUB_LOGIN_PASSWORD }}
    - name: Setup Node.js
      uses: actions/setup-node@v1.1.0
      with:
        version: 10.x
    - name: Build Frontend Source
      run: |
        cd gerapy/client
        npm install
        npm run build
    - name: Build and Push the Docker Image
      run: |
        tag=${GITHUB_REF:11}
        echo "Build Tag '$tag'"
        docker build -t germey/gerapy:$tag -f ./docker/Dockerfile .
        docker push germey/gerapy:$tag
        regex='^([0-9]+\.){0,2}(\*|[0-9]+)$'
        if [[ $tag =~ $regex ]]; then
          echo "Build Stable Version '$tag'"
          docker tag germey/gerapy:$tag germey/gerapy:latest
          docker push germey/gerapy:latest
        fi

可以看到这里监听的配置改成了 tags,tag 也变成了一个变量,可以通过 ${GITHUB_REF:11} 获取到。

同时这里还加了一个正则判断是不是正式的发版,如果是 beta、rc 版本,则不构建正式 latest 的 Docker 镜像。

最后我们看看我再一次发版之后,构建完成之后,Docker Hub 的效果:

可以看到,我发布了 0.9.2 版本之后,它就自动构建了 0.9.2 版本的镜像,同时将 latest 镜像指向 0.9.2 版本。另外对应 maser 版本也构建了一个版本。

这样,以后妈妈再也不用担心我忘记打 Docker 镜像啦。

以上便是我将 GitHub Actions 应用到我的开源项目上的记录。

最后,如果大家对 Scrapy 爬虫感兴趣的话,也(非常)欢迎大家(高高兴兴的)了解一下我写的 Gerapy 框架,利用它我们可以(无敌)更方便地管理(呀)、监控(呀)、(或者是)部署 Scrapy 爬虫项目(什么的)。

其 GitHub 地址为:https://github.com/Gerapy/Gerapy,文档:https://docs.gerapy.com/。

掰掰!

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

回复关键词「 pybook03」,立即获取主页君与小伙伴一起翻译的《Think Python 2e》电子版

回复关键词「入门资料」,立即获取主页君整理的 10 本 Python 入门书的电子版

回复关键词「m」,立即获取Python精选优质文章合集

回复关键词「book 数字」,将数字替换成 0 及以上数字,有惊喜好礼哦~

题图:pexels,CC0 授权。

好文章,我在看❤️

github或gitee等dev cloud使用actions通过yml配置实现自动化部署 什么是CI **CI又称为work flow,是一种自动化执行工具。**多数代码开发平台,例如 gitee,github,gitlab,azure devcloud都有类似于actions的功能,用于满足用户自定义的条件时,自动化执行一些工作,比如 自动化部署,检查语法,通知到微信等。 以github为例,我们只需要在项目的actions界面下,新建或选择一个yml方案,即可实现众多功能。 如何配置CI 名称 示例样例值 含义 name CI 文件的名称 on … 何时触发此CI 阅读详情

相关推荐

GitHub Actions - 使用 tag 作为发布的版本号

使用 GitHub Action 发布版本时, 获取触发的 tag 作为发布的版本号. 方式一 通过 step 获取 tag, 在需要使用的地方使用 steps.get_version.outputs.VERSION, 其中 get_version 是 step 的 id. name: Release on: push: tags: - 'v*' jobs: release: name: Release runs-on: ubuntu-latest st

K8sCat 1万+

GitHubActions详解

一.GitHubAction简介 🧅什么是Github Action ? GitHubActions是一个持续集成和持续交付的平台,它可以帮助你通过自动化的构建(包括编译、发布、自动化测试)来验证你的代码,从而尽快地发现集成错误。github于2019年11月后对该功能全面开放,现在所有的github用户可以直接使用该功能。GitHub 提供 Linux、Windows 和 macOS 虚拟机来运行您的工作流程,或者您可以在自己的数据中心或云基础架构中托管自己的自托管运行器。在使用Github Action

XBlithe的博客 1万+

OMC多智能体编排系统:AI编程工作流的降维打击

在AI编程工具泛滥的今天,单模型代码助手正面临深度与广度不可兼得的根本瓶颈——它能理解复杂架构,却无法同步监控Git状态、CI结果与Docker构建。多智能体(Multi-agent)编排技术由此成为破局关键:通过解耦原子能力、定义严格I/O契约、分层调度(感知-决策-执行),实现任务驱动的动态协同。其技术价值在于将重复性脑力劳动自动化,显著提升交付准确性、稳定性与成本效率;典型应用场景涵盖跨服务API迁移、遗留系统重构、CI/CD自愈运维及团队级知识沉淀。OMC正是这一范式的工程落地代表,以零学习曲线封装

weixin_34174322的博客 588

【GIT】什么是GitHub Actions ?

【代码】【GIT】什么是GitHub Actions?

weixin_44174312的博客 2332

OMC:面向工程实践的AI多智能体编排框架

AI编程工具正从单点代码生成迈向系统化工程协作。多智能体编排(Multi-agent Orchestration)通过角色分工、闭环验证与模型路由,解决大模型在架构约束、安全合规、性能基线和团队规范等维度的认知盲区。其核心价值在于将模糊自然语言需求转化为可验证、可回滚、可审计的原子操作流,并依托技能学习系统实现经验沉淀与复用。典型应用场景包括TypeScript错误批量修复、API重构一致性保障、高并发实时同步开发等复杂工程任务,为开发者提供具备自我进化能力的研发中台。

weixin_30701575的博客 434

从零搭建情绪分析Web应用:机器学习全流程实战

情感分析是自然语言处理中最基础且高频落地的典型任务,其核心在于将非结构化文本转化为可计算的情感倾向标签。技术原理上依赖文本表示(如TF-IDF)、分类模型(如逻辑回归)与服务封装三者协同,关键价值在于业务可控性——支持行业定制、低延迟推理与轻量部署。典型应用场景包括电商评论监控、客服工单初筛、社交媒体舆情分析等,尤其适合需快速验证算法工程闭环的中小项目。本文聚焦‘从零到上线’完整链路,覆盖数据标注规范、Flask服务封装、Docker容器化及Nginx反向代理等生产级实践要点,强调可复现、易维护、真可用。

Ha12312的博客 440

利用Github Actions部署自动更新PaddleOCR指定代码到指定仓库

利用Github Actions部署自动更新PaddleOCR指定代码到指定仓库

有问题请直接说问题就好 528

PADS VX2.4差分对设置避坑指南:常见错误与解决方案

本文深度解析了在PADS VX2.4中进行高速PCB设计时,差分对设置的核心要点与常见陷阱。针对Layout规则设置、Router布线实战中的阻抗控制、线长匹配等关键环节,提供了具体的避坑指南和解决方案,帮助工程师确保信号完整性,提升设计质量。

weixin_29216049的博客 362

GitHub生存绝命毒师(场景篇):那些能救命的骚操作与大坑,教科书上从来不教

Git进阶、场景复盘、代码回滚、合并冲突、防坑指南、保姆级咱们前面的文章,把你从一个连 GitHub 是什么都不知道的小白,教成了会建仓库、会发 PR、能混进组织的高级“游客”。教科书里只会教你git push,但绝对不会告诉你:如果你把公司的数据库密码不小心传上去了怎么办?如果你和同事改了同一行代码,屏幕上突然出现一堆红绿箭头和尖括号,吓你一跳怎么办?今天这篇,咱们不讲界面了,咱们讲**“事儿”**。

热爱技术与前沿创新,深耕科技领域,在科创中精进自我;探索技术乐趣,分享技术干货与成长心得,以技术为伴,热爱生活,在科创与生活中双向成长。 439

【推荐算法】召回模型总结

【推荐算法】召回模型总结

m0_48086806的博客 6247

开源AI数字人DUIX:从零构建你的智能交互助手

本文详细介绍了如何利用开源AI数字人DUIX从零构建智能交互助手。文章阐述了DUIX作为开源项目的核心优势,包括低成本启动、低网络依赖和高度可定制性,并提供了从开发环境搭建、核心模块(AI模型、语音、形象)配置到个性化业务逻辑开发与最终部署的完整实践指南,帮助开发者快速掌握构建专属AI数字人的全流程。

weixin_29051811的博客 505

Vibe Coding工具怎么选?从Cursor到Claude Code的对比与决策指南

自然语言编程正将开发者从繁琐的代码编写中解放出来,其核心不再是简单的“用嘴写代码”,而是如何将模糊需求转化为精确指令,并对AI生成结果进行有效审查。围绕这一新型开发范式,各类AI编程工具层出不穷,从深度集成IDE的Cursor,到依托GitHub生态的Copilot,再到具备自主规划能力的Claude Code,它们各有侧重,也各有局限。选型的关键并非追逐热门,而是依据任务复杂度、代码可维护性与调试耐心进行匹配。无论您是独立开发者、团队骨干还是业务人员,掌握提示词工程与代码审查意识,才能让Vibe Codi

weixin_28834169的博客 174

ADS2016子电路封装避坑指南:手把手教你制作可复用的自定义Symbol

本文详细介绍了在ADS2016中制作可复用的自定义Symbol的全流程,重点解析了子电路封装的常见问题与解决方案。从电路模块的标准化处理、Hierarchy创建技巧到Symbol视觉优化和库管理策略,帮助工程师提升射频与微波电路设计效率。特别针对Symbol比例适配和引脚优化等核心问题,提供了实用的避坑指南和工程验证方法。

weixin_30275415的博客 221

业余程序员实战指南:面向非科班开发者的高效技术路径

业余程序员指那些无CS背景、非全职开发但具备真实交付能力的业务一线人员,其核心特征是时间碎片化、资源受限、需求模糊却追求确定性结果。他们不关注Kubernetes或微服务理论,而聚焦于Python脚本能否30分钟解决Excel去重+邮件提醒、Streamlit能否零配置启动本地Web工具、OpenCV能否在中文路径下稳定读图。这类开发者的技术价值在于将模糊业务卡点(如‘财务每周手动汇总12个群订单’)压缩为可验证原子操作,并通过防呆设计、呼吸感环境、乐高式组装实现快速闭环。本文基于上百个真实副业项目提炼出从

ciyinzhi8788的博客 331

【点云可视化】自制ply文件并使用open3d可视化点云

使用open3d可视化点云,需要将点云制作为ply文件传入函数中。 安装open3d 直接使用pip安装 pip install open3d ply文件 ply文件的结构为:文件头+数据内容,文件头从 ply 一行开始,到 end_header 为止,里面定义了此 ply文件中数据的组织形式,包括数据类型和个数。后面是点云的坐标信息及每个点的颜色属性的,参考自 如下为具有5个点的点云,end_header后每一行表示一个点的x,y,z,R,G,B信息 ply format ascii 1.0 comme

这个人很蓝 1万+

ArcMap 10.7/10.8启动加载界面后闪退?可能是这个隐藏的Normal.mxt模板文件在搞鬼

本文深入分析了ArcMap 10.7/10.8启动加载界面后闪退的问题,指出Normal.mxt模板文件损坏是常见原因。提供了从定位、删除模板文件到系统级修复的完整解决方案,帮助GIS工程师快速恢复工作流程。

weixin_28523493的博客 333

前端测试实战:从Jest到Vitest的完整指南

单元测试作为软件质量保障的第一道防线,通过隔离测试组件确保核心逻辑的正确性。Jest作为主流测试框架,提供了丰富的断言库和Mock功能,而基于Vite的Vitest凭借即时编译带来85%的冷启动速度提升。测试金字塔理论将测试分为单元测试、集成测试和E2E测试三个层次,其中React生态下的组件测试需要特别关注异步操作和状态管理。在CI/CD环境中,合理配置测试分层执行和智能缓存能显著提升流水线效率。前端测试已从单纯的质量保障工具,发展为包含可视化回归、性能基准、无障碍检测等在内的完整工程体系。

weixin_30455023的博客 383

Python学习第1天:初识Python

Python 作为目前最流行的编程语言之一,凭借其简洁优雅的语法和强大的生态系统,成为了无数开发者的首选。本系列文章将带你从零基础入门,逐步掌握 Python 编程的核心技能。今天我们先来认识 Python,并安装好开发环境。Python(英式发音:/ˈpaɪθən/;美式发音:/ˈpaɪθɑːn/)是由荷兰人吉多·范罗苏姆(Guido von Rossum)发明的一种编程语言,是目前世界上最受欢迎和拥有最多用户的编程语言。

tigerhhzz的博客 435

GitHub Actions 快速入门

GitHub Actions 快速入门

特立独行的博客 4166

【QT开发教程】Qt中的数据加密与解密

在现代应用程序中,数据加密与解密是保护敏感信息的重要手段。Qt本身并不直接提供数据加密与解密的支持,但可以使用第三方库,如OpenSSL或Crypto++,来实现这一功能。本文将介绍如何在Qt中使用OpenSSL进行数据加密与解密,包括基本概念、使用方法以及一些实际的示例。

科技改变人类,技术成就未来 1157

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Github Actions介绍(GitHub提供的持续集成持续交付CI/CD平台,用于自动化软件开发中各种任务。允许开发者通过定义工作流来自动化构建、测试、部署和管理代码的整个生命周期)

GitHub Actions 是 GitHub 提供的一种持续集成和持续交付(CI/CD)平台,用于自动化软件开发中的各种任务。它允许开发者通过定义。通过 GitHub Actions,开发者可以显著提升自动化能力,减少重复性任务,并专注于核心业务逻辑的开发。来自动化构建、测试、部署和管理代码的整个生命周期。

Dontla的博客 1763

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

GitHub Actions入门教程

GitHub Actions 是一个持续集成和持续交付(CI/CD)平台,允许您自动化构建、测试和部署流水线。您可以创建工作流来构建和测试存储库中的每个请求,或者将合并的请求部署到生产环境中。

HHoao的博客 2660

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

上一篇: 绘制疫情地图必备的一个工具
下一篇: 初学 Django 可能会犯的一些错误
codingpy
博客等级 码龄11年 1873粉丝 104原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值