Python開發(fā)生產(chǎn)環(huán)境常用的4個工具(實(shí)用推薦)
Poetry
在啟動一個新項(xiàng)目時(shí),我通常會使用 Poetry 來管理依賴關(guān)系,并創(chuàng)建一個全新的虛擬環(huán)境。這在不同項(xiàng)目依賴同一軟件包的不同版本時(shí)非常有用。
Poetry 是一款出色的工具,因?yàn)樗芸焖俳鉀Q依賴關(guān)系問題。通過友好的 CLI,它還易于使用,并有助于快速打包和發(fā)布代碼。
我們輸入 poetry init
來啟動一個新項(xiàng)目。
輸入 "yes" 后,就會創(chuàng)建一個包含項(xiàng)目元數(shù)據(jù)的 pyproject.toml
文件。該文件可以提交到 Git,并與同事共享,以重現(xiàn)相同的環(huán)境。項(xiàng)目設(shè)置完成后,就可以使用 add
命令添加依賴關(guān)系了。
示例:poetry add pandas
您還可以對依賴項(xiàng)進(jìn)行分組。
例如,您可以將 black
和 isort
作為開發(fā)依賴項(xiàng)添加到 dev
組。
示例:poetry add black --group dev
如果我們再次查看 pyproject.toml
文件,就會發(fā)現(xiàn)其中有兩個獨(dú)立的依賴關(guān)系部分:
這有什么用?
有了群組,你就可以輕松管理每個環(huán)境的依賴關(guān)系。例如,如果您有開發(fā)和測試依賴項(xiàng),您可能希望在生產(chǎn)環(huán)境中安裝項(xiàng)目庫時(shí)忽略它們。
你可以這樣使用它:
poetry install --without dev,test
這些依賴項(xiàng)安裝在哪里?
Poetry 為每個項(xiàng)目創(chuàng)建一個虛擬環(huán)境。它位于一個隱藏的 .venv
文件夾中。你可以使用 poetry shell
命令激活它,并訪問其特定的二進(jìn)制文件(python
、pip
、black
等)。
Pre-commit hooks
作為一名 Python 開發(fā)人員,您可能會經(jīng)常遇到這樣的情況:您的團(tuán)隊(duì)成員擁有不同的編碼風(fēng)格,會讓代碼難以閱讀,導(dǎo)致工作效率的降低,并使協(xié)作變得困難。pre-commit
就是用來解決這個問題的。
pre-commit
是在每次提交前自動運(yùn)行的腳本,用于檢查代碼是否存在錯誤。這些 hooks 與語言無關(guān),有助于在提交到版本庫之前發(fā)現(xiàn)問題,確保只提交高質(zhì)量的代碼。
我通常會在 pre-commit
中添加這些腳本:
• black
- 用于格式化代碼
• pydoctyle
- 確保代碼文檔符合 Google 標(biāo)準(zhǔn)
• pycln
- 刪除未使用的導(dǎo)入
• trailing-whitespace
- 刪除多余的空格
• unitest
- 運(yùn)行單元測試并發(fā)現(xiàn)破壞性修改
要配置這些 pre-commit
,首先需要安裝 pre-commit
軟件包。
# pip 安裝 pip install pre-commit # poetry 安裝 poetry add pre-commit
然后,你需要在名為 .pre-commit-configuration.yaml
的 YAML 文件中定義 hooks。
下面是我通常使用的文件:
repos: - repo: https://github.com/psf/black rev: '23.1.0' hooks: - id: black args: [--config=pyproject.toml] - repo: https://github.com/pycqa/pydocstyle rev: '6.3.0' hooks: - id: pydocstyle args: ['.'] - repo: https://github.com/hadialqattan/pycln rev: 'v2.1.5' hooks: - id: pycln args: ['.'] - repo: https://github.com/pre-commit/pre-commit-hooks rev: 'v4.4.0' hooks: - id: trailing-whitespace - repo: local hooks: - id: unittest name: run unit tests language: system pass_filenames: false entry: poetry run coverage run -m pytest
現(xiàn)在,您需要使用 install
命令安裝這些 hooks:
pre-commit install
可以開始了,讓我們試試這個。如果您嘗試提交文檔缺失的代碼,您將會收到這樣的錯誤信息,并且什么都不會提交到 git。
這將迫使你修復(fù)代碼并再次提交。
Makefiles
Makefile 將一系列 shell
命令組合在一個快捷方式。我們來看一個例子。想象一下,每次更新代碼時(shí)都要運(yùn)行以下單元測試命令:
poetry run coverage run -m pytest poetry run coverage report poetry run coverage html
這些乏味且重復(fù)的工作完全可以使用 Makefile,將這三個命令集中到一個測試目標(biāo)下。
現(xiàn)在,不用再鍵入這三行,只需運(yùn)行:make test
。這樣就避免了不必要的代碼鍵入或記憶復(fù)雜的指令。Makefile 還有助于簡化其他任務(wù),例如:
• 安裝依賴項(xiàng)
• 設(shè)置環(huán)境變量
• 運(yùn)行腳本
• 構(gòu)建和推送 Docker 映像
• 構(gòu)建文檔
• 設(shè)計(jì)代碼風(fēng)格
下面是我在一個開源項(xiàng)目中使用的 Makefile 實(shí)例:
DOCKER_IMAGE := ahmedbesbes/cowriter VERSION := $(shell git describe --always --dirty --long) ifneq (,$(wildcard ./.env)) include .env export endif run-cowriter: @poetry run python -m src.main run-cowriter-job: @poetry run python -m src.job run-web-agent: @rm -rf db/ && poetry run python -m src.actions.web_searcher build-image: @docker build . -t $(DOCKER_IMAGE):$(VERSION) push-docker-image-to-artifact-registry: @gcloud builds submit --tag gcr.io/$(PROJECT_ID)/run_cowriter_job lint: @poetry run black . test: @poetry run coverage run -m pytest @poetry run coverage report @poetry run coverage html
Makefile 通常易于閱讀和理解,可以清楚地說明項(xiàng)目的不同部分是如何組織的,以及它們是如何相互依賴的。這對團(tuán)隊(duì)新成員的入職培訓(xùn)或一段時(shí)間后重新審視自己的項(xiàng)目特別有幫助。
python-dotenv
作為一名 Python 開發(fā)人員,常常會涉及到敏感信息和一些憑證(例如 auth
或者 token
),下面是一些例子:
• 訪問第三方服務(wù)的 API 密鑰
• 密碼和憑證
• 域名或 URL
記住,絕不應(yīng)在腳本中硬編碼或版本化這些憑據(jù)。因?yàn)闀?dǎo)致許多不安全的因素。一種安全且良好的做法是將它們加載為環(huán)境變量。
import os api_key = os.environ.get("API_KEY")
為了避免每次都使用 shell
命令導(dǎo)出環(huán)境變量,可以使用 Python 的 dotenv
軟件包:
1. pip install python-dotenv
2. 創(chuàng)建一個 .env
文件,其中包含鍵值對中的憑據(jù)
3. 將 .env
添加到 .gitignore
以防止 Git 提交它
4. 使用 python-dotenv
模塊將設(shè)置加載到 Python 文件中
希望這些技巧對你更好地構(gòu)建 Python 項(xiàng)目和自動化繁瑣的任務(wù)有所幫助。記得收藏,并反復(fù)閱讀。
以上就是Python開發(fā)生產(chǎn)環(huán)境常用的4個工具(實(shí)用推薦)的詳細(xì)內(nèi)容,更多關(guān)于Python開發(fā)生產(chǎn)環(huán)境工具的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python獲取網(wǎng)絡(luò)時(shí)間戳的兩種方法詳解
在我們進(jìn)行注冊碼的有效期驗(yàn)證時(shí),通常使用獲取網(wǎng)絡(luò)時(shí)間的方式來進(jìn)行比對。本文將介紹兩種利用Python獲取網(wǎng)絡(luò)時(shí)間戳的方法,感興趣的可以了解一下2022-01-01python smtplib模塊自動收發(fā)郵件功能(二)
這篇文章主要為大家詳細(xì)介紹了python smtplib模塊自動收發(fā)郵件功能的第二篇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05python 循環(huán)while和for in簡單實(shí)例
下面小編就為大家?guī)硪黄猵ython 循環(huán)while和for in簡單實(shí)例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-08-08Matlab之使用HeatMap實(shí)現(xiàn)畫熱圖
這篇文章主要介紹了Matlab之使用HeatMap實(shí)現(xiàn)畫熱圖方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-10-10Pandas篩選DataFrame含有空值的數(shù)據(jù)行的實(shí)現(xiàn)
本文主要介紹了Pandas篩選DataFrame含有空值的數(shù)據(jù)行的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07python實(shí)現(xiàn)微信自動回復(fù)機(jī)器人功能
wxpy基于itchat,使用了 Web 微信的通訊協(xié)議,通過大量接口優(yōu)化提升了模塊的易用性,并進(jìn)行豐富的功能擴(kuò)展。這篇文章主要介紹了python實(shí)現(xiàn)微信自動回復(fù)機(jī)器人功能,需要的朋友可以參考下2019-07-07Pandas?DataFrame列快速轉(zhuǎn)換為列表(3秒學(xué)會!)
這篇文章主要給大家介紹了關(guān)于Pandas?DataFrame列如何快速轉(zhuǎn)換為列表的相關(guān)資料,在Python的pandas庫中可以使用DataFrame的tolist()方法將DataFrame轉(zhuǎn)化為列表,需要的朋友可以參考下2023-10-10