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

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

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

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]删除
最新教程 更多>
  • 解决MySQL错误1153:数据包超出'max_allowed_packet'限制
    解决MySQL错误1153:数据包超出'max_allowed_packet'限制
    mysql错误1153:故障排除比“ max_allowed_pa​​cket” bytes 更大的数据包,用于面对阴谋mysql错误1153,同时导入数据capase doft a Database dust?让我们深入研究罪魁祸首并探索解决方案以纠正此问题。理解错误此错误表明在导入过程中接...
    编程 发布于2025-04-23
  • 如何在GO编译器中自定义编译优化?
    如何在GO编译器中自定义编译优化?
    在GO编译器中自定义编译优化 GO中的默认编译过程遵循特定的优化策略。 However, users may need to adjust these optimizations for specific requirements.Optimization Control in Go Compi...
    编程 发布于2025-04-23
  • 如何在Chrome中居中选择框文本?
    如何在Chrome中居中选择框文本?
    选择框的文本对齐:局部chrome-inly-ly-ly-lyly solument 您可能希望将文本中心集中在选择框中,以获取优化的原因或提高可访问性。但是,在CSS中的选择元素中手动添加一个文本 - 对属性可能无法正常工作。初始尝试 state)</option> < op...
    编程 发布于2025-04-23
  • 在GO中构造SQL查询时,如何安全地加入文本和值?
    在GO中构造SQL查询时,如何安全地加入文本和值?
    在go中构造文本sql查询时,在go sql queries 中,在使用conting and contement和contement consem per时,尤其是在使用integer per当per当per时,per per per当per. [&​​&&&&&&&&&&&&&&&默元组方法在...
    编程 发布于2025-04-23
  • MySQL中如何高效地根据两个条件INSERT或UPDATE行?
    MySQL中如何高效地根据两个条件INSERT或UPDATE行?
    在两个条件下插入或更新或更新 solution:的答案在于mysql的插入中...在重复键更新语法上。如果不存在匹配行或更新现有行,则此功能强大的功能可以通过插入新行来进行有效的数据操作。如果违反了唯一的密钥约束。实现所需的行为,该表必须具有唯一的键定义(在这种情况下为'名称'...
    编程 发布于2025-04-23
  • FastAPI自定义404页面创建指南
    FastAPI自定义404页面创建指南
    response = await call_next(request) if response.status_code == 404: return RedirectResponse("https://fastapi.tiangolo.com") else: ...
    编程 发布于2025-04-23
  • 如何避免Go语言切片时的内存泄漏?
    如何避免Go语言切片时的内存泄漏?
    ,a [j:] ...虽然通常有效,但如果使用指针,可能会导致内存泄漏。这是因为原始的备份阵列保持完整,这意味着新切片外部指针引用的任何对象仍然可能占据内存。 copy(a [i:] 对于k,n:= len(a)-j i,len(a); k
    编程 发布于2025-04-23
  • C++中如何将独占指针作为函数或构造函数参数传递?
    C++中如何将独占指针作为函数或构造函数参数传递?
    在构造函数和函数中将唯一的指数管理为参数 unique pointers( unique_ptr [2启示。通过值: base(std :: simelor_ptr n) :next(std :: move(n)){} 此方法将唯一指针的所有权转移到函数/对象。指针的内容被移至功能中,在操作...
    编程 发布于2025-04-23
  • C++20 Consteval函数中模板参数能否依赖于函数参数?
    C++20 Consteval函数中模板参数能否依赖于函数参数?
    [ consteval函数和模板参数依赖于函数参数在C 17中,模板参数不能依赖一个函数参数,因为编译器仍然需要对非contexexpr futcoriations contim at contexpr function进行评估。 compile time。 C 20引入恒定函数,必须在编译时进行...
    编程 发布于2025-04-23
  • 如何同步迭代并从PHP中的两个等级阵列打印值?
    如何同步迭代并从PHP中的两个等级阵列打印值?
    同步的迭代和打印值来自相同大小的两个数组使用两个数组相等大小的selectbox时,一个包含country代码的数组,另一个包含乡村代码,另一个包含其相应名称的数组,可能会因不当提供了exply for for for the uncore for the forsion for for ytry...
    编程 发布于2025-04-23
  • Go web应用何时关闭数据库连接?
    Go web应用何时关闭数据库连接?
    在GO Web Applications中管理数据库连接很少,考虑以下简化的web应用程序代码:出现的问题:何时应在DB连接上调用Close()方法?,该特定方案将自动关闭程序时,该程序将在EXITS EXITS EXITS出现时自动关闭。但是,其他考虑因素可能保证手动处理。选项1:隐式关闭终止数...
    编程 发布于2025-04-23
  • 在Python中如何创建动态变量?
    在Python中如何创建动态变量?
    在Python 中,动态创建变量的功能可以是一种强大的工具,尤其是在使用复杂的数据结构或算法时,Dynamic Variable Creation的动态变量创建。 Python提供了几种创造性的方法来实现这一目标。利用dictionaries 一种有效的方法是利用字典。字典允许您动态创建密钥并分...
    编程 发布于2025-04-23
  • 哪种在JavaScript中声明多个变量的方法更可维护?
    哪种在JavaScript中声明多个变量的方法更可维护?
    在JavaScript中声明多个变量:探索两个方法在JavaScript中,开发人员经常遇到需要声明多个变量的需要。对此的两种常见方法是:在单独的行上声明每个变量: 当涉及性能时,这两种方法本质上都是等效的。但是,可维护性可能会有所不同。 第一个方法被认为更易于维护。每个声明都是其自己的语句,使其...
    编程 发布于2025-04-23
  • 切换到MySQLi后CodeIgniter连接MySQL数据库失败原因
    切换到MySQLi后CodeIgniter连接MySQL数据库失败原因
    Unable to Connect to MySQL Database: Troubleshooting Error MessageWhen attempting to switch from the MySQL driver to the MySQLi driver in CodeIgniter,...
    编程 发布于2025-04-23
  • 查找当前执行JavaScript的脚本元素方法
    查找当前执行JavaScript的脚本元素方法
    如何引用当前执行脚本的脚本元素在某些方案中理解问题在某些方案中,开发人员可能需要将其他脚本动态加载其他脚本。但是,如果Head Element尚未完全渲染,则使用document.getElementsbytagname('head')[0] .appendChild(v)的常规方...
    编程 发布于2025-04-23

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

Copyright© 2022 湘ICP备2022001581号-3