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

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

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

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刪除
最新教學 更多>
  • 如何解決由於Android的內容安全策略而拒絕加載腳本... \”錯誤?
    如何解決由於Android的內容安全策略而拒絕加載腳本... \”錯誤?
    Unveiling the Mystery: Content Security Policy Directive ErrorsEncountering the enigmatic error "Refused to load the script..." when deployi...
    程式設計 發佈於2025-05-04
  • Go語言如何動態發現導出包類型?
    Go語言如何動態發現導出包類型?
    與反射軟件包中的有限類型的發現能力相反,本文探索了替代方法,探索了在Runruntime。 go import( “ FMT” “去/進口商” ) func main(){ pkg,err:= incorter.default()。導入(“ time”) 如果er...
    程式設計 發佈於2025-05-04
  • 可以在純CS中將多個粘性元素彼此堆疊在一起嗎?
    可以在純CS中將多個粘性元素彼此堆疊在一起嗎?
    [2这里: https://webthemez.com/demo/sticky-multi-header-scroll/index.html </main> <section> { display:grid; grid-template-...
    程式設計 發佈於2025-05-04
  • 如何使用Python理解有效地創建字典?
    如何使用Python理解有效地創建字典?
    在python中,詞典綜合提供了一種生成新詞典的簡潔方法。儘管它們與列表綜合相似,但存在一些顯著差異。 與問題所暗示的不同,您無法為鑰匙創建字典理解。您必須明確指定鍵和值。 For example:d = {n: n**2 for n in range(5)}This creates a dict...
    程式設計 發佈於2025-05-04
  • MySQL中如何高效地根據兩個條件INSERT或UPDATE行?
    MySQL中如何高效地根據兩個條件INSERT或UPDATE行?
    在兩個條件下插入或更新或更新 solution:的答案在於mysql的插入中...在重複鍵更新語法上。如果不存在匹配行或更新現有行,則此功能強大的功能可以通過插入新行來進行有效的數據操作。如果違反了唯一的密鑰約束。 實現所需的行為,該表必須具有唯一的鍵定義(在這種情況下為'名稱'...
    程式設計 發佈於2025-05-04
  • Python環境變量的訪問與管理方法
    Python環境變量的訪問與管理方法
    Accessing Environment Variables in PythonTo access environment variables in Python, utilize the os.environ object, which represents a mapping of envir...
    程式設計 發佈於2025-05-04
  • 如何限制動態大小的父元素中元素的滾動範圍?
    如何限制動態大小的父元素中元素的滾動範圍?
    在交互式接口中實現垂直滾動元素的CSS高度限制,控制元素的滾動行為對於確保用戶體驗和可訪問性是必不可少的。一種這樣的方案涉及限制動態大小的父元素中元素的滾動範圍。 問題:考慮一個佈局,其中我們具有與用戶垂直滾動一起移動的可滾動地圖div,同時與固定的固定sidebar保持一致。但是,地圖的滾動無限...
    程式設計 發佈於2025-05-04
  • 如何使用組在MySQL中旋轉數據?
    如何使用組在MySQL中旋轉數據?
    在關係數據庫中使用mySQL組使用mySQL組進行查詢結果,在關係數據庫中使用MySQL組,轉移數據的數據是指重新排列的行和列的重排以增強數據可視化。在這裡,我們面對一個共同的挑戰:使用組的組將數據從基於行的基於列的轉換為基於列。 Let's consider the following ...
    程式設計 發佈於2025-05-04
  • 為什麼HTML無法打印頁碼及解決方案
    為什麼HTML無法打印頁碼及解決方案
    無法在html頁面上打印頁碼? @page規則在@Media內部和外部都無濟於事。 HTML:Customization:@page { margin: 10%; @top-center { font-family: sans-serif; font-weight: ...
    程式設計 發佈於2025-05-04
  • 如何從PHP中的Unicode字符串中有效地產生對URL友好的sl。
    如何從PHP中的Unicode字符串中有效地產生對URL友好的sl。
    為有效的slug生成首先,該函數用指定的分隔符替換所有非字母或數字字符。此步驟可確保slug遵守URL慣例。隨後,它採用ICONV函數將文本簡化為us-ascii兼容格式,從而允許更廣泛的字符集合兼容性。 接下來,該函數使用正則表達式刪除了不需要的字符,例如特殊字符和空格。此步驟可確保slug僅包...
    程式設計 發佈於2025-05-04
  • 如何同步迭代並從PHP中的兩個等級陣列打印值?
    如何同步迭代並從PHP中的兩個等級陣列打印值?
    同步的迭代和打印值來自相同大小的兩個數組使用兩個數組相等大小的selectbox時,一個包含country代碼的數組,另一個包含鄉村代碼,另一個包含其相應名稱的數組,可能會因不當提供了exply for for for the uncore for the forsion for for ytry...
    程式設計 發佈於2025-05-04
  • 如何從PHP中的數組中提取隨機元素?
    如何從PHP中的數組中提取隨機元素?
    從陣列中的隨機選擇,可以輕鬆從數組中獲取隨機項目。考慮以下數組:; 從此數組中檢索一個隨機項目,利用array_rand( array_rand()函數從數組返回一個隨機鍵。通過將$項目數組索引使用此鍵,我們可以從數組中訪問一個隨機元素。這種方法為選擇隨機項目提供了一種直接且可靠的方法。
    程式設計 發佈於2025-05-04
  • Async Void vs. Async Task在ASP.NET中:為什麼Async Void方法有時會拋出異常?
    Async Void vs. Async Task在ASP.NET中:為什麼Async Void方法有時會拋出異常?
    在ASP.NET async void void async void void void void void void void的設計無需返回asynchroncon而無需返回任務對象。他們在執行過程中增加未償還操作的計數,並在完成後減少。在某些情況下,這種行為可能是有益的,例如未期望或明確...
    程式設計 發佈於2025-05-04
  • Java開發者如何保護數據庫憑證免受反編譯?
    Java開發者如何保護數據庫憑證免受反編譯?
    在java 在單獨的配置文件保護數據庫憑證的最有效方法中存儲憑據是將它們存儲在單獨的配置文件中。該文件可以在運行時加載,從而使登錄數據從編譯的二進製文件中遠離。 使用prevereness class import java.util.prefs.preferences; 公共類示例{ 首選...
    程式設計 發佈於2025-05-04

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

Copyright© 2022 湘ICP备2022001581号-3