」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 一步一步:用 Poetry 建立你的第一個 Python 函式庫(第一部分)

一步一步:用 Poetry 建立你的第一個 Python 函式庫(第一部分)

發佈於2024-07-30
瀏覽:791

Passo a Passo: Criando Sua Primeira Biblioteca em Python com Poetry (Parte I)

了解如何创建您的第一个 Python 库!在本系列文章中,我们将指导您完成使用 Poetry 创建和发布 Python 库的过程。让我们从构建一个小型计算器应用程序开始,涵盖从初始配置到基本功能的实现和测试的所有内容。在本系列结束时,您将准备好您的库,可以在 PyPI 上与世界共享。

什么是诗?

Poetry是Python项目的依赖管理和打包工具。它通过自动化许多传统上需要多种工具的任务,简化了创建和维护库和应用程序的过程。 Poetry 附带了您可能需要的所有工具来确定性地管理您的项目。以下是诗歌的一些主要优点:

  • 构建项目:使用单个命令轻松构建和打包您的项目。
  • 分享您的作品:通过在 PyPI 上发布您的作品来让人们了解您的作品。
  • 检查依赖项的状态:只需一个命令即可查看项目的依赖项。
  • 依赖解析:Poetry 带有一个详尽的依赖解析器,如果存在的话,它总是会找到一个解决方案。
  • 隔离:Poetry 使用配置的虚拟环境或创建自己的虚拟环境以始终与您的系统隔离。
  • 直观的 C​​LI:Poetry 命令直观且易于使用,默认敏感但可配置。

凭借这些优势,Poetry 成为开发 Python 项目的强大而高效的工具。

在启动 Python 库之前我们需要什么?

在开始编写代码之前,我们需要设置我们的开发环境。以下是确保一切准备就绪的步骤:

检查Python版本

首先,我们需要确保您安装了最新版本的 Python。要检查系统上安装的 Python 版本,请在终端中运行以下命令:

python --version

如果您尚未安装Python或需要更新Python,您可以从Python官方网站下载并安装。

安装诗歌

确保安装了最新版本的Python后,下一步是安装Poetry。您可以按照官方文档中详细说明安装 Poetry。这是一个快速安装命令:

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

启动您的图书馆:第一步

第 1 步:使用 Poetry 创建项目

现在我们已经安装了 Python 和 Poetry,是时候开始我们的计算器项目了。 Poetry 可以通过简单的命令轻松创建新项目。

导航到要创建项目的目录并在终端中运行以下命令:

poetry new calculator
cd calculator

此命令为您创建一个新的项目结构,其中包括必要的文件夹和文件。

calculator/
├── README.md
├── calculator
│   └── __init__.py
├── pyproject.toml
└── tests
    └── __init__.py

让我们了解一下生成的结构:

  • README.md:描述您的项目的文档文件。
  • calculator/:包含应用程序源代码的文件夹。
  • tests/:单元测试的文件夹。
  • pyproject.toml:Poetry的主要配置文件。

第2步:实现计算器功能

现在让我们在calculator/calculator.py 文件中创建计算器函数。

calculator/
├── calculator.py
├── __init__.py

打开calculator.py文件,实现基本计算器功能:

def add(a, b):
    return a   b

def subtract(a, b):
    return a - b

def multiply(a, b):
    return a * b

def divide(a, b):
    if b == 0:
        raise ValueError("Não é possível dividir por zero")
    return a / b

步骤 3:测试计算器功能

测试对于保证软件质量、提供错误修复和代码演化的可靠性至关重要。在此示例中,我们将使用单元测试来验证我们的计算器功能。让我们搭建测试环境并编写一些测试用例来确保数学运算正确。

配置测试环境

开始添加 pytest 作为开发依赖项:

poetry add --dev pytest

现在,在测试文件夹中创建一个名为 test_calculator.py 的文件:

import pytest
from calculator.calculator import add, subtract, multiply, divide

def test_add():
    assert add(2, 3) == 5
    assert add(-1, 1) == 0
    assert add(0, 0) == 0
    assert add(-1, -1) == -2

def test_subtract():
    assert subtract(5, 2) == 3
    assert subtract(0, 0) == 0
    assert subtract(-1, 1) == -2
    assert subtract(-1, -1) == 0

def test_multiply():
    assert multiply(2, 3) == 6
    assert multiply(5, 0) == 0
    assert multiply(-1, 1) == -1
    assert multiply(-2, -3) == 6

def test_divide():
    assert divide(6, 2) == 3
    assert divide(5, 2) == 2.5
    assert divide(-10, 2) == -5
    with pytest.raises(ValueError):
        divide(4, 0)

最后,只需使用以下命令运行测试:

poetry run pytest

第4步:发布到GitHub

现在我们的应用程序已完成测试,让我们准备将其在 GitHub 上共享。请按照以下步骤将您的项目添加到 GitHub:

  1. 在 GitHub 上创建存储库:转到 GitHub 并为您的计算器创建一个新存储库。

  2. 将您的项目添加到存储库:

  • 如果尚未初始化,请初始化项目目录中的 Git 存储库:
git init
  • 将所有文件添加到 Git 并进行第一次提交:
git add .
git commit -m "Initial commit"
  • 将本地存储库连接到 GitHub 上的远程存储库:
git remote add origin 
  • 将文件上传到 GitHub:
git push -u origin main

现在您的项目已在 GitHub 上,并准备好与其他开发人员共享和协作。

第5步:通过Pip或Poetry安装

要直接安装您的库,只需使用以下命令:

  • 通过点:
pip install git https://github.com/seu_usuario/seu_repositorio.git
  • 通过诗歌:
poetry add git https://github.com/seu_usuario/seu_repositorio.git

接下来是什么?

在本教程的第一部分中,我们介绍了使用 Poetry 创建 Python 库的基本基础知识。我们首先设置了开发环境,使用 pytest 实现了一个带有单元测试的基本计算器,并在 GitHub 上共享了该项目以供协作。

在本教程的下一部分中,我们将探索如何将您的库发布到 PyPI(标准 Python 包存储库),并学习如何直接从 PyPI 使用 Poetry 或 pip 安装它。这不仅可以让其他开发人员更轻松地使用您的库,还可以帮助您融入 Python 社区。

恭喜您走到这一步!我希望您喜欢创建 Python 库。请随时在评论中分享问题或建议。现在让我们进入第二部分,继续我们与 Python 社区的合作之旅。

参考

  • Canal Eduardo Mendes (@Dunossauro) 从头开始​​创建 python 包:从需求到部署
  • 诗歌文献
  • 诗歌:以简单的方式构建 Python 包
版本聲明 本文轉載於:https://dev.to/domdias/passo-a-passo-criando-sua-primeira-biblioteca-em-python-com-poetry-parte-i-2alj?1如有侵犯,請洽study_golang @163.com刪除
最新教學 更多>
  • 如何有效地更新實體框架5中的記錄?
    如何有效地更新實體框架5中的記錄?
    [2 優化實體框架5記錄更新 實體框架5提供了幾種更新數據庫記錄的方法。 該分析比較了三種常見方法,突出了它們的優勢和缺點,以幫助您選擇滿足需求的最佳方法。 方法1:獲取並更新單個屬性 允許對修改哪些屬性進行精確控制。 屬性排除:對於某些屬性(如密碼)不應通過此方法直接更新的方案。 多個查詢:...
    程式設計 發佈於2025-02-06
  • Java是否允許多種返回類型:仔細研究通用方法?
    Java是否允許多種返回類型:仔細研究通用方法?
    在java中的多個返回類型:一個誤解介紹,其中foo是自定義類。該方法聲明似乎擁有兩種返回類型:列表和E。但是,情況確實如此嗎? 通用方法:拆開神秘 [方法僅具有單一的返回類型。相反,它採用機制,如鑽石符號“ ”。 分解方法簽名: :本節定義了一個通用類型參數,E。它表示該方法接受了擴展foo類...
    程式設計 發佈於2025-02-06
  • 我可以在CSS中使用SVG作為偽元素嗎?
    我可以在CSS中使用SVG作為偽元素嗎?
    使用svgs用作pseudo-element content css content properts允許在使用元素之前或之後使用元素插入各種類型的內容偽元素,例如::之前和::之後。但是,對可以包括哪些內容有限制。 可以將svgs用作pseudo-element Content? ,現在可以使...
    程式設計 發佈於2025-02-06
  • 在沒有密碼提示的情況下,如何在Ubuntu上安裝MySQL?
    在沒有密碼提示的情況下,如何在Ubuntu上安裝MySQL?
    在ubuntu 使用debconf-set-selections sudo debconf-set-selections
    程式設計 發佈於2025-02-06
  • HTML格式標籤
    HTML格式標籤
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    程式設計 發佈於2025-02-06
  • 如何從PHP服務器發送文件?
    如何從PHP服務器發送文件?
    將文件發送到user
    程式設計 發佈於2025-02-06
  • 如何克服PHP的功能重新定義限制?
    如何克服PHP的功能重新定義限制?
    克服PHP的函數重新定義限制在PHP中,多次定義一個相同名稱的函數是一個no-no。嘗試這樣做,如提供的代碼段所示,將導致可怕的“不能重新列出”錯誤。 // error:“ coss redeclare foo()” 但是,php工具腰帶中有一個隱藏的寶石:runkit擴展。它使您能夠靈活...
    程式設計 發佈於2025-02-06
  • 您什麼時候需要取消多層指針?
    您什麼時候需要取消多層指針?
    使用多個級別的指針是有道理的: 在面向對象的編程上下文中,可以使用三重指針來表示複雜的指針層次結構。例如,考慮以下C類結構:類A { 民眾: char *b; }; B級{ 民眾: char *c; }; 在這裡,A對象包含一個指向B對象的指針,而B對象包含指向char的指針。要從...
    程式設計 發佈於2025-02-06
  • 如何在Java字符串中有效替換多個子字符串?
    如何在Java字符串中有效替換多個子字符串?
    Exploiting Regular ExpressionsA more efficient solution involves leveraging regular expressions.正則表達式允許您定義復雜的搜索模式並在單個操作中執行文本轉換。 示例示例usage 接下來,您可以使用匹配...
    程式設計 發佈於2025-02-06
  • 為什麼我的nvarchar(最大)值將SQL Server 2005中的4000個字符截斷為4000個字符?
    為什麼我的nvarchar(最大)值將SQL Server 2005中的4000個字符截斷為4000個字符?
    convenation crocess 在提供的代碼中,字符串是通過對一系列常量和一系列常數和一系列常數和變量均小於4000個字符。在被分配到 @sql1之前,串聯的字符串仍被視為較小字符串的集合。 數據類型preceDence [&& && &&&&&&&&&&&&&&&&&&&&&&...
    程式設計 發佈於2025-02-06
  • 為什麼在JDBC Connections中使用class.forname(“ oracle.jdbc.oracledriver”)?
    為什麼在JDBC Connections中使用class.forname(“ oracle.jdbc.oracledriver”)?
    class.forname(“ oracle.jdbc.driver.oracledriver”)在jdbc connections中的目的是什麼?使用Java,class.forname(“ oracle.jdbc.driver.oracledriver”)命令扮演至關重要的角色。 的目的是...
    程式設計 發佈於2025-02-06
  • 插入資料時如何修復「常規錯誤:2006 MySQL 伺服器已消失」?
    插入資料時如何修復「常規錯誤:2006 MySQL 伺服器已消失」?
    插入記錄時如何解決“一般錯誤:2006 MySQL 服務器已消失”介紹:將數據插入MySQL 數據庫有時會導致錯誤“一般錯誤:2006 MySQL 服務器已消失”。當與服務器的連接丟失時會出現此錯誤,通常是由於 MySQL 配置中的兩個變量之一所致。 解決方案:解決此錯誤的關鍵是調整wait_tim...
    程式設計 發佈於2025-02-06
  • 在網絡開發中保持領先地位:最新新聞,工具和見解#49
    在網絡開發中保持領先地位:最新新聞,工具和見解#49
    ?阅读! 创始人模式:一般假设:一家初创公司的管理正在向经理模式变化 - 经理模式 - 在商学院管理和教授的众所周知的方式。 Founder mode is less known and understood, but may be more effective. / start...
    程式設計 發佈於2025-02-06
  • 如何使用PHP將斑點(圖像)正確插入MySQL?
    如何使用PHP將斑點(圖像)正確插入MySQL?
    在嘗試將image存儲在mysql數據庫中時,您可能會遇到一個可能會遇到問題。本指南將提供成功存儲您的圖像數據的解決方案。 easudy values('$ this-> ; image_id','file_get_contents($ tmp_imag...
    程式設計 發佈於2025-02-06
  • 我應該在使用塊內明確關閉SQLConnection嗎?
    我應該在使用塊內明確關閉SQLConnection嗎?
    答案在於使用關鍵字的行為。退出使用塊時,在包含的對像上調用.dispose()方法。對於sqlConnection,.dispose()自動關閉連接並發布任何關聯的資源。 ]使用cn作為new System.data.sqlclient.sqlConnection() CN.OPEN ...
    程式設計 發佈於2025-02-06

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3