”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 一步一步:用 Poetry 创建你的第一个 Python 库(第一部分)

一步一步:用 Poetry 创建你的第一个 Python 库(第一部分)

发布于2024-07-30
浏览:415

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如有侵犯,请联系[email protected]删除
最新教程 更多>
  • Android如何向PHP服务器发送POST数据?
    Android如何向PHP服务器发送POST数据?
    在android apache httpclient(已弃用) httpclient httpclient = new defaulthttpclient(); httppost httppost = new httppost(“ http://www.yoursite.com/script.p...
    编程 发布于2025-05-05
  • Java数组中元素位置查找技巧
    Java数组中元素位置查找技巧
    在Java数组中检索元素的位置 利用Java的反射API将数组转换为列表中,允许您使用indexof方法。 (primitives)(链接到Mishax的解决方案) 用于排序阵列的数组此方法此方法返回元素的索引,如果发现了元素的索引,或一个负值,指示应放置元素的插入点。
    编程 发布于2025-05-05
  • 如何在鼠标单击时编程选择DIV中的所有文本?
    如何在鼠标单击时编程选择DIV中的所有文本?
    在鼠标上选择div文本单击带有文本内容,用户如何使用单个鼠标单击单击div中的整个文本?这允许用户轻松拖放所选的文本或直接复制它。 在单个鼠标上单击的div元素中选择文本,您可以使用以下Javascript函数: function selecttext(canduterid){ if(do...
    编程 发布于2025-05-05
  • 如何同步迭代并从PHP中的两个等级阵列打印值?
    如何同步迭代并从PHP中的两个等级阵列打印值?
    同步的迭代和打印值来自相同大小的两个数组使用两个数组相等大小的selectbox时,一个包含country代码的数组,另一个包含乡村代码,另一个包含其相应名称的数组,可能会因不当提供了exply for for for the uncore for the forsion for for ytry...
    编程 发布于2025-05-05
  • Java是否允许多种返回类型:仔细研究通用方法?
    Java是否允许多种返回类型:仔细研究通用方法?
    在Java中的多个返回类型:一种误解类型:在Java编程中揭示,在Java编程中,Peculiar方法签名可能会出现,可能会出现,使开发人员陷入困境,使开发人员陷入困境。 getResult(string s); ,其中foo是自定义类。该方法声明似乎拥有两种返回类型:列表和E。但这确实是如此吗...
    编程 发布于2025-05-05
  • 在Go语言中如何简洁定义10的幂常量
    在Go语言中如何简洁定义10的幂常量
    在GO 利用浮点线文字一种简洁的方式是使用浮点文字,该方法是使用floingpoint protals。写作1E3比写作1000更有效。这是一个示例(67个没有空间的字符):的文字用于未构图的整数常数,我们可以将1000用于KB,并用KB将随后的常量乘以KB,如下所示(77个没有空格的字符):,作...
    编程 发布于2025-05-05
  • 如何实时捕获和流媒体以进行聊天机器人命令执行?
    如何实时捕获和流媒体以进行聊天机器人命令执行?
    在开发能够执行命令的chatbots的领域中,实时从命令执行实时捕获Stdout,一个常见的需求是能够检索和显示标准输出(stdout)在cath cath cant cant cant cant cant cant cant cant interfaces in Chate cant inter...
    编程 发布于2025-05-05
  • 您可以使用CSS在Chrome和Firefox中染色控制台输出吗?
    您可以使用CSS在Chrome和Firefox中染色控制台输出吗?
    在javascript console 中显示颜色是可以使用chrome的控制台显示彩色文本,例如红色的redors,for for for for错误消息?回答是的,可以使用CSS将颜色添加到Chrome和Firefox中的控制台显示的消息(版本31或更高版本)中。要实现这一目标,请使用以下模...
    编程 发布于2025-05-05
  • 如何在JavaScript对象中动态设置键?
    如何在JavaScript对象中动态设置键?
    在尝试为JavaScript对象创建动态键时,如何使用此Syntax jsObj['key' i] = 'example' 1;不工作。正确的方法采用方括号: jsobj ['key''i] ='example'1; 在JavaScript中,数组是一...
    编程 发布于2025-05-05
  • Python中何时用"try"而非"if"检测变量值?
    Python中何时用"try"而非"if"检测变量值?
    使用“ try“ vs.” if”来测试python 在python中的变量值,在某些情况下,您可能需要在处理之前检查变量是否具有值。在使用“如果”或“ try”构建体之间决定。“ if” constructs result = function() 如果结果: 对于结果: ...
    编程 发布于2025-05-05
  • 在细胞编辑后,如何维护自定义的JTable细胞渲染?
    在细胞编辑后,如何维护自定义的JTable细胞渲染?
    在JTable中维护jtable单元格渲染后,在JTable中,在JTable中实现自定义单元格渲染和编辑功能可以增强用户体验。但是,至关重要的是要确保即使在编辑操作后也保留所需的格式。在设置用于格式化“价格”列的“价格”列,用户遇到的数字格式丢失的“价格”列的“价格”之后,问题在设置自定义单元格...
    编程 发布于2025-05-05
  • 为什么Microsoft Visual C ++无法正确实现两台模板的实例?
    为什么Microsoft Visual C ++无法正确实现两台模板的实例?
    在Microsoft Visual C 中,Microsoft consions用户strate strate strate strate strate strate strate strate strate strate strate strate strate strate strate st...
    编程 发布于2025-05-05
  • Java中Lambda表达式为何需要“final”或“有效final”变量?
    Java中Lambda表达式为何需要“final”或“有效final”变量?
    Lambda Expressions Require "Final" or "Effectively Final" VariablesThe error message "Variable used in lambda expression shou...
    编程 发布于2025-05-05
  • 如何在GO编译器中自定义编译优化?
    如何在GO编译器中自定义编译优化?
    在GO编译器中自定义编译优化 GO中的默认编译过程遵循特定的优化策略。 However, users may need to adjust these optimizations for specific requirements.Optimization Control in Go Compi...
    编程 发布于2025-05-05
  • C++20 Consteval函数中模板参数能否依赖于函数参数?
    C++20 Consteval函数中模板参数能否依赖于函数参数?
    [ consteval函数和模板参数依赖于函数参数在C 17中,模板参数不能依赖一个函数参数,因为编译器仍然需要对非contexexpr futcoriations contim at contexpr function进行评估。 compile time。 C 20引入恒定函数,必须在编译时进行...
    编程 发布于2025-05-05

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3