1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        如何用 GitHub Actions 寫出高質(zhì)量的 Python代碼?

        共 5556字,需瀏覽 12分鐘

         ·

        2020-04-02 23:21

        閱讀本文大概需要 13 分鐘。


        這篇博文將與你分享如何在 Python 項(xiàng)目中搭建起 GitHub Actions 工作流,以確保你寫出的代碼既優(yōu)雅,又符合所有最佳實(shí)踐,且已經(jīng)過完備測(cè)試。

        25eec8b92f5977b6a96c03f4c6b351b7.webp


        作者 |?Wojciech Krzywiec

        譯者 |?香檳超新星,責(zé)編 | 郭芮

        出品 | CSDN(ID:CSDNnews)


        以下為譯文:


        最近,我決定開始學(xué)習(xí) Python 了。如今它已位列最流行的編程語言之一,因此做出嘗試一下的決定并沒有什么困難的。尤其是我對(duì)自己的算法水平仍然不滿意,所以我希望能夠一石二鳥——學(xué)習(xí) Python,并用一些算法題目來練手。因此,我在 GitHub 上創(chuàng)建了 Algorithms Python 項(xiàng)目,我會(huì)在上面發(fā)布一些自己覺得有趣的問題的答案。但是在練習(xí)過程中,我遇到了一個(gè)問題。


        如何確保我的代碼是高質(zhì)量的?如何確保我的代碼風(fēng)格與官方指南PEP 8一致?以及如何檢查代碼的測(cè)試是否完備?


        其實(shí)是有解決方案的!那就是 GitHub Actions!但是我想實(shí)現(xiàn)的究竟是什么?我將向你展示:


        • 如何集成 CodeFactor——一個(gè)可以在你的代碼中發(fā)現(xiàn)潛在bug的工具;

        • 如何設(shè)置 wemake-python-styleguide GitHub Actions 工作流(用以檢查你的代碼是否符合 PEP 8);

        • 如何運(yùn)行單元測(cè)試并通過 Codecov 報(bào)告覆蓋范圍。

        在接下來的步驟中,我默認(rèn)你已經(jīng)在 GitHub 上有一個(gè) Python 項(xiàng)目了。如果你沒有的話,就請(qǐng)先創(chuàng)建一個(gè)吧。


        CodeFactor這是一個(gè)非常簡(jiǎn)潔的工具,可以用來檢查你的代碼質(zhì)量。它可以免費(fèi)用于所有的公共庫,以及1個(gè)私有庫。首先,請(qǐng)先去官方網(wǎng)站 www.codefactor.io,并通過 GitHub 登錄,創(chuàng)建一個(gè)新賬號(hào)。(要完成此操作的)圖標(biāo)應(yīng)該是位于主頁的右上角。a3365abcbb93234ec0872c62d43a72cb.webp注冊(cè)后,單擊右上角的加號(hào),將1 個(gè)庫添加到你的控制面板。從列表中選中你要分析的庫,然后單擊頁面底部的 import。e98e3d7b73df764fc4256364253e2911.webp然后就好啦!現(xiàn)在你應(yīng)該已經(jīng)轉(zhuǎn)到一個(gè)包含著已發(fā)現(xiàn)的所有問題的列表的控制面板了。太棒了!


        6f2656544c0cf45618f66d50e71c59ea.webp





        wemake-python-styleguide
        讓我們接著講第二個(gè)工具。這個(gè)工具能夠檢查代碼是否符合官方 Python ?風(fēng)格指南。這次我們不用在任何 Web 服務(wù)中創(chuàng)建新賬號(hào)。我們將搭建起一個(gè) GitHub Actions 工作流,每當(dāng)一個(gè) pull request 被創(chuàng)建出來時(shí),該工作流都會(huì)被觸發(fā),并會(huì)在發(fā)現(xiàn)潛在問題時(shí)添加評(píng)論。給那些還不了解 GitHub Actions 的人介紹一下:它是 GitHub 上的一項(xiàng)新功能,可以實(shí)現(xiàn)許多任務(wù)的自動(dòng)化,通常被視為CI / CD工具(Continuous Integration/Continuous Deployment,持續(xù)集成/持續(xù)部署),能夠進(jìn)行測(cè)試,進(jìn)行質(zhì)量檢查,然后部署。但這還不是它的唯一目標(biāo)。開始時(shí),首先在項(xiàng)目的根文件夾中創(chuàng)建一個(gè).github / workflows 文件夾,你的工作流的定義將會(huì)被放在這里。然后創(chuàng)建一個(gè)新文件,命名為 workflow-pr.yaml。
        name: Python Pull Request Workflowon: [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/[email protected] continue-on-error: true with: reporter: 'github-pr-review' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        這是一個(gè)非常簡(jiǎn)單的工作流,全名為 Python Pull Request Workflow。每個(gè) pull request 都能觸發(fā)它,因此無論何時(shí)創(chuàng)建新的或更新現(xiàn)有的作業(yè),都會(huì)運(yùn)行。上面的工作流僅包含一個(gè) qa 工作,分為 4 個(gè)步驟:


        • actions / checkout @ v1——必須讓 GitHub Actions 工作流知道它可以使用庫中的代碼

        • 使用 actions/setup-python@master 的 Set up Python 配置好一個(gè) Python 版本,在本例中為使用的是 python-version: 3.8。

        • Run unit tests 將運(yùn)行位于項(xiàng)目中的所有單元測(cè)試。為此,我使用的是 pytest,首先需要安裝 pip install pytest,以便可以運(yùn)行下一個(gè)命令 pytest。如果這一步上有任何一個(gè)測(cè)試失敗,則下一個(gè)測(cè)試將不會(huì)運(yùn)行。

        • Wemake Python Styleguide 的這一個(gè)步驟是我們最感興趣的。它使用wemake-services/[email protected] 操作,這是工作流的基本組成單位。你可以在GitHub Marketplace上找到它們

          (https://github.com/marketplace?type=actions)

          就像上述提到的一樣(https://github.com/marketplace/actions/wemake-python-styleguide)。將此代碼配置為(with 語句)以使用github-pr-review reporter,就可以在 code review 中啟用內(nèi)聯(lián)注釋了。在官方網(wǎng)站上可以找到更多受支持的 reporter 選項(xiàng)。最后,此工作流需要傳遞你的 GIHUB_TOKEN,這就是添加 env 語句的原因。

        為了測(cè)試它的運(yùn)行,你需要?jiǎng)?chuàng)建一個(gè)新的 branch,提交一些更改并將其推送到 GitHub。然后創(chuàng)建一個(gè)? pull request,就能觸發(fā)此工作流了。要檢查它,請(qǐng)轉(zhuǎn)到項(xiàng)目中的“Actions”選項(xiàng),如果一切順利則應(yīng)如下圖所示:


        890e7bac41dd9e65cf373e61a7b70360.webp如果單擊“Run unit tests”,則在 console log 中,你將看到測(cè)試報(bào)告:c34e196986d3f61e375ced6e3632b76d.webp如果返回到 Pull request,則應(yīng)該看到添加的注釋。就像這里那樣:https://github.com/wkrzywiec/algorithms-python/pull/677ab39174c81cb54050c7f638dc83d14.webp



        Codecov最后,我們想要一份涵蓋范圍的測(cè)試報(bào)告。為此,我們?cè)俅问褂?pytest 庫,它將為我們生成報(bào)告,然后我們將其上傳到 Codecov,后續(xù)的可視化就由它完成。
        在定義一個(gè)新的工作流之前,你首先需要先創(chuàng)建一個(gè) Codecov 賬號(hào)。因此,你需要先單擊右上角的“Sign Up”按鈕轉(zhuǎn)到https://codecov.io。d08099c5354fdf14f0d86adf0b984ab4.webp然后選擇 GitHub 注冊(cè)。


        94af9859c6d818868caaa6f53d84f4d9.webp


        然后,你將被帶到 GitHub 項(xiàng)目的控制面板,然后需要單擊 Add new repository 按鈕。


        42c03726f7c1c4dbefa66b7840ac4427.webp


        一個(gè)列表將出現(xiàn),包含所有的項(xiàng)目,你可以從中選擇一個(gè)來分析。70187e9a616c896a766eddc4680be889.webp然后會(huì)出現(xiàn)一個(gè)帶有令牌(token)的頁面。把它保存下來,因?yàn)橄乱徊街袝?huì)用到。
        4bf2e4b9bf6ac9b702b62646d7bec4c5.webp現(xiàn)在回到 GitHub 的項(xiàng)目上,然后單擊其“Settings”按鈕。單擊“Secrets”,然后添加一個(gè)新的 secret,這時(shí)就可以用上你在? Codecov 網(wǎng)站上生成的令牌了。要完成這一步,單擊 Add secret。f9d528278b7c752e92d20da637f8bed0.webp好的,一切都已設(shè)置好了,接下來就可以繼續(xù)定義 GitHub 工作流了。
        name: Python Master Workflowon:  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
        再次,我們創(chuàng)建一個(gè)單獨(dú)的文件,命名為 workflow-master.yaml,因?yàn)檫@次我們不想在創(chuàng)建 pull request 時(shí)觸發(fā)此工作流。這個(gè)工作流僅當(dāng)在 master branch 上推送了新的提交時(shí)才會(huì)運(yùn)行。在 jobs 部分中,只有一個(gè)名為 codecov 的作業(yè),包括四步:


        • uses: actions/checkout@v1——這個(gè)步驟,跟上次一樣,也只是為了告訴 GitHub Actions 我們要使用當(dāng)前庫里的文件

        • uses: actions/setup-python@master——這個(gè)步驟之前也提到過,這里我們?cè)O(shè)置的 Python?版本是 3.8

        • 然后是一個(gè)新步驟,負(fù)責(zé)生成覆蓋率報(bào)告(Generate coverage report);這包含一系列腳本,涵蓋了安裝 pytests(pip install pytest),pytest-cov(pip install pytest-cov)和運(yùn)行實(shí)際測(cè)試(pytest-cov =./-cov-report = xml),

        • 最終,生成的測(cè)試覆蓋率報(bào)告可以上傳到 Codecov(Upload coverage to Codecov)。在這里我們使用 uses: codecov / codecov-action @ v1(https://github.com/marketplace/actions/codecov)。在其中,我們提供 3 個(gè)參數(shù):token: ${{ secrets.CODECOV_TOKEN }},取值自我們放置在 GitHub Secrets 保管庫的文件,(之前的步驟生成的)測(cè)試覆蓋率報(bào)告的位置是file:./coverage.xml,而 flags:unittests 是對(duì)我們的單元測(cè)試進(jìn)行分組的標(biāo)志。

        要進(jìn)行測(cè)試,你需要將一些提交 push 到 master branch。這可以直接在你的本地庫中完成,也可以通過合并一個(gè) pull request 完成。如果一切順利,那頁面應(yīng)該是像這樣的:


        5c46f83b6aca30c463bfb02c8808a82f.webp現(xiàn)在,如果你回到 Codecov,回到你的項(xiàng)目控制面板,你應(yīng)該能看到類似的輸出:


        ae46e2a3b65042b6dd4411e173c80f69.webp


        好的,我們做到了?。–heers!)在結(jié)尾之前,我想告訴你的是,能幫你寫出更高質(zhì)量代碼的工具并非只有 CodeFactor,Codecov或wemake-python-styleguide。實(shí)際上,這樣的工具有很多,例如 SonarCloud,Pylint,Coveralls,DeepSource 等等。其中一些可以在 GitHub Marketplace 上找到,如果你不喜歡我提議的這幾個(gè)工具,那么最好從那上面的地方為起點(diǎn)開始尋找。



        結(jié)論
        希望通過這篇博文,你可以了解到,要如何設(shè)置 GitHub 庫來確保寫出高質(zhì)量的代碼。有了這樣的工具集合,你可以找到所有的弱點(diǎn)和 bug,但要記住,不是每個(gè) bug 和每個(gè)問題都值得去花心思。有時(shí)候,最好是更專注于實(shí)際工作,而不是整理那些臭代碼庫。(wink)原文:https://medium.com/@wkrzywiec/how-to-write-good-quality-python-code-with-github-actions-2f635a2ab09a作者:Wojciech Krzywiec,Java開發(fā)工程師,DevOps新手,終生學(xué)習(xí)者。


        崔慶才

        靜覓博客博主,《Python3網(wǎng)絡(luò)爬蟲開發(fā)實(shí)戰(zhàn)》作者

        隱形字

        個(gè)人公眾號(hào):進(jìn)擊的Coder

        8073c81c7c66b7104272d339b3b2eb79.webp7629513f5d402e6a2a728e0edc1b805e.webp

        長按識(shí)別二維碼關(guān)注




        推薦閱讀

        1

        孫楊一夜之間風(fēng)評(píng)變差,從數(shù)據(jù)上看是真的嗎?

        2

        進(jìn)來看看你中了幾條

        3

        如何實(shí)現(xiàn)本地代碼和遠(yuǎn)程的實(shí)時(shí)同步

        4??

        如何用一條命令將網(wǎng)頁轉(zhuǎn)成電腦 App


        好文和朋友一起看~
        瀏覽 62
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            日日摸天天做天天添天天欢 | 水蜜桃成人 | 色中文字幕 | 国产精品日日躁夜夜躁欧美 | 台湾性一交一乱一色一情 | 国产婬荡交换乱婬毛片 | 操小逼片| chinese老头勃起gry | 韩国无码成人三区在线观看 | 日日色综合 |