Python開發(fā)生產(chǎn)環(huán)境常用的4個工具(實用推薦)
Poetry
在啟動一個新項目時,我通常會使用 Poetry 來管理依賴關系,并創(chuàng)建一個全新的虛擬環(huán)境。這在不同項目依賴同一軟件包的不同版本時非常有用。
Poetry 是一款出色的工具,因為它能快速解決依賴關系問題。通過友好的 CLI,它還易于使用,并有助于快速打包和發(fā)布代碼。
我們輸入 poetry init
來啟動一個新項目。
輸入 "yes" 后,就會創(chuàng)建一個包含項目元數(shù)據(jù)的 pyproject.toml
文件。該文件可以提交到 Git,并與同事共享,以重現(xiàn)相同的環(huán)境。項目設置完成后,就可以使用 add
命令添加依賴關系了。
示例:poetry add pandas
您還可以對依賴項進行分組。
例如,您可以將 black
和 isort
作為開發(fā)依賴項添加到 dev
組。
示例:poetry add black --group dev
如果我們再次查看 pyproject.toml
文件,就會發(fā)現(xiàn)其中有兩個獨立的依賴關系部分:
這有什么用?
有了群組,你就可以輕松管理每個環(huá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)常遇到這樣的情況:您的團隊成員擁有不同的編碼風格,會讓代碼難以閱讀,導致工作效率的降低,并使協(xié)作變得困難。pre-commit
就是用來解決這個問題的。
pre-commit
是在每次提交前自動運行的腳本,用于檢查代碼是否存在錯誤。這些 hooks 與語言無關,有助于在提交到版本庫之前發(fā)現(xiàn)問題,確保只提交高質(zhì)量的代碼。
我通常會在 pre-commit
中添加這些腳本:
• black
- 用于格式化代碼
• pydoctyle
- 確保代碼文檔符合 Google 標準
• pycln
- 刪除未使用的導入
• 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。
這將迫使你修復代碼并再次提交。
Makefiles
Makefile 將一系列 shell
命令組合在一個快捷方式。我們來看一個例子。想象一下,每次更新代碼時都要運行以下單元測試命令:
poetry run coverage run -m pytest poetry run coverage report poetry run coverage html
這些乏味且重復的工作完全可以使用 Makefile,將這三個命令集中到一個測試目標下。
現(xiàn)在,不用再鍵入這三行,只需運行:make test
。這樣就避免了不必要的代碼鍵入或記憶復雜的指令。Makefile 還有助于簡化其他任務,例如:
• 安裝依賴項
• 設置環(huán)境變量
• 運行腳本
• 構(gòu)建和推送 Docker 映像
• 構(gòu)建文檔
• 設計代碼風格
下面是我在一個開源項目中使用的 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 html
Makefile 通常易于閱讀和理解,可以清楚地說明項目的不同部分是如何組織的,以及它們是如何相互依賴的。這對團隊新成員的入職培訓或一段時間后重新審視自己的項目特別有幫助。
python-dotenv
作為一名 Python 開發(fā)人員,常常會涉及到敏感信息和一些憑證(例如 auth
或者 token
),下面是一些例子:
• 訪問第三方服務的 API 密鑰
• 密碼和憑證
• 域名或 URL
記住,絕不應在腳本中硬編碼或版本化這些憑據(jù)。因為會導致許多不安全的因素。一種安全且良好的做法是將它們加載為環(huán)境變量。
import os api_key = os.environ.get("API_KEY")
為了避免每次都使用 shell
命令導出環(huán)境變量,可以使用 Python 的 dotenv
軟件包:
1. pip install python-dotenv
2. 創(chuàng)建一個 .env
文件,其中包含鍵值對中的憑據(jù)
3. 將 .env
添加到 .gitignore
以防止 Git 提交它
4. 使用 python-dotenv
模塊將設置加載到 Python 文件中
希望這些技巧對你更好地構(gòu)建 Python 項目和自動化繁瑣的任務有所幫助。記得收藏,并反復閱讀。
以上就是Python開發(fā)生產(chǎn)環(huán)境常用的4個工具(實用推薦)的詳細內(nèi)容,更多關于Python開發(fā)生產(chǎn)環(huán)境工具的資料請關注腳本之家其它相關文章!
相關文章
python smtplib模塊自動收發(fā)郵件功能(二)
這篇文章主要為大家詳細介紹了python smtplib模塊自動收發(fā)郵件功能的第二篇,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-05-05python 循環(huán)while和for in簡單實例
下面小編就為大家?guī)硪黄猵ython 循環(huán)while和for in簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-08-08Pandas篩選DataFrame含有空值的數(shù)據(jù)行的實現(xiàn)
本文主要介紹了Pandas篩選DataFrame含有空值的數(shù)據(jù)行的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-07-07Pandas?DataFrame列快速轉(zhuǎn)換為列表(3秒學會!)
這篇文章主要給大家介紹了關于Pandas?DataFrame列如何快速轉(zhuǎn)換為列表的相關資料,在Python的pandas庫中可以使用DataFrame的tolist()方法將DataFrame轉(zhuǎn)化為列表,需要的朋友可以參考下2023-10-10