Python 依賴管理的革新——Poetry 深度解析

引言

在 Python 生態中,依賴管理一直是開發者關注的重要話題。從最初的 pipvirtualenv,到后來的 pipenv,Python 依賴管理工具不斷進化。而近年來,Poetry 作為一款集成包管理和虛擬環境管理的新興工具,逐漸獲得了廣泛的關注和認可。

本文將深入探討 Poetry,包括其基本概念、安裝配置、核心功能、與傳統工具的對比,以及在實際項目中的應用,幫助開發者更好地理解并應用 Poetry


1. Poetry 簡介

Poetry 是一款專為 Python 項目設計的依賴管理和打包工具,提供了簡單高效的方式來管理 Python 依賴,創建和發布 Python 包。

1.1 Poetry 的特點

  • 依賴管理:提供清晰的 pyproject.toml 作為唯一的依賴配置文件。
  • 虛擬環境管理:自動創建和管理虛擬環境,避免污染全局 Python 版本。
  • 版本解析:采用先進的版本解析算法,確保依賴關系的兼容性。
  • 項目打包和發布:內置工具支持創建 Python 包并發布到 PyPI。
  • 用戶體驗:相比 pippipenvPoetry 具有更直觀和一致的 CLI 命令。

1.2 為什么選擇 Poetry?

傳統的 Python 依賴管理工具如 pipvirtualenv 存在諸多問題,例如 requirements.txt 依賴管理混亂、缺乏鎖定機制等。而 Poetry 通過 pyproject.toml 統一管理依賴,并提供 poetry.lock 確保依賴版本的一致性,使得依賴管理更加可靠和直觀。


2. Poetry 的安裝與配置

2.1 安裝 Poetry

Poetry 官方推薦使用以下命令安裝:

curl -sSL https://install.python-poetry.org | python3 -

安裝后,可以通過以下命令檢查是否成功:

poetry --version

2.2 配置 Poetry

默認情況下,Poetry 會在 ~/.local/share/pypoetry 目錄下安裝。可以使用以下命令檢查配置:

poetry config --list

常見的配置選項:

poetry config virtualenvs.create true  # 是否自動創建虛擬環境
poetry config virtualenvs.in-project true  # 是否將虛擬環境保存在項目目錄

3. Poetry 的核心功能

3.1 創建新項目

poetry new my_project
cd my_project

或在現有目錄初始化 Poetry:

poetry init

3.2 添加和移除依賴

添加依賴:

poetry add requests

添加開發依賴:

poetry add --dev pytest

移除依賴:

poetry remove requests

3.3 安裝依賴

poetry install

3.4 運行腳本

poetry run python script.py

3.5 生成 requirements.txt

poetry export -f requirements.txt --output requirements.txt

3.6 發布 Python 包

構建和發布:

poetry build
poetry publish

4. Poetry 與傳統依賴管理工具的對比

功能pip + virtualenvpipenvPoetry
依賴管理需要手動維護自動解析自動解析
虛擬環境管理需要手動創建自動創建自動創建
版本鎖定lock 文件Pipfile.lockpoetry.lock
項目打包和發布需要 setup.py需要 setup.py內置支持

5. Poetry 在實際項目中的應用

5.1 使用 Poetry 創建 Django 項目

poetry new my_django_project
cd my_django_project
poetry add django
poetry run django-admin startproject mysite .

5.2 使用 Poetry 進行 Flask API 開發

poetry new flask_project
cd flask_project
poetry add flask
poetry run flask run

5.3 結合 Docker 使用 Poetry

創建 Dockerfile

FROM python:3.9
WORKDIR /app
COPY pyproject.toml poetry.lock /app/
RUN pip install poetry && poetry install --no-dev
COPY . /app
CMD ["poetry", "run", "python", "app.py"]

6. 最佳實踐

6.1 使用 .gitignore 忽略虛擬環境

echo "venv/" >> .gitignore
echo "__pycache__/" >> .gitignore

6.2 版本控制

確保 poetry.lock 文件提交到 Git 以保持團隊開發一致性。

6.3 使用 pyenv 管理 Python 版本

poetry env use $(pyenv which python)

6.4 結合 pre-commit 進行代碼質量檢查

poetry add --dev pre-commit
pre-commit install

7. 總結

Poetry 作為現代 Python 依賴管理工具,提供了直觀、高效的依賴管理方式,彌補了 pippipenv 的諸多不足。通過本文的介紹,希望你能掌握 Poetry 的核心功能,并能在實際項目中靈活應用它,從而提高開發效率,確保依賴管理的可靠性。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/895653.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/895653.shtml
英文地址,請注明出處:http://en.pswp.cn/news/895653.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

springcloud集成gateway

本篇文章只介紹gateway模塊的搭建步驟,并無gateway詳細介紹 gateway詳解請查看:SpringCloudGateway官方文檔詳解 前置處理 父模塊中已指定版本 不知道如何選擇版本看這篇: 手把手教你梳理springcloud與springboot與springcloudalibaba的版本…

【Elasticsearch】文本分析Text analysis概述

文本分析概述 文本分析使 Elasticsearch 能夠執行全文搜索,搜索結果會返回所有相關的結果,而不僅僅是完全匹配的結果。 如果你搜索“Quick fox jumps”,你可能希望找到包含“A quick brown fox jumps over the lazy dog”的文檔&#xff0c…

建筑兔零基礎自學python記錄22|實戰人臉識別項目——視頻人臉識別(下)11

這次我們繼續解讀代碼,我們主要來看下面兩個部分; 至于人臉識別成功的要點我們在最后總結~ 具體代碼學習: #定義人臉名稱 def name():#預學習照片存放位置path M:/python/workspace/PythonProject/face/imagePaths[os.path.join(path,f) f…

二〇二四年終總結

寫在前面 簡單總結一下告訴自己,曾經活著 不必太糾結于當下,也不必太憂慮未來,當你經歷過一些事情的時候,眼前的風景已經和從前不一樣了。——村上春樹 原本應該 24 年年中的時候寫 23 年年終的總結,但是一直拖著&…

LabVIEW太陽能制冷監控系統

在全球能源需求日益增長的背景下,太陽能作為一種無限再生能源,被廣泛應用于各種能源系統中。本基于LabVIEW軟件和STM32F105控制器的太陽能制冷監控系統的設計與實現,提供一個高效、經濟的太陽能利用方案,以應對能源消耗的挑戰。 項…

Node.js中的npm包:從入門到實踐指南

目錄 一、npm的核心概念 二、npm核心命令與工作流 三、package.json深度解析 四、高級技巧與最佳實踐 五、常見問題解決方案 六、未來趨勢 在Node.js生態中,npm(Node Package Manager) 是開發者不可或缺的工具。它不僅是全球最大的開源軟…

AIGC圖生視頻保姆級教程

一、AI文生圖高階技巧 推薦工具 ? MidJourney(藝術感最強) ? DALLE 3(與ChatGPT深度聯動) ? Leonardo.ai(精細化參數控制) 核心策略 提示詞架構: [主體描述][環境氛圍][鏡頭語言][風格參數…

嵌入式EasyRTC實時通話支持海思hi3516cv610,編譯器arm-v01c02-linux-musleabi-gcc

EasyRTC已經完美支持海思hi3516cv610,編譯器arm-v01c02-linux-musleabi-gcc,總體SDK大小控制在680K以內(預計還能壓縮100K上下): EasyRTC在hi3516cv610芯片上能雙向通話、發送文字以及二進制指令,總體運行…

力扣做題記錄 (二叉樹)

二叉樹 打算先來了解二叉樹基礎,都是簡單題,目的是熟悉代碼格式和解題基礎思路。 1、二叉樹最大深度 二叉樹最大深度 方法一、深度搜索 直接用原函數做遞歸,比較簡單 /*** Definition for a binary tree node.* struct TreeNode {* …

如何下載Qt和運行第一個程序。

Ubuntu24.04 下載比較容易,基本都是無腦操作。途中匯出現有個別package下載不成功的情況,重新下載即可。 文章目錄 下載qt運行qt第一個項目 下載qt 1.先找到官網,點擊Download。 2.然后選擇,community User 3.然后會跳轉到這個…

HCIA項目實踐--靜態路由的拓展配置

7.7 靜態路由的拓展配置 網絡中的兩個重要思想: (1) 實的不行來虛的; (2) 范圍太大,劃分范圍。(分治) 7.7.1 負載均衡 (1)定義 負載均衡是一種網…

Base64 PDF解析器

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Base64 PDF解析器</title><style>body {font-family: Arial, sans-serif;max-width: 800px;margin: 20px auto;padding: 20px;}.contain…

基于51單片機的的雞籠補光和恒溫系統的設計與實現(源程序+Protues仿真+電路圖+元件清單+器件手冊)

編號&#xff1a;71 基于51單片機的的雞籠補光和恒溫系統的設計與實現 功能描述&#xff1a; 本設計由89C52單片機液晶12864顯示模塊聲光報警電路溫濕度傳感器電路風扇電路LED照明電路光照檢測電路GSM電路DS1302時鐘電路 1.實現的功能 (1)采用DHT11溫濕傳感器、光敏電阻捕捉…

Spring——Spring開發實戰經驗(1)

摘要 文章主要介紹了 Swagger 作為 API 文檔生成和測試工具的功能&#xff0c;包括自動生成 API 文檔、提供可視化調試界面、促進前后端協作、支持 OpenAPI 規范等。同時&#xff0c;還提及了 Spring Boot 與 Swagger3 的實戰應用&#xff0c;以及 Spring 開發中其他相關技術內…

SAP-ABAP:SAP的Screen Layout Designer屏幕布局設計器詳解及示例

在SAP中&#xff0c;Screen Layout Designer&#xff08;屏幕布局設計器&#xff09;是用于設計和維護屏幕&#xff08;Dynpro&#xff09;布局的工具。通過Screen Layout Designer&#xff0c;您可以創建和修改屏幕元素&#xff08;如輸入字段、按鈕、文本、表格控件等&#x…

安全筑基,智能賦能:BeeWorks IM引領企業協同新紀元

在數字經濟高速發展的今天&#xff0c;企業通訊系統已從單純的信息傳遞工具演變為支撐業務創新的核心平臺。傳統通訊工具在安全性、智能化、協同性等方面的不足&#xff0c;嚴重制約著企業的數字化轉型進程。BeeWorks IM系統以其創新的技術架構和智能化功能&#xff0c;正在重新…

SpringBoot實戰:高效獲取視頻資源

文章目錄 前言技術實現SpringBoot項目構建產品選取配置數據采集 號外號外 前言 在短視頻行業高速發展的背景下&#xff0c;海量內容數據日益增長&#xff0c;每天都有新的視頻、評論、點贊、分享等數據涌現。如何高效、精準地獲取并處理這些龐大的數據&#xff0c;已成為各大平…

【IoTDB 線上小課 11】為什么 DeepSeek 要選擇開源?

新年新氣象&#xff0c;【IoTDB 視頻小課】第十一期全新來臨&#xff01; 關于 IoTDB&#xff0c;關于物聯網&#xff0c;關于時序數據庫&#xff0c;關于開源... 一個問題重點&#xff0c;3-5 分鐘&#xff0c;我們講給你聽&#xff1a; 開源“加成”再次展現&#xff01; 現在…

宏任務和微任務

在前端開發中&#xff0c;**宏任務&#xff08;Macro Task&#xff09;**和**微任務&#xff08;Micro Task&#xff09;**是 JavaScript 事件循環&#xff08;Event Loop&#xff09;中的兩個重要概念。它們決定了異步代碼的執行順序。 --- ### 1. **事件循環&#xff08;Ev…

人工智能 - 機器學習、深度學習、強化學習是人工智能領域的理論基礎和方法論

機器學習、深度學習、強化學習是人工智能領域的三大核心方向,各自具有獨特的理論基礎和方法論。以下是它們的核心理論知識總結: 一、機器學習(Machine Learning, ML) 1. 基礎概念 目標:通過數據驅動的方式,讓機器從經驗中學習規律,完成預測、分類或決策任務。 核心范式…