国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁(yè) 後端開(kāi)發(fā) Python教學(xué) 為初學(xué)者組織和維護(hù) Python 程式碼庫(kù)的步驟

為初學(xué)者組織和維護(hù) Python 程式碼庫(kù)的步驟

Nov 04, 2024 am 06:58 AM

我寫(xiě)這篇文章的原因是分享一些關(guān)於保持專(zhuān)案乾淨(jìng)的見(jiàn)解,即使有很多貢獻(xiàn)者??紤]到資料不斷變化的性質(zhì)以及 Python 程式庫(kù)和應(yīng)用程式中的處理需求,這一點(diǎn)對(duì)於資料工程師來(lái)說(shuō)尤其重要。

標(biāo)題可能聽(tīng)起來(lái)有點(diǎn)標(biāo)題黨,但如果您遵循這些步驟,您的 Python 程式碼將變得更容易管理。如果您是高級(jí)開(kāi)發(fā)人員,您可能不會(huì)在這裡找到任何新東西 - 別擔(dān)心,我為您準(zhǔn)備了一個(gè)有趣的模因。

Steps to Organize and Maintain Your Python Codebase for Beginners

第 1 步:版本控制

這可能看起來(lái)微不足道,但我實(shí)際上認(rèn)識(shí)一些人,他們只將程式碼儲(chǔ)存在本地電腦上 - 不幸的是,由於他們沒(méi)有在其他地方備份它,所以丟失了程式碼。有許多可用的版本控制系統(tǒng),例如 Git,它可與 GitHub、GitLab 和 Bitbucket 等平臺(tái)搭配使用。雖然 Git 是許多人的首選,但 SVN (Subversion) 和 Mercurial 等其他版本控制系統(tǒng)仍然在程式碼管理中發(fā)揮重要作用。

在本指南中,我打算建立一個(gè)小型示範(fàn) Python 函式庫(kù),其中包含一個(gè)函數(shù)來(lái)說(shuō)明基本資料處理。它並不是一個(gè)完整的工具包,而是作為一個(gè)簡(jiǎn)單的範(fàn)例來(lái)演示程式碼品質(zhì)、環(huán)境管理和 CI/CD 工作流程等最佳實(shí)踐。

首先,我為我們的示範(fàn) Python 庫(kù)建立了一個(gè)儲(chǔ)存庫(kù),並將其命名為 blog_de_toolkit。它是公開(kāi)的,因此請(qǐng)隨意分叉它並使用現(xiàn)有程式碼作為您自己的專(zhuān)案的起點(diǎn)。由於良好的文檔至關(guān)重要,因此我提供了一個(gè)建議的空自述文件。為了保持倉(cāng)庫(kù)整潔,我添加了一個(gè)預(yù)設(shè)的 Python .gitignore 模板,以防止上傳不必要的檔案。

Steps to Organize and Maintain Your Python Codebase for Beginners

現(xiàn)在我們有了儲(chǔ)存庫(kù),我們可以複製它。

Steps to Organize and Maintain Your Python Codebase for Beginners

我不打算在這裡深入探討 Git 指令——你可以在網(wǎng)路上找到大量教學(xué)。如果您不喜歡使用普通終端 CLI,您也可以使用 GitHub Desktop 或 SourceTree 等工具來(lái)管理儲(chǔ)存庫(kù),它們提供了更直覺(jué)的介面。

就我個(gè)人而言,我非常喜歡使用 GitHub Desktop。因此,讓我們將儲(chǔ)存庫(kù)克隆到本機(jī)電腦並在您喜歡的 IDE 中開(kāi)啟它。

Steps to Organize and Maintain Your Python Codebase for Beginners

讓我們看看到目前為止我們得到了什麼:

Steps to Organize and Maintain Your Python Codebase for Beginners

開(kāi)始還不錯(cuò)!

第 2 步:專(zhuān)案結(jié)構(gòu)

對(duì)於第 2 步,我們將組織我們的 de_toolkit 項(xiàng)目。良好的結(jié)構(gòu)可以輕鬆找到東西並保持一切整潔。我們將為程式碼、測(cè)試和文件建立資料夾,設(shè)定一個(gè)簡(jiǎn)單、乾淨(jìng)的框架來(lái)建置。

blog_de_toolkit/  
│  
├── de_toolkit/  
│   ├── __init__.py  
│   └── data_tools.py  
│  
├── tests/  
│   ├── __init__.py  
│   └── test_data_tools.py  
│  
├── .gitignore  
├── setup.py  
└── README.md

我們有一個(gè)主資料夾來(lái)存放我們將要添加的所有有用程式碼,一個(gè)tests 資料夾用於我們未來(lái)的單元測(cè)試,以及一個(gè).gitignore 將不必要的檔案保留在我們的存儲(chǔ)庫(kù)之外。還有一個(gè) setup.py 文件,這是使專(zhuān)案可安裝的基本設(shè)定。我現(xiàn)在不會(huì)詳細(xì)介紹它,因?yàn)槲覀兩葬釋⒃?strong>第 8 步:創(chuàng)建分發(fā)包中介紹它。

在設(shè)定專(zhuān)案結(jié)構(gòu)時(shí),保持一致會(huì)產(chǎn)生巨大的差異。隨著專(zhuān)案的發(fā)展,最好將其分解為更小的模組,例如將 data_tools.py 拆分為 csv_tools.py 和 json_tools.py。這樣,您就可以更輕鬆地管理和找到所需內(nèi)容,而無(wú)需翻閱長(zhǎng)文件。

新增 docs/ 資料夾也是一個(gè)明智之舉,即使它只是以一些註解開(kāi)頭。它將幫助您(和其他人)隨著專(zhuān)案的發(fā)展追蹤事情的運(yùn)作方式。如果您正在使用 YAML 或 JSON 等配置,configs/ 資料夾可以幫助保持整潔。如果您打算編寫(xiě)自動(dòng)化或測(cè)試腳本,scripts/ 資料夾將使它們井然有序。

此時(shí),我們需要安裝一些額外的函式庫(kù)來(lái)繼續(xù)建置專(zhuān)案。

第三步:開(kāi)發(fā)環(huán)境

當(dāng)然,我們可以從命令列執(zhí)行 pip install 來(lái)安裝我們需要的依賴(lài)項(xiàng)。但是,如果我們要處理多個(gè)項(xiàng)目,每個(gè)專(zhuān)案都需要不同版本的 Python 和函式庫(kù)怎麼辦?這就是虛擬環(huán)境的用武之地——它們隔離每個(gè)專(zhuān)案的依賴(lài)關(guān)係,包括特定的 Python 版本,因此一切都保持獨(dú)立和獨(dú)立。

幸運(yùn)的是,有許多工具可以創(chuàng)建虛擬環(huán)境,因此您可以選擇最適合您的工具:

  • virtualenv

  • venv

  • 康達(dá)

  • pyenv

  • pipenv

  • 詩(shī)歌

就我個(gè)人而言,我是 pyenv 的忠實(shí)粉絲,所以這就是我將在這裡使用的。我已經(jīng)將它安裝在我的筆記型電腦上,因?yàn)樗俏夜ぷ骱蛡€(gè)人專(zhuān)案的首選。

讓我們從安裝 Python 開(kāi)始:

blog_de_toolkit/  
│  
├── de_toolkit/  
│   ├── __init__.py  
│   └── data_tools.py  
│  
├── tests/  
│   ├── __init__.py  
│   └── test_data_tools.py  
│  
├── .gitignore  
├── setup.py  
└── README.md

如果 pyenv 無(wú)法辨識(shí)此 Python 版本,請(qǐng)先嘗試更新它。例如,如果您使用的是 Mac 並使用 Homebrew 安裝了 pyenv,請(qǐng)執(zhí)行:

pyenv install 3.12.2

如果遇到錯(cuò)誤 ModuleNotFoundError:沒(méi)有名為 '_lzma' 的模組,請(qǐng)嘗試:

brew update && brew upgrade pyenv

接下來(lái),在我們的專(zhuān)案資料夾中,建立一個(gè)新的虛擬環(huán)境:

brew install readline xz

現(xiàn)在,將本機(jī)Python版本設(shè)定為您剛剛建立的虛擬環(huán)境:

pyenv virtualenv 3.12.2 de_toolkit

如果在 MacOS 上執(zhí)行指令後環(huán)境沒(méi)有切換,網(wǎng)路上有一個(gè)有用的執(zhí)行緒提供了解決方案。一旦一切設(shè)定正確,您應(yīng)該在命令列開(kāi)頭看到 de_toolkit,如下所示:

Steps to Organize and Maintain Your Python Codebase for Beginners

現(xiàn)在,讓我們安裝我們的依賴(lài)項(xiàng):

pyenv local de_toolkit

接下來(lái),我們將把所有已安裝的軟體包及其版本儲(chǔ)存到requirements.txt 檔案中。這使得共享專(zhuān)案的依賴(lài)項(xiàng)或在其他地方重新創(chuàng)建相同的環(huán)境變得容易:

pip install setuptools wheel twine pandas 

這是我們得到的已安裝軟體包的清單:

Steps to Organize and Maintain Your Python Codebase for Beginners

當(dāng)然,如果您願(yuàn)意,您可以編輯requirements.txt 檔案以?xún)H保留主庫(kù)及其版本。

第 4 步:管理憑證與秘密

這一步至關(guān)重要—可能是最重要的步驟之一。您可能聽(tīng)說(shuō)過(guò)有關(guān) GitHub 儲(chǔ)存庫(kù)中的憑證被洩露或敏感令牌意外在公共場(chǎng)合共享的恐怖故事。為了避免這種情況,必須從一開(kāi)始就將敏感資訊排除在程式碼之外。否則,很容易忘記您硬編碼了資料庫(kù)密碼,推送了更改,然後突然——您的憑證現(xiàn)在公開(kāi)了。

硬編碼密碼、API 金鑰或資料庫(kù)憑證是主要的安全風(fēng)險(xiǎn)。如果它們進(jìn)入公共倉(cāng)庫(kù),它們可能會(huì)損害您的整個(gè)系統(tǒng)。處理秘密的最安全方法是將它們儲(chǔ)存在環(huán)境變數(shù)或 .env 檔案中。為了幫助將這些變數(shù)載入到您的 Python 專(zhuān)案中,我們將使用 python-dotenv 函式庫(kù)。它從 .env 檔案中讀取鍵值對(duì),並將它們用作程式碼中的環(huán)境變數(shù)。

首先,安裝庫(kù):

pip freeze > requirements.txt

在專(zhuān)案資料夾中建立一個(gè) .env 文件,其中包含以下內(nèi)容:

pip install python-dotenv

現(xiàn)在,讓我們修改 data_tools.py 以使用 python-dotenv:

載入這些機(jī)密

當(dāng)您呼叫 load_dotenv() 時(shí),它會(huì)在目前目錄中搜尋 .env 檔案並將其內(nèi)容載入到環(huán)境中。使用 os.getenv() 可讓您在程式碼中安全地存取這些變量,使憑證與原始程式碼隔離並降低意外暴露的風(fēng)險(xiǎn)。

一個(gè)關(guān)鍵提示是避免將 .env 檔案提交到版本控制。將其新增至 .gitignore 以防止意外推送:

blog_de_toolkit/  
│  
├── de_toolkit/  
│   ├── __init__.py  
│   └── data_tools.py  
│  
├── tests/  
│   ├── __init__.py  
│   └── test_data_tools.py  
│  
├── .gitignore  
├── setup.py  
└── README.md

如果您使用 VSCode,有一個(gè)有用的 dotenv 擴(kuò)充功能可以自動(dòng)識(shí)別您的 .env * 檔案。如果您喜歡從終端工作,您可以匯出 *.env 文件,如下所示:

pyenv install 3.12.2

第五步:編寫(xiě)程式碼

在處理專(zhuān)案時(shí),嘗試編寫(xiě)易於理解和管理的小型、可重複使用的函數(shù)。一個(gè)好的經(jīng)驗(yàn)法則是:「如果您使用它超過(guò)兩次,請(qǐng)將其變成一個(gè)函數(shù)?!?/em>

在我們的 data_tools.py 中,我們建立一個(gè)函數(shù)來(lái)示範(fàn)典型的資料工程邏輯,例如從 CSV 載入資料並清理它:

專(zhuān)業(yè)提示:在 Python 中堅(jiān)持使用 snake_case

作為函數(shù)和變數(shù)名稱(chēng) - 它可以使您的程式碼保持一致且易於閱讀。避免使用 x 或 df2 等神秘名稱(chēng);清晰的描述性名稱(chēng)使您的程式碼更易於使用。

我們?cè)谶@裡使用文件字串來(lái)描述函數(shù)的功能、參數(shù)和傳回類(lèi)型。這使得其他開(kāi)發(fā)人員(以及未來(lái)的你)可以輕鬆了解如何使用該功能。有幾種流行的文檔字串約定,但最常見(jiàn)的包括 PEP 257、Google Style 和 NumPy Style:

對(duì)於較小的函數(shù),PEP 257 通常就足夠了,但對(duì)於更複雜的項(xiàng)目,Google 或 NumPy 樣式提供了更多的清晰度和結(jié)構(gòu)。

Python 中的類(lèi)型提示(如我們範(fàn)例中的 file_path: str)顯示函數(shù)輸入和輸出的預(yù)期資料類(lèi)型。它們提高了可讀性,幫助發(fā)現(xiàn)錯(cuò)誤,並透過(guò)設(shè)定明確的期望使協(xié)作變得更容易。

以下是類(lèi)型提示如何改進(jìn)函數(shù)簽章的範(fàn)例:

blog_de_toolkit/  
│  
├── de_toolkit/  
│   ├── __init__.py  
│   └── data_tools.py  
│  
├── tests/  
│   ├── __init__.py  
│   └── test_data_tools.py  
│  
├── .gitignore  
├── setup.py  
└── README.md

在這個(gè)範(fàn)例中,類(lèi)型提示 file_path: str 表示參數(shù)應(yīng)該是一個(gè)字串,而 ->; pd.DataFrame 指示函數(shù)傳回一個(gè) Pandas DataFrame。這使得該函數(shù)的行為一目了然。類(lèi)型提示還可以與 IDE 和 linter(例如 PyCharm、VSCode 或 mypy)很好地配合使用,在傳遞不相容的類(lèi)型時(shí)提供自動(dòng)完成和早期警告。

如果函數(shù)可以傳回多種型別或無(wú),您可以使用輸入模組中的可選

pyenv install 3.12.2

這表示該函數(shù)可以傳回字串或 None。對(duì)於更複雜的資料結(jié)構(gòu),您可以使用輸入模組中的 List、DictTuple 來(lái)指定預(yù)期類(lèi)型。

第 6 步:編寫(xiě)測(cè)試

編寫(xiě)單元測(cè)試是一種簡(jiǎn)單的方法,可以確保您的程式碼執(zhí)行預(yù)期的操作,而不會(huì)出現(xiàn)意外的情況。它們可以幫助您及早發(fā)現(xiàn)錯(cuò)誤並充滿(mǎn)信心地進(jìn)行更改,因?yàn)槟酪磺腥匀话搭A(yù)期運(yùn)行。在 Python 中,有多個(gè)可用於單元測(cè)試的函式庫(kù),每個(gè)函式庫(kù)都有其優(yōu)點(diǎn)和生態(tài)系統(tǒng):

  • 單元測(cè)試

  • pytest

  • 鼻子2

  • 假設(shè)

對(duì)於本指南,我們將使用 pytest 因?yàn)樗?jiǎn)單、靈活且易於使用。您可以使用以下命令安裝它:

brew update && brew upgrade pyenv

接下來(lái),在 tests/ 資料夾中建立一個(gè)名為 test_data_tools.py 的檔案。讓我們?yōu)橹皩?shí)現(xiàn)的程式碼編寫(xiě)一些測(cè)試。這是我們的 load_and_clean_data() 函數(shù)和環(huán)境變數(shù)檢索邏輯的範(fàn)例測(cè)試:

在 test_load_and_clean_data() 中,我們使用 StringIO 模擬 CSV 檔案作為輸入。這使我們無(wú)需實(shí)際文件即可進(jìn)行測(cè)試。此測(cè)試驗(yàn)證函數(shù)是否正確刪除重複項(xiàng)和 NaN 值,檢查 DataFrame 是否沒(méi)有遺失數(shù)據(jù),並確認(rèn)「名稱(chēng)」列中的唯一條目正確。

在test_get_database_url()和test_get_api_key()中,我們使用pytest提供的monkeypatch工具來(lái)在測(cè)試過(guò)程中暫時(shí)設(shè)定環(huán)境變數(shù)。這確保函數(shù)傳回預(yù)期值,而不需要真正的環(huán)境變數(shù)。

要執(zhí)行所有測(cè)試,只需執(zhí)行以下命令:

blog_de_toolkit/  
│  
├── de_toolkit/  
│   ├── __init__.py  
│   └── data_tools.py  
│  
├── tests/  
│   ├── __init__.py  
│   └── test_data_tools.py  
│  
├── .gitignore  
├── setup.py  
└── README.md

Steps to Organize and Maintain Your Python Codebase for Beginners

我喜歡pytest的原因之一是它的靈活性。它超越了基本的單元測(cè)試,提供了強(qiáng)大的功能,如夾具、參數(shù)化測(cè)試和插件。夾具可讓您設(shè)定多個(gè)測(cè)試可重複使用的測(cè)試資料或配置,讓您的程式碼保持乾燥(不要重複)。參數(shù)化測(cè)試可讓您使用不同的輸入來(lái)執(zhí)行相同的測(cè)試,從而節(jié)省時(shí)間並減少重複。如果您需要擴(kuò)展 pytest 的功能,可以使用廣泛的插件生態(tài)系統(tǒng),例如測(cè)試 Django 應(yīng)用程式、測(cè)量程式碼覆蓋率或模擬 HTTP 請(qǐng)求。

第 7 步:程式碼品質(zhì)與預(yù)提交 Hook

保持高程式碼品質(zhì)可確保您的程式碼易於閱讀、維護(hù)且沒(méi)有常見(jiàn)錯(cuò)誤。有多種工具可以幫助實(shí)施一致的編碼標(biāo)準(zhǔn)、自動(dòng)格式化程式碼並及早偵測(cè)潛在問(wèn)題。一些流行的選項(xiàng)包括 pylint、flake8、黑色檢測(cè)秘密。

  • pylint 強(qiáng)制執(zhí)行編碼標(biāo)準(zhǔn)並捕捉常見(jiàn)錯(cuò)誤。

  • flake8 結(jié)合了偵測(cè)樣式違規(guī)和邏輯錯(cuò)誤的工具。

  • black 是一個(gè)固執(zhí)己見(jiàn)的格式化程序,可確保您的程式碼遵循 PEP8 標(biāo)準(zhǔn)。

  • 偵測(cè)秘密掃描您的程式碼以防止硬編碼的秘密被洩露。

您可以透過(guò)以下方式安裝這些工具:

pyenv install 3.12.2

例如,在特定檔案或目錄上執(zhí)行 pylint:

brew update && brew upgrade pyenv

Steps to Organize and Maintain Your Python Codebase for Beginners

您將收到一份報(bào)告,其中包含警告和改進(jìn)程式碼的建議。要忽略特定警告,您可以使用:

brew install readline xz

您也可以使用flake8來(lái)找出樣式問(wèn)題和邏輯錯(cuò)誤:

blog_de_toolkit/  
│  
├── de_toolkit/  
│   ├── __init__.py  
│   └── data_tools.py  
│  
├── tests/  
│   ├── __init__.py  
│   └── test_data_tools.py  
│  
├── .gitignore  
├── setup.py  
└── README.md

Steps to Organize and Maintain Your Python Codebase for Beginners

要自動(dòng)格式化程式碼,請(qǐng)執(zhí)行 black:

pyenv install 3.12.2

您可以使用預(yù)先提交掛鉤自動(dòng)執(zhí)行該過(guò)程,而不是每次進(jìn)行更改時(shí)手動(dòng)運(yùn)行這些工具。預(yù)提交掛鉤在每次提交之前自動(dòng)運(yùn)行,如果任何工具失敗,則會(huì)阻止提交。

首先,安裝預(yù)先提交軟體包:

brew update && brew upgrade pyenv

接下來(lái),在專(zhuān)案目錄中建立一個(gè) .pre-commit-config.yaml 文件,其中包含以下內(nèi)容(這裡我使用了所有我最喜歡的基本預(yù)提交):

啟動(dòng)本機(jī)儲(chǔ)存庫(kù)中的預(yù)提交掛鉤:

blog_de_toolkit/  
│  
├── de_toolkit/  
│   ├── __init__.py  
│   └── data_tools.py  
│  
├── tests/  
│   ├── __init__.py  
│   └── test_data_tools.py  
│  
├── .gitignore  
├── setup.py  
└── README.md

現(xiàn)在,每次您嘗試提交時(shí),這些工具都會(huì)自動(dòng)運(yùn)行。如果任何工具失敗,提交將被阻止,直到問(wèn)題解決。您也可以在程式碼庫(kù)中手動(dòng)執(zhí)行所有掛鉤:

pyenv install 3.12.2

第8步:創(chuàng)建分發(fā)包

現(xiàn)在我們已經(jīng)建立了我們的項(xiàng)目,編寫(xiě)了一些程式碼,添加了測(cè)試並設(shè)定了預(yù)提交掛鉤,下一步是弄清楚其他人(甚至未來(lái)的我們)如何輕鬆使用它。打包項(xiàng)目使這成為可能。它允許我們將所有內(nèi)容整齊地捆綁在一起,以便無(wú)需手動(dòng)複製文件即可安裝和使用。

要分享您的項(xiàng)目,您需要正確建置套件、編寫(xiě)有意義的自述文件、建立啟動(dòng)腳本並產(chǎn)生分發(fā)包。一個(gè)好的自述文件通常包括專(zhuān)案名稱(chēng)和其功能的簡(jiǎn)要描述、安裝說(shuō)明、使用範(fàn)例、設(shè)定環(huán)境的開(kāi)發(fā)說(shuō)明以及貢獻(xiàn)指南。您可以在儲(chǔ)存庫(kù)中找到我們的 blog_de_toolkit 專(zhuān)案的簡(jiǎn)單 README.md 範(fàn)例。

任何 Python 套件的核心都是 setup.py 檔案。該文件是我們定義打包和安裝專(zhuān)案所需的元資料和配置的地方。它包括項(xiàng)目的 名稱(chēng)、版本描述,這使其可識(shí)別。 long_description 從 README 文件中讀取內(nèi)容,以便當(dāng)用戶(hù)在 PyPI 上看到該項(xiàng)目時(shí)為他們提供有關(guān)該項(xiàng)目的更多背景信息。我們?cè)?install_requires 清單中指定依賴(lài)項(xiàng),以便它們與套件一起自動(dòng)安裝。 entry_points 部分定義了命令列介面 (CLI) 條目,以便使用者可以從終端運(yùn)行該工具。我們使用 find_packages() 來(lái)包含套件中的所有子模組,並且 classifiers 部分提供元數(shù)據(jù),例如專(zhuān)案使用的 Python 版本和授權(quán)。最後,python_requires 欄位確保套件僅安裝在相容的 Python 版本上。這是我們的 blog_de_toolkit 專(zhuān)案的 setup.py 設(shè)定:

配置setup.py後,您可以建立分發(fā)包。先安裝必要的工具:

blog_de_toolkit/  
│  
├── de_toolkit/  
│   ├── __init__.py  
│   └── data_tools.py  
│  
├── tests/  
│   ├── __init__.py  
│   └── test_data_tools.py  
│  
├── .gitignore  
├── setup.py  
└── README.md

然後建構(gòu)套件:

pyenv install 3.12.2

此指令建立兩個(gè)分發(fā)檔案:

  • sdist:來(lái)源存檔(例如 .tar.gz)

  • bdist_wheel:建置的套件(例如.whl)

Steps to Organize and Maintain Your Python Codebase for Beginners

這些檔案將位於 dist/ 目錄中。要測(cè)試該套件,請(qǐng)使用以下命令在本地安裝它:

brew update && brew upgrade pyenv

您也可以透過(guò)執(zhí)行來(lái)測(cè)試 CLI 指令:

brew install readline xz

他應(yīng)該列印資料庫(kù) URL、API 金鑰以及來(lái)自 sample_data.csv.

的已清除資料

如果您想公開(kāi)分享該包,您可以將其上傳到PyPI。首先,安裝 Twine:

pyenv virtualenv 3.12.2 de_toolkit

然後上傳套件:

pyenv local de_toolkit

系統(tǒng)將提示您輸入 PyPI 憑證。上傳後,其他人可以直接從 PyPI 安裝您的套件:

pip install setuptools wheel twine pandas 

第10步:保護(hù)主分支

隨著您的專(zhuān)案的發(fā)展,更多的人通常會(huì)同時(shí)在同一個(gè)程式碼庫(kù)上工作。如果沒(méi)有適當(dāng)?shù)谋Wo(hù)措施,錯(cuò)誤、未經(jīng)測(cè)試的程式碼或意外合併很容易潛入並造成混亂。為了保持事情順利進(jìn)行並保持高標(biāo)準(zhǔn),保護(hù)主幹就變得至關(guān)重要。在此步驟中,我們將了解如何設(shè)定分支保護(hù)規(guī)則,並分享一些對(duì)拉取請(qǐng)求進(jìn)行順利程式碼審查的技巧。

分支保護(hù)規(guī)則確保任何人都無(wú)法在未通過(guò)測(cè)試或程式碼審查的情況下直接推送到主分支。這可以防止未完成的功能、錯(cuò)誤或不良程式碼潛入並破壞專(zhuān)案。它還透過(guò)要求拉取請(qǐng)求來(lái)促進(jìn)團(tuán)隊(duì)合作,讓其他人有機(jī)會(huì)提供回饋。另外,自動(dòng)檢查(如測(cè)試和 linter)可確保程式碼在合併之前是可靠的。

在 GitHub 上設(shè)定分支保護(hù)規(guī)則非常簡(jiǎn)單。前往儲(chǔ)存庫(kù)的設(shè)定,然後按一下「程式碼與自動(dòng)化」部分下的分支。尋找分支保護(hù)規(guī)則並點(diǎn)選新增分支保護(hù)規(guī)則。在分支名稱(chēng)欄位中輸入 main,現(xiàn)在是時(shí)候調(diào)整一些設(shè)定了。

Steps to Organize and Maintain Your Python Codebase for Beginners

您可以設(shè)定分支保護(hù)規(guī)則來(lái)要求拉取請(qǐng)求審查,確保有人在合併之前檢查程式碼。狀態(tài)檢查可確保測(cè)試通過(guò)並且 linter 順利運(yùn)行,並使分支保持最新變更有助於避免衝突。如果需要,您可以限制誰(shuí)可以推送到分支,甚至需要簽名提交以提高安全性。一切設(shè)定完畢後,點(diǎn)擊建立,就像這樣 - 不再直接推送或跳過(guò)測(cè)試。

當(dāng)您的拉取請(qǐng)求接受審核時(shí),最好讓審核者感到輕鬆。首先清楚地描述您的更改的作用以及為什麼需要它們。使用有意義的提交訊息來(lái)反映已更新的內(nèi)容。如果更改較小且重點(diǎn)突出,則審核過(guò)程會(huì)變得更加順利和更快。不要忘記禮貌地回覆評(píng)論並跟進(jìn)請(qǐng)求的更改 - 這表明您重視反饋並有助於保持積極的合作。

如果您是審查拉取請(qǐng)求的人,那麼您的工作不僅僅是發(fā)現(xiàn)錯(cuò)誤 - 還包括改進(jìn)程式碼並支援您的隊(duì)友。首先閱讀拉取請(qǐng)求描述,以了解更改試圖實(shí)現(xiàn)的目標(biāo)。專(zhuān)注於提供建設(shè)性回饋——如果需要,建議替代方案,並解釋為什麼它們可能效果更好。透過(guò)簡(jiǎn)單的「重構(gòu)不錯(cuò)?!」來(lái)認(rèn)可優(yōu)秀的工作也有助於創(chuàng)造正面的評(píng)論體驗(yàn)。密切注意測(cè)試,確保它們存在、相關(guān)且通過(guò)。如果有些事情不清楚,請(qǐng)?zhí)岢鰡?wèn)題而不是做出假設(shè)。歸根結(jié)底,評(píng)論是關(guān)於團(tuán)隊(duì)合作的——合作使專(zhuān)案變得更好。

使用審核範(fàn)本可以讓每個(gè)人都專(zhuān)注於重要的事情,從而使流程更加順利。以下是拉取請(qǐng)求審核範(fàn)本的範(fàn)例:

blog_de_toolkit/  
│  
├── de_toolkit/  
│   ├── __init__.py  
│   └── data_tools.py  
│  
├── tests/  
│   ├── __init__.py  
│   └── test_data_tools.py  
│  
├── .gitignore  
├── setup.py  
└── README.md

將這樣的範(fàn)本加入到您的貢獻(xiàn)指南中或?qū)⑵溥B結(jié)到儲(chǔ)存庫(kù)中,可以讓審閱者輕鬆保持在正軌上。它還使評(píng)論之間的內(nèi)容保持一致,幫助團(tuán)隊(duì)維護(hù)乾淨(jìng)且有組織的程式碼庫(kù)。

第 11 步:CI/CD 的 GitHub Actions

基於保護(hù)主分支的重要性,確保在合併或部署之前對(duì)每個(gè)程式碼變更進(jìn)行正確的測(cè)試、審查和驗(yàn)證也至關(guān)重要。這就是持續(xù)整合(CI)持續(xù)交付/部署(CD)發(fā)揮作用的地方。 CI/CD 自動(dòng)化執(zhí)行測(cè)試、執(zhí)行程式碼檢查和部署變更的流程,為開(kāi)發(fā)人員提供快速回饋並減少錯(cuò)誤進(jìn)入生產(chǎn)的機(jī)會(huì)。

GitHub Actions 是直接整合到 GitHub 的自動(dòng)化工具。它使您能夠建立回應(yīng)儲(chǔ)存庫(kù)中的事件(例如推送或拉取請(qǐng)求)的工作流程。在 GitHub Actions 中,我們可以自動(dòng)執(zhí)行多項(xiàng)關(guān)鍵任務(wù)以維護(hù)健康的程式碼庫(kù)。例如:

  • 每當(dāng)推送程式碼或建立拉取請(qǐng)求時(shí)執(zhí)行測(cè)試,確保新的變更不會(huì)破壞任何內(nèi)容。

  • 檢查程式碼樣式和 linting 以執(zhí)行一致的編碼標(biāo)準(zhǔn)。

  • 應(yīng)用預(yù)提交掛鉤來(lái)格式化程式碼並捕獲尾隨空格等小問(wèn)題。

  • 在所有檢查通過(guò)後產(chǎn)生文件甚至部署程式碼。

讓我們?cè)O(shè)定一個(gè) GitHub Actions 工作流程,執(zhí)行我們的單元測(cè)試,並在主分支上發(fā)生推送或拉取請(qǐng)求時(shí)應(yīng)用預(yù)提交 linter(如黑色)。

首先,建立工作流程檔案:

blog_de_toolkit/  
│  
├── de_toolkit/  
│   ├── __init__.py  
│   └── data_tools.py  
│  
├── tests/  
│   ├── __init__.py  
│   └── test_data_tools.py  
│  
├── .gitignore  
├── setup.py  
└── README.md

這是ci.yml的內(nèi)容:

每當(dāng)在主分支上推送程式碼或開(kāi)啟拉取請(qǐng)求時(shí),此工作流程都會(huì)自動(dòng)進(jìn)行測(cè)試和檢查。它確保在合併代碼之前通過(guò)所有品質(zhì)檢查。 actions/checkout 操作將儲(chǔ)存庫(kù)複製到執(zhí)行器中,我們使用 actions/setup-python 為工作流程設(shè)定 Python 3.12。依賴(lài)項(xiàng)是使用 pip 從requirements.txt 安裝的。之後,所有測(cè)試都使用 pytest 運(yùn)行,預(yù)先提交掛鉤確保程式碼遵循格式和樣式指南。如果任何測(cè)試或檢查失敗,工作流程就會(huì)停止,以防止損壞的程式碼合併。

讓我們來(lái)測(cè)試一下。首先,從主分支建立一個(gè)新分支並進(jìn)行一些更改。

Steps to Organize and Maintain Your Python Codebase for Beginners

就我而言,我更新了自述文件文件。提交您的變更並向主分支開(kāi)啟拉取請(qǐng)求。

Steps to Organize and Maintain Your Python Codebase for Beginners

現(xiàn)在您將看到需要進(jìn)行審核,而 GitHub Actions (GA) 正在執(zhí)行所有檢查。即使合併被分支保護(hù)規(guī)則阻止,我仍然可以「無(wú)需等待滿(mǎn)足要求即可合併」,因?yàn)槲业臋?quán)限允許繞過(guò)保護(hù)。

Steps to Organize and Maintain Your Python Codebase for Beginners

您可以在 Actions 標(biāo)籤中追蹤 GitHub Actions 工作流程的結(jié)果。

Steps to Organize and Maintain Your Python Codebase for Beginners

以下是運(yùn)行期間 pytest 步驟的範(fàn)例:

Steps to Organize and Maintain Your Python Codebase for Beginners

第 12 步:語(yǔ)意版本控制 (SemVer)

手動(dòng)追蹤專(zhuān)案的版本可能會(huì)變得混亂,尤其是隨著專(zhuān)案的成長(zhǎng)。這就是 語(yǔ)意版本控制 (SemVer) 的用武之地 - 它遵循 MAJOR.MINOR.PATCH 模式來(lái)傳達(dá)每個(gè)版本中發(fā)生的變更。使用 python-semantic-release 自動(dòng)進(jìn)行版本控制使這變得更加容易。它會(huì)分析您的提交訊息,根據(jù)更改類(lèi)型、標(biāo)記版本來(lái)升級(jí)版本,如果需要,甚至可以將您的套件發(fā)佈到 PyPI。這消除了版本管理中的猜測(cè)並確保了一致性。

為了實(shí)現(xiàn)無(wú)縫版本控制,您可以將 python-semantic-release 直接整合到 GitHub Actions 中。官方文件提供了每當(dāng)您推送到主分支時(shí)自動(dòng)進(jìn)行版本更新和發(fā)布的工作流程。透過(guò)此設(shè)置,發(fā)布過(guò)程變得順暢且無(wú)需幹預(yù),因此您可以專(zhuān)注於編寫(xiě)程式碼,而不必?fù)?dān)心手動(dòng)管理版本。

常見(jiàn)工作流程範(fàn)例 — python-semantic-release

為了實(shí)現(xiàn)此目的,您的提交訊息需要遵循傳統(tǒng)的提交標(biāo)準(zhǔn)。每種類(lèi)型的提交決定版本是否會(huì)提升 PATCHMINORMAJOR 等級(jí):

  • 修正:觸發(fā) PATCH 版本更新(例如 1.0.0 → 1.0.1)。

  • 壯舉:觸發(fā)次要版本更新(例如,1.0.0 → 1.1.0)。

  • 重大變更:提交訊息中的! 會(huì)觸發(fā)主要版本更新(例如,1.0.0 → 2.0.0)。

遵循這些簡(jiǎn)單的約定,您將始終知道每個(gè)新版本會(huì)發(fā)生什麼。

結(jié)論

我們涵蓋了從組織專(zhuān)案和管理機(jī)密到編寫(xiě)測(cè)試、自動(dòng)化工作流程以及使用語(yǔ)義版本控制處理發(fā)布的所有內(nèi)容。有了正確的工具和流程,建立可靠且可維護(hù)的專(zhuān)案就會(huì)變得更加順利,甚至充滿(mǎn)樂(lè)趣。

關(guān)鍵是保持一致,盡可能實(shí)現(xiàn)自動(dòng)化,並不斷改進(jìn)。隨著時(shí)間的推移,每一個(gè)小步驟都會(huì)產(chǎn)生很大的變化?,F(xiàn)在輪到你了——去建造、實(shí)驗(yàn)並享受這個(gè)過(guò)程!嘗試將這些步驟應(yīng)用到您的下一個(gè)項(xiàng)目中 - 並隨時(shí)在評(píng)論中分享您的經(jīng)驗(yàn)!

以上是為初學(xué)者組織和維護(hù) Python 程式碼庫(kù)的步驟的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門(mén)話題

Python類(lèi)中的多態(tài)性 Python類(lèi)中的多態(tài)性 Jul 05, 2025 am 02:58 AM

多態(tài)是Python面向?qū)ο缶幊讨械暮诵母拍睿浮耙环N接口,多種實(shí)現(xiàn)”,允許統(tǒng)一處理不同類(lèi)型的對(duì)象。 1.多態(tài)通過(guò)方法重寫(xiě)實(shí)現(xiàn),子類(lèi)可重新定義父類(lèi)方法,如Animal類(lèi)的speak()方法在Dog和Cat子類(lèi)中有不同實(shí)現(xiàn)。 2.多態(tài)的實(shí)際用途包括簡(jiǎn)化代碼結(jié)構(gòu)、增強(qiáng)可擴(kuò)展性,例如圖形繪製程序中統(tǒng)一調(diào)用draw()方法,或遊戲開(kāi)發(fā)中處理不同角色的共同行為。 3.Python實(shí)現(xiàn)多態(tài)需滿(mǎn)足:父類(lèi)定義方法,子類(lèi)重寫(xiě)該方法,但不要求繼承同一父類(lèi),只要對(duì)象實(shí)現(xiàn)相同方法即可,這稱(chēng)為“鴨子類(lèi)型”。 4.注意事項(xiàng)包括保持方

什麼是python的列表切片? 什麼是python的列表切片? Jun 29, 2025 am 02:15 AM

ListslicinginPythonextractsaportionofalistusingindices.1.Itusesthesyntaxlist[start:end:step],wherestartisinclusive,endisexclusive,andstepdefinestheinterval.2.Ifstartorendareomitted,Pythondefaultstothebeginningorendofthelist.3.Commonusesincludegetting

python`@classmethod'裝飾師解釋了 python`@classmethod'裝飾師解釋了 Jul 04, 2025 am 03:26 AM

類(lèi)方法是Python中通過(guò)@classmethod裝飾器定義的方法,其第一個(gè)參數(shù)為類(lèi)本身(cls),用於訪問(wèn)或修改類(lèi)狀態(tài)。它可通過(guò)類(lèi)或?qū)嵗{(diào)用,影響的是整個(gè)類(lèi)而非特定實(shí)例;例如在Person類(lèi)中,show_count()方法統(tǒng)計(jì)創(chuàng)建的對(duì)像數(shù)量;定義類(lèi)方法時(shí)需使用@classmethod裝飾器並將首參命名為cls,如change_var(new_value)方法可修改類(lèi)變量;類(lèi)方法與實(shí)例方法(self參數(shù))、靜態(tài)方法(無(wú)自動(dòng)參數(shù))不同,適用於工廠方法、替代構(gòu)造函數(shù)及管理類(lèi)變量等場(chǎng)景;常見(jiàn)用途包括從

Python函數(shù)參數(shù)和參數(shù) Python函數(shù)參數(shù)和參數(shù) Jul 04, 2025 am 03:26 AM

參數(shù)(parameters)是定義函數(shù)時(shí)的佔(zhàn)位符,而傳參(arguments)是調(diào)用時(shí)傳入的具體值。 1.位置參數(shù)需按順序傳遞,順序錯(cuò)誤會(huì)導(dǎo)致結(jié)果錯(cuò)誤;2.關(guān)鍵字參數(shù)通過(guò)參數(shù)名指定,可改變順序且提高可讀性;3.默認(rèn)參數(shù)值在定義時(shí)賦值,避免重複代碼,但應(yīng)避免使用可變對(duì)像作為默認(rèn)值;4.args和*kwargs可處理不定數(shù)量的參數(shù),適用於通用接口或裝飾器,但應(yīng)謹(jǐn)慎使用以保持可讀性。

解釋Python發(fā)電機(jī)和迭代器。 解釋Python發(fā)電機(jī)和迭代器。 Jul 05, 2025 am 02:55 AM

迭代器是實(shí)現(xiàn)__iter__()和__next__()方法的對(duì)象,生成器是簡(jiǎn)化版的迭代器,通過(guò)yield關(guān)鍵字自動(dòng)實(shí)現(xiàn)這些方法。 1.迭代器每次調(diào)用next()返回一個(gè)元素,無(wú)更多元素時(shí)拋出StopIteration異常。 2.生成器通過(guò)函數(shù)定義,使用yield按需生成數(shù)據(jù),節(jié)省內(nèi)存且支持無(wú)限序列。 3.處理已有集合時(shí)用迭代器,動(dòng)態(tài)生成大數(shù)據(jù)或需惰性求值時(shí)用生成器,如讀取大文件時(shí)逐行加載。注意:列表等可迭代對(duì)像不是迭代器,迭代器到盡頭後需重新創(chuàng)建,生成器只能遍歷一次。

如何在Python中結(jié)合兩個(gè)列表? 如何在Python中結(jié)合兩個(gè)列表? Jun 30, 2025 am 02:04 AM

合併兩個(gè)列表有多種方法,選擇合適方式可提升效率。 1.使用 號(hào)拼接生成新列表,如list1 list2;2.使用 =修改原列表,如list1 =list2;3.使用extend()方法在原列表上操作,如list1.extend(list2);4.使用號(hào)解包合併(Python3.5 ),如[list1,*list2],支持靈活組合多個(gè)列表或添加元素。不同方法適用於不同場(chǎng)景,需根據(jù)是否修改原列表及Python版本進(jìn)行選擇。

如何處理Python中的API身份驗(yàn)證 如何處理Python中的API身份驗(yàn)證 Jul 13, 2025 am 02:22 AM

處理API認(rèn)證的關(guān)鍵在於理解並正確使用認(rèn)證方式。 1.APIKey是最簡(jiǎn)單的認(rèn)證方式,通常放在請(qǐng)求頭或URL參數(shù)中;2.BasicAuth使用用戶(hù)名和密碼進(jìn)行Base64編碼傳輸,適合內(nèi)部系統(tǒng);3.OAuth2需先通過(guò)client_id和client_secret獲取Token,再在請(qǐng)求頭中帶上BearerToken;4.為應(yīng)對(duì)Token過(guò)期,可封裝Token管理類(lèi)自動(dòng)刷新Token;總之,根據(jù)文檔選擇合適方式,並安全存儲(chǔ)密鑰信息是關(guān)鍵。

什麼是python魔法方法或dunder方法? 什麼是python魔法方法或dunder方法? Jul 04, 2025 am 03:20 AM

Python的magicmethods(或稱(chēng)dunder方法)是用於定義對(duì)象行為的特殊方法,它們以雙下劃線開(kāi)頭和結(jié)尾。 1.它們使對(duì)象能夠響應(yīng)內(nèi)置操作,如加法、比較、字符串表示等;2.常見(jiàn)用例包括對(duì)像初始化與表示(__init__、__repr__、__str__)、算術(shù)運(yùn)算(__add__、__sub__、__mul__)及比較運(yùn)算(__eq__、__lt__);3.使用時(shí)應(yīng)確保其行為符合預(yù)期,例如__repr__應(yīng)返回可重構(gòu)對(duì)象的表達(dá)式,算術(shù)方法應(yīng)返回新實(shí)例;4.應(yīng)避免過(guò)度使用或以令人困惑的方

See all articles