Python開發(fā)生產(chǎn)環(huán)境常用的4個工具(實用推薦)
Poetry
在啟動一個新項目時,我通常會使用 Poetry 來管理依賴關(guān)系,并創(chuàng)建一個全新的虛擬環(huán)境。這在不同項目依賴同一軟件包的不同版本時非常有用。
Poetry 是一款出色的工具,因為它能快速解決依賴關(guān)系問題。通過友好的 CLI,它還易于使用,并有助于快速打包和發(fā)布代碼。
我們輸入 poetry init 來啟動一個新項目。

輸入 "yes" 后,就會創(chuàng)建一個包含項目元數(shù)據(jù)的 pyproject.toml 文件。該文件可以提交到 Git,并與同事共享,以重現(xiàn)相同的環(huán)境。項目設(shè)置完成后,就可以使用 add 命令添加依賴關(guān)系了。
示例:poetry add pandas

您還可以對依賴項進行分組。
例如,您可以將 black 和 isort 作為開發(fā)依賴項添加到 dev 組。
示例:poetry add black --group dev

如果我們再次查看 pyproject.toml 文件,就會發(fā)現(xiàn)其中有兩個獨立的依賴關(guān)系部分:

這有什么用?
有了群組,你就可以輕松管理每個環(huán)境的依賴關(guān)系。例如,如果您有開發(fā)和測試依賴項,您可能希望在生產(chǎn)環(huán)境中安裝項目庫時忽略它們。
你可以這樣使用它:
poetry install --without dev,test
這些依賴項安裝在哪里?
Poetry 為每個項目創(chuàng)建一個虛擬環(huán)境。它位于一個隱藏的 .venv 文件夾中。你可以使用 poetry shell 命令激活它,并訪問其特定的二進制文件(python、pip、black 等)。
Pre-commit hooks
作為一名 Python 開發(fā)人員,您可能會經(jīng)常遇到這樣的情況:您的團隊成員擁有不同的編碼風(fēng)格,會讓代碼難以閱讀,導(dǎo)致工作效率的降低,并使協(xié)作變得困難。pre-commit 就是用來解決這個問題的。
pre-commit 是在每次提交前自動運行的腳本,用于檢查代碼是否存在錯誤。這些 hooks 與語言無關(guān),有助于在提交到版本庫之前發(fā)現(xiàn)問題,確保只提交高質(zhì)量的代碼。
我通常會在 pre-commit 中添加這些腳本:
• black - 用于格式化代碼
• pydoctyle - 確保代碼文檔符合 Google 標(biāo)準(zhǔn)
• pycln - 刪除未使用的導(dǎo)入
• trailing-whitespace - 刪除多余的空格
• unitest - 運行單元測試并發(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 命令組合在一個快捷方式。我們來看一個例子。想象一下,每次更新代碼時都要運行以下單元測試命令:
poetry run coverage run -m pytest poetry run coverage report poetry run coverage html
這些乏味且重復(fù)的工作完全可以使用 Makefile,將這三個命令集中到一個測試目標(biāo)下。

現(xiàn)在,不用再鍵入這三行,只需運行:make test。這樣就避免了不必要的代碼鍵入或記憶復(fù)雜的指令。Makefile 還有助于簡化其他任務(wù),例如:
• 安裝依賴項
• 設(shè)置環(huán)境變量
• 運行腳本
• 構(gòu)建和推送 Docker 映像
• 構(gòu)建文檔
• 設(shè)計代碼風(fēng)格
下面是我在一個開源項目中使用的 Makefile 實例:
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 htmlMakefile 通常易于閱讀和理解,可以清楚地說明項目的不同部分是如何組織的,以及它們是如何相互依賴的。這對團隊新成員的入職培訓(xùn)或一段時間后重新審視自己的項目特別有幫助。
python-dotenv
作為一名 Python 開發(fā)人員,常常會涉及到敏感信息和一些憑證(例如 auth 或者 token),下面是一些例子:
• 訪問第三方服務(wù)的 API 密鑰
• 密碼和憑證
• 域名或 URL
記住,絕不應(yīng)在腳本中硬編碼或版本化這些憑據(jù)。因為會導(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 項目和自動化繁瑣的任務(wù)有所幫助。記得收藏,并反復(fù)閱讀。
以上就是Python開發(fā)生產(chǎn)環(huán)境常用的4個工具(實用推薦)的詳細(xì)內(nèi)容,更多關(guān)于Python開發(fā)生產(chǎn)環(huán)境工具的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python獲取網(wǎng)絡(luò)時間戳的兩種方法詳解
在我們進行注冊碼的有效期驗證時,通常使用獲取網(wǎng)絡(luò)時間的方式來進行比對。本文將介紹兩種利用Python獲取網(wǎng)絡(luò)時間戳的方法,感興趣的可以了解一下2022-01-01
python smtplib模塊自動收發(fā)郵件功能(二)
這篇文章主要為大家詳細(xì)介紹了python smtplib模塊自動收發(fā)郵件功能的第二篇,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-05-05
python 循環(huán)while和for in簡單實例
下面小編就為大家?guī)硪黄猵ython 循環(huán)while和for in簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-08-08
Pandas篩選DataFrame含有空值的數(shù)據(jù)行的實現(xiàn)
本文主要介紹了Pandas篩選DataFrame含有空值的數(shù)據(jù)行的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
Pandas?DataFrame列快速轉(zhuǎn)換為列表(3秒學(xué)會!)
這篇文章主要給大家介紹了關(guān)于Pandas?DataFrame列如何快速轉(zhuǎn)換為列表的相關(guān)資料,在Python的pandas庫中可以使用DataFrame的tolist()方法將DataFrame轉(zhuǎn)化為列表,需要的朋友可以參考下2023-10-10

