程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python 項目本地開發指南

編輯:Python

簡介

接著上篇(python項目最佳實踐(上))

繼續把預提交流程、編碼檢測、自動格式化、靜態類型檢測等執行一遍。

面向對象:python初、中級、有一定其他語言基礎准備轉python的人員

本文目標:了解如何標准化、規范化開始一個python項目

在提交代碼前運行檢查

版本控制工具:git

具體如何安裝這裡不做說明,請參考git官網。

在初始化一個新的git倉庫後會有個 .gitignore 文件,該文件是用來忽略臨時和二進制文件提交到存儲庫,

對於python項目,github上有個模板,鏈接:.gitignore

問題:為什麼要在提交前運行檢查?

在你將一個功能開發完後將代碼提交到遠程倉庫之前,很容易錯過一些內容,比如代碼的格式風格錯誤,通不過 CI 自動化,這個時候自動代碼檢查就可以讓你避免不必要的麻煩。

pre-commit 就可以完美解決該問題,它會在每一個git提交前運行自動檢測工具,雖然是用python編寫的,但是可以用於各種編程語言項目。

安裝 pre-commit

如何使用 pre-commit

可以看到,pre-commit 已經為我們創建好一些鉤子

# 讓我們 手動運行檢查:

運行後,它已經找到了問題,提示文件末尾沒有換行符,不符合編碼規范。

其實在運行pre-commit後,它已經自動發現問題並解決了,在運行發現已經沒有問題了。

讓git 使用腳本自動檢測

讓我們測試下 git 提交,隨便更改一點東西,進行提交測試

更新 pre-commit

使用 Flake8 linter 進行代碼檢測

linter 是什麼?

在ide中提示代碼錯誤和語法錯誤檢測。在 linter 的幫助下,IDE 可以讓你時刻知道代碼錯誤。

python 的 linters 有很多,常用的有 flake8 和 pylint。

pylint 是一個非常嚴格的 linter,它不允許你的代碼中有任何一點小錯誤,你的代碼要嚴格按照要求規格編寫,否則就會被標記出來。雖然這種方式能讓你的代碼更安全和規范,但也會導致你的開發時間延長。

而在大多的開源項目中都是使用 flake8,其相對寬松,但是足夠使用了。

linter 是什麼?

在ide中提示代碼錯誤和語法錯誤檢測。可以在你代碼運行之前提示你的代碼有哪些錯誤。在 linter 的幫助下,IDE 可以讓你時刻知道代碼錯誤。

python 的 linters 有很多,常用的有 flake8 和 pylint,

pylint 是一個非常嚴格的 linter,它不允許你的代碼中有任何一點小錯誤,你的代碼要嚴格按照要求規格編寫,否則就會被標記出來。雖然這種方式能讓你的代碼更安全和規范,但是這個會導致你的開發時間延長。

而在大多的開源項目中都是使用 flake8,其相對寬松,但是足夠使用了。

Python風格指南 - PEP8.

每一個python 開發人員都應該且必須知PEP8,以及 Zen of Python.

安裝 Flake8

如果你是用的是vscode,那麼你只需要在 ctrl+shift+p 輸入 linter 選擇 python: linter, 然後選擇 flake8

VScode 會自動選擇你的虛擬環境,並安裝 flake8

也可以使用poetry 將 flake8 添加到 開發環境

poetry add flake --dev

手動執行 flake8 檢測

將 flake8 添加到 git 鉤子中

將 flake8 添加到 git 自動代碼前運行。

代開 上面 pre-commit 添加的 .pre-commit-config.yaml, 添加如下內容, 這樣在下次自動提交代碼時就會自動運行。

使用 Black 格式化代碼

那麼為什麼需要格式化代碼呢?

在多人開發的項目中,我們無法保證每個開發人員的編碼風格一致,即使大家都按照pep8的要求編碼,也無法做到萬無一失,畢竟人是會犯錯誤的,有時你在接手另外一個同事開發的功能時,可能會遇到和你自己編碼風格完全不同的代碼,你可能會看起來有點吃力和別扭,此時程序的優勢就體現出來,借助 Black 按照團隊指定的格式來自動格式化代碼,讓整個團隊成員的編碼風格逐漸一致。

安裝 Black

在 pyproject.tom 配置文件中配置 Black

執行Black

我們在執行預提交檢測

同樣 Black 加入到 git 鉤子中

使用 Mypy 進行靜態類型檢測

為什麼要使用靜態類型檢查?

靜態代碼分析工具,可確保代碼是類型安全的;可以使解釋器更好的進行代碼的檢測,使代碼出錯的概率大大降低,並降低團隊開發人員上手代碼的難度, 使得代碼對人來說更具可讀性。關於 Mypy這裡不做過多講解,我們現在只討論一個項目的大概流程如何進行。具體的Mypy講解請參考官方文檔,

官方文檔地址 Mypy

安裝mypy

使用 mypy

將 mypy 添加到 git 鉤子

將以下內容添加到 .pre-commit-config.yaml

使用 isort 對 import 進行自動排序

PEP8規定導入應按以下順序排序:標准庫、第三方庫、本地庫。此外,我們希望 import 美觀且對人類友好。

剛好 isort 可以很好的做到這點, 下面是 isort 的官方示例:

錯誤示例(不優雅的 包導入)

正確合理示例

把 isort 添加到 git hooks

最後:快速配置示例

快速開啟一個新項目的所有流程。

1.使用 poetry安裝依賴

2.配置 pyproject.tom 文件

3.setup.cfg 文件

4. .pre-commit-config.yaml 文件

如果你看完前後兩篇教程,恭喜你應該已經知道如何優雅的開啟一個新的python項目,如果還不太清楚具體流程,那麼,實踐是最好的老師。如果你記不住具體的流程也沒關系,我們最後提供設置整個項目的快捷步驟,只需要幾分鐘就能快速開啟python新項目。接下來就交給你了,開始動手實踐一遍吧~

[參考鏈接]

結構化您的工程

語義化版本

Toml語言

Poetry官網

Pyenv

pyenv-win

廖雪峰-單元測試

pytest-cov

Best_Practice_For_Python最佳實踐指南

Python中PEP8、flake8、autopep8、black

我為什麼不喜歡 black

Mypy

PEP8

聲明:本文由南京林科斯拉原創發布,轉載請注明。

聯系我們:電話 400-828-1855。


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved