自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

四個(gè)工具幫你輕松將python項(xiàng)目發(fā)布到生產(chǎn)環(huán)境

開(kāi)發(fā) 前端
在這篇文章中,我將向您展示我在Python項(xiàng)目中設(shè)置的四個(gè)工具,以便簡(jiǎn)化開(kāi)發(fā)工作流程并強(qiáng)制執(zhí)行一些優(yōu)秀實(shí)踐。

構(gòu)建良好的軟件遵循特定規(guī)則并強(qiáng)制執(zhí)行行業(yè)標(biāo)準(zhǔn),同時(shí)需要考慮:依賴(lài)關(guān)系、代碼質(zhì)量、工作流程、憑據(jù)。但這些如何反映在現(xiàn)實(shí)代碼庫(kù)中呢?在這篇文章中,我將向您展示我在Python項(xiàng)目中設(shè)置的4個(gè)工具,以便簡(jiǎn)化開(kāi)發(fā)工作流程并強(qiáng)制執(zhí)行一些優(yōu)秀實(shí)踐。

1. Poetry

當(dāng)我開(kāi)始一個(gè)新項(xiàng)目時(shí),我通常使用Poetry來(lái)管理依賴(lài)關(guān)系并創(chuàng)建一個(gè)全新的虛擬環(huán)境。這在不同項(xiàng)目依賴(lài)于相同包的不同版本時(shí)非常有用。

Poetry是一個(gè)很好的工具,因?yàn)樗诮馕鲆蕾?lài)關(guān)系方面速度很快。它還通過(guò)用戶(hù)友好的CLI易于使用,并有助于快速打包和分發(fā)您的代碼。

以下是如何使用Poetry啟動(dòng)新項(xiàng)目的方法:

poetry init

一旦你按下yes,就會(huì)創(chuàng)建一個(gè)pyproject.toml文件,用于包含項(xiàng)目的 metadata。這個(gè)文件可以提交到Git,并與您的同事共享,以重現(xiàn)相同的環(huán)境。項(xiàng)目設(shè)置完成后,您可以使用add命令添加依賴(lài)項(xiàng)。示例:

poetry add pandas

您還可以分組依賴(lài)項(xiàng)。例如,您可以將black和isort添加為開(kāi)發(fā)依賴(lài)項(xiàng)到dev組。示例:

poetry add black --group dev

如果再次查看pyproject.toml文件,我們將注意到依賴(lài)項(xiàng)的兩個(gè)單獨(dú)部分:

為什么這有用呢?

分組使您能夠輕松管理不同環(huán)境的依賴(lài)關(guān)系。例如,如果您有開(kāi)發(fā)和測(cè)試依賴(lài)項(xiàng),您可能希望在生產(chǎn)設(shè)置中安裝項(xiàng)目庫(kù)時(shí)忽略它們。這是如何做到的:

poetry install --without dev,test

依賴(lài)項(xiàng)安裝在哪里?

Poetry為每個(gè)項(xiàng)目創(chuàng)建一個(gè)虛擬環(huán)境。它位于隱藏的.venv文件夾中。您可以使用poetry shell命令激活它,并訪(fǎng)問(wèn)其特定的二進(jìn)制文件(python、pip、black等)。更多功能可以查看官方文檔以了解更多信息。

2. Pre-commit hooks

如果您是Python開(kāi)發(fā)人員,您可能經(jīng)常會(huì)遇到這樣的情況:您的團(tuán)隊(duì)成員具有不同的編碼風(fēng)格,這使得代碼庫(kù)不一致。結(jié)果,這導(dǎo)致錯(cuò)誤,降低了生產(chǎn)力,并使協(xié)作困難。pre-commit hooks就可以解決這個(gè)問(wèn)題,它在每次提交之前自動(dòng)運(yùn)行的腳本,用于檢查您的代碼是否存在錯(cuò)誤。

在我的項(xiàng)目中,我通常會(huì)在我的預(yù)提交配置中添加這些腳本:

  • black — 用于格式化代碼
  • pydoctyle — 確保代碼文檔符合Google的標(biāo)準(zhǔn)
  • pycln — 用于刪除未使用的導(dǎo)入
  • trailing-whitespace — 用于刪除額外的空格
  • unitest — 用于運(yùn)行單元測(cè)試和檢測(cè)破壞性更改

要配置這些首先需要安裝pre-commit包:

pip install pre-commit
或者
poetry add pre-commit

然后,您需要在名為.pre-commit-configuration.yaml的YAML文件中進(jìn)行定義。以下是我通常使用的一個(gè):

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 命令進(jìn)行安裝:

pre-commit install

另外,如果您嘗試提交沒(méi)有文檔的代碼,您將收到此錯(cuò)誤,不會(huì)提交任何內(nèi)容到git。

這將迫使您修復(fù)代碼,然后再次提交。

3. Makefiles

Makefile將一系列shell命令分組在一個(gè)快捷方式(也稱(chēng)為目標(biāo))下。想象一下,每次更新代碼時(shí)都必須運(yùn)行以下單元測(cè)試命令:

poetry run coverage run -m pytest
poetry run coverage report
poetry run coverage html

那不是很繁瑣嗎?使用Makefile,您可以將這三個(gè)命令分組在一個(gè) test 目標(biāo)下?,F(xiàn)在,您只需運(yùn)行make test,而不是輸入這三行,這避免了不必要的代碼輸入或記住復(fù)雜的指令。

Makefile還有助于簡(jiǎn)化其他任務(wù),如:

  • 安裝依賴(lài)項(xiàng)
  • 設(shè)置環(huán)境變量
  • 運(yùn)行腳本
  • 構(gòu)建和推送Docker鏡像
  • 構(gòu)建文檔
  • 為代碼添加樣式

以下是我在我的一個(gè)開(kāi)源項(xià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 html

Makefiles通常易于閱讀和理解,清晰地顯示了項(xiàng)目的不同部分是如何組織的,以及它們?nèi)绾蜗嗷ヒ蕾?lài)。這對(duì)于新團(tuán)隊(duì)成員入職或一段時(shí)間后重訪(fǎng)自己的項(xiàng)目尤其有幫助。

4. python-dotenv

作為開(kāi)發(fā)人員,我使用Python構(gòu)建依賴(lài)于憑據(jù)和敏感設(shè)置的應(yīng)用程序。以下是這些憑據(jù)的一些示例:

  • 用于訪(fǎng)問(wèn)第三方服務(wù)的API密鑰
  • 密碼和憑據(jù)
  • 標(biāo)志
  • 域名或URL

?? 這些憑據(jù)不應(yīng)該硬編碼或版本化在您的腳本中。一種安全的良好實(shí)踐是將它們加載為環(huán)境變量。

import os
api_key = os.environ.get("API_KEY")

為了避免每次都使用shell命令導(dǎo)出環(huán)境變量,您可以使用Python dotenv包:

  • pip install python-dotenv
  • 創(chuàng)建一個(gè)包含鍵值對(duì)憑據(jù)的.env文件

  • 將.env添加到.gitignore,以防止Git提交它
  • 使用python-dotenv模塊將設(shè)置加載到您的Python文件中

結(jié)論

我希望您發(fā)現(xiàn)這些工具有助于更好地構(gòu)建Python項(xiàng)目的結(jié)構(gòu),并自動(dòng)化繁瑣和重復(fù)的任務(wù)。

責(zé)任編輯:趙寧寧 來(lái)源: 小白玩轉(zhuǎn)Python
相關(guān)推薦

2021-11-10 09:30:11

Python工具命令

2024-08-19 00:05:25

2021-02-04 08:00:00

僵尸網(wǎng)絡(luò)網(wǎng)絡(luò)安全信息安全

2022-08-12 07:56:41

Python項(xiàng)目管理構(gòu)建工具

2018-05-03 14:12:57

部署環(huán)境步驟

2016-02-15 09:13:40

移動(dòng)頁(yè)面性能優(yōu)化前端

2022-03-25 14:11:11

Java死鎖線(xiàn)程

2023-05-17 09:07:58

IT項(xiàng)目標(biāo)準(zhǔn)化

2023-07-17 10:17:52

2022-03-04 11:22:37

Vim編輯器編輯文件

2020-08-13 10:29:55

項(xiàng)目管理項(xiàng)目經(jīng)理CIO

2012-02-17 10:13:19

Ubuntu 10.0

2022-02-23 15:09:18

數(shù)字化轉(zhuǎn)型國(guó)有企業(yè)數(shù)據(jù)

2017-10-12 11:28:09

2024-03-27 14:16:48

Docker鏡像RUN

2025-02-17 08:00:00

機(jī)器學(xué)習(xí)開(kāi)發(fā)Docker

2014-05-30 14:06:46

2015-08-07 13:23:27

bridgeios應(yīng)用移植

2020-11-10 08:00:00

機(jī)器學(xué)習(xí)技術(shù)科學(xué)

2022-03-30 15:58:52

UX 文案產(chǎn)品界面用戶(hù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)