当前位置: 首页 > news >正文

从零到一:快速上手 Poetry——Python 项目管理的利器

在 Python 项目开发中,包管理、依赖管理和虚拟环境的创建一直是开发者们经常面对的难题。传统上,开发者通常会使用 pipvirtualenv 或者 conda 来处理这些问题。然而,随着 Python 项目复杂度的增加,传统工具往往显得力不从心,这时 Poetry 应运而生,成为一个更加现代化、简洁和高效的工具。

本文将从零开始,带领你快速上手 Poetry,介绍如何使用 Poetry 来管理 Python 项目,包括安装、配置、依赖管理、虚拟环境和打包发布等。

什么是 Poetry?

Poetry 是一个 Python 项目的管理工具,它集成了依赖管理、虚拟环境管理、包打包、发布等功能。Poetry 旨在简化开发者的工作流程,让你能够轻松地管理项目的依赖,确保环境的一致性,并快速创建和发布 Python 包。

Poetry 的关键优势是:

  • 自动创建和管理虚拟环境。
  • 精确的依赖解析,避免版本冲突。
  • 使用 pyproject.toml 文件简化配置和管理。
  • 支持打包、发布、安装等一体化功能。

Poetry 的安装

首先,你需要在你的系统上安装 Poetry。你可以使用官方推荐的安装命令来进行安装:

1. 安装 Poetry

打开终端(命令行),并运行以下命令来安装 Poetry:

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

或者,如果你是 Windows 用户,你可以使用以下 PowerShell 命令:

(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicP) | python -

安装完成后,可以通过以下命令确认是否安装成功:

poetry --version

如果安装成功,会输出 Poetry 的版本号。

创建一个新项目

Poetry 提供了一个非常简洁的命令来初始化新的 Python 项目,它会自动创建必要的文件结构和配置。

2. 创建新项目

在终端中运行以下命令,创建一个新的 Python 项目:

poetry new my_project

这将会在当前目录下创建一个名为 my_project 的文件夹,并且自动生成一个基本的 Python 项目结构。你会看到如下文件和文件夹:

my_project/
├── my_project/
│   └── __init__.py
├── pyproject.toml
└── tests/└── __init__.py
  • pyproject.toml:这是 Poetry 项目的核心配置文件,所有关于项目的元数据(如依赖、版本等)都会写在这个文件里。
  • my_project/__init__.py:项目的 Python 源代码文件。
  • tests/:包含测试代码的文件夹,Poetry 默认为你创建了一个简单的测试文件夹。

3. 进入项目目录

cd my_project

管理项目依赖

Poetry 提供了强大的依赖管理功能,让你可以精确控制项目所需的包版本,并自动处理依赖的版本冲突。通过一些简单的命令,你可以轻松地安装、更新和管理项目依赖。

4. 初始化项目依赖

如果你已经有一个现有的项目,并且希望使用 Poetry 来管理其依赖,可以通过以下命令来初始化项目并创建 pyproject.toml 文件:

poetry init -n

-n 参数表示自动跳过交互式提示,直接创建文件。这将会生成一个 pyproject.toml 文件,并为你提供一个基础的依赖结构。

5. 添加依赖

当你需要向项目中添加一个新的依赖时,可以使用 poetry add 命令。举个例子,如果你想添加 requests 库,可以运行以下命令:

poetry add requests

这会将 requests 库添加到 pyproject.toml 中,同时 Poetry 会根据项目的需要自动解决依赖版本。

如果你需要添加特定版本的依赖,可以使用类似下面的命令:

poetry add requests@2.25.0

6. 安装所有依赖

如果你从其他地方克隆了一个项目,并且需要安装所有的依赖,可以使用 poetry install 命令。它会根据 pyproject.tomlpoetry.lock 文件安装所有的项目依赖:

poetry install

该命令会自动创建并激活虚拟环境,确保你在隔离的环境中安装依赖,从而避免全局包的冲突。

7. 安装开发依赖

有些依赖是只在开发时需要的,比如测试框架。Poetry 允许你使用 --dev 参数来安装开发依赖:

poetry add --dev pytest

此时,pytest 将只会在开发环境中安装,不会影响生产环境的依赖。

8. 使用其他 Python 版本

Poetry 允许你指定使用特定的 Python 版本。如果你已经安装了多个 Python 版本,可以通过 poetry env use 命令指定 Python 解释器的路径。例如:

poetry env use "path/to/your/python.exe"

这个命令会强制 Poetry 使用你指定的 Python 解释器来创建虚拟环境。

9. 使用 requirements.txt

如果你的项目原本使用了 requirements.txt 来管理依赖,并且你想迁移到 Poetry 上,可以使用以下命令来安装 requirements.txt 中的所有依赖:

poetry run pip install -r requirements.txt

这会在 Poetry 的虚拟环境中使用 pip 安装 requirements.txt 中列出的所有依赖项,并确保它们与项目的其他依赖兼容。

10. 更新依赖

随着项目的发展,依赖可能会有新的版本发布。你可以使用 poetry update 命令来更新所有依赖到最新的兼容版本:

poetry update

这将会根据你的 pyproject.toml 文件中的版本要求,更新所有已安装的依赖。

11. 查看项目的依赖

如果你想查看当前项目的所有依赖,可以使用:

poetry show

这将列出所有直接和间接的依赖项,并提供每个包的版本和其他详细信息。

12. 删除依赖

如果某个依赖不再需要,你可以使用 poetry remove 命令来删除它:

poetry remove requests

这会将 requestspyproject.toml 文件和 poetry.lock 文件中移除,并卸载它。


通过这些命令,Poetry 使得依赖管理变得更加高效和便捷。无论是添加、更新、安装开发依赖,还是使用指定的 Python 版本,Poetry 都提供了灵活的工具来帮助你管理项目的依赖和虚拟环境。

虚拟环境管理

Poetry 自动为每个项目创建和管理虚拟环境,这样就能确保你的项目始终在隔离的环境中运行,避免了全局安装包可能带来的冲突。

13. 查看虚拟环境

如果你想查看 Poetry 创建的虚拟环境,可以运行以下命令:

poetry env list

它会列出当前项目所使用的虚拟环境。你还可以通过 poetry env use 来切换 Python 版本。

14. 激活虚拟环境

你可以通过以下命令激活虚拟环境:

poetry shell

这会激活虚拟环境,并进入一个新的 shell,你可以在其中运行 Python 命令,测试代码等。

运行项目

Poetry 允许你直接在虚拟环境中运行命令,而不需要先手动激活虚拟环境。

15. 使用 Poetry 运行命令

如果你想直接运行 Python 脚本,可以使用以下命令:

poetry run python my_project/script.py

poetry run 会确保命令在 Poetry 管理的虚拟环境中运行。

打包和发布

当你的项目开发完成后,Poetry 还可以帮助你将项目打包并发布到 PyPI 或其他 Python 包管理平台。

16. 打包项目

首先,使用以下命令来构建项目的发行版:

poetry build

这将会生成 .tar.gz.whl 格式的包,存放在 dist/ 文件夹中。

17. 发布到 PyPI

如果你准备将项目发布到 PyPI,可以使用以下命令:

poetry publish --repositorypypi

当然,在发布前,你需要配置 PyPI 的认证信息,可以通过 poetry config 命令进行配置。

常用 Poetry 命令总结

命令功能
poetry new <project_name>创建一个新的 Python 项目
poetry add <package>添加依赖包到项目中
poetry install安装项目的所有依赖
poetry update更新项目依赖到最新版本
poetry shell启动项目虚拟环境的 shell
poetry run <command>在虚拟环境中运行指定命令
poetry build打包项目
poetry publish发布项目到 PyPI
poetry env list查看虚拟环境

总结

Poetry 是一个强大的 Python 项目管理工具,它整合了依赖管理、虚拟环境、包打包和发布等多项功能。通过简洁的命令行界面和易于理解的配置文件,它帮助开发者更高效地管理项目,并避免了版本冲突、依赖问题等常见困扰。

无论你是 Python 新手还是资深开发者,Poetry 都是一个值得尝试的工具。通过本文的介绍,你已经掌握了如何从零开始使用 Poetry 管理你的 Python 项目,管理依赖、虚拟环境、打包发布等都变得轻松起来。

相关文章:

从零到一:快速上手 Poetry——Python 项目管理的利器

在 Python 项目开发中&#xff0c;包管理、依赖管理和虚拟环境的创建一直是开发者们经常面对的难题。传统上&#xff0c;开发者通常会使用 pip、virtualenv 或者 conda 来处理这些问题。然而&#xff0c;随着 Python 项目复杂度的增加&#xff0c;传统工具往往显得力不从心&…...

【量化科普】Beta,贝塔系数

【量化科普】Beta&#xff0c;贝塔系数 &#x1f680;量化软件开通 &#x1f680;量化实战教程 在量化投资领域&#xff0c;Beta&#xff08;贝塔系数&#xff09;是一个衡量投资组合或股票相对于整个市场波动性的指标。它反映了资产收益与市场收益之间的相关性&#xff0c;…...

C++----异常

一、C 语言传统的错误处理方式 在 C 语言中&#xff0c;处理错误主要有两种传统方式&#xff0c;每种方式都有其特点和局限性。 1. 终止程序 原理&#xff1a;使用类似assert这样的断言机制&#xff0c;当程序运行到某个条件不满足时&#xff0c;直接终止程序的执行。示例代…...

合理规划时间,从容应对水利水电安全员考试

合理规划时间&#xff0c;从容应对水利水电安全员考试 在忙碌的工作与生活节奏中备考水利水电安全员考试&#xff0c;合理规划时间是实现高效备考的核心。科学的时间管理能让你充分利用每一分每一秒&#xff0c;稳步迈向考试成功。 制定详细的学习计划是第一步。依据考试时间…...

(解决) Windows 11使用SetSuspendState睡眠命令但是进入的是休眠

Windows 11 24H2 goes into hibernation mode instead of sleep mode. How can I create a sleep mode shortcut file? 25年3月4号 Win11 23H2 起因 使用网上说的睡眠命令创建bat双击后&#xff0c;电脑风扇会运行一段时间后再停止&#xff08;应该是在保存进程到硬盘&#…...

Spring Boot 接口 JSON 序列化优化:忽略 Null 值的九种解决方案详解

一、针对特定接口null的处理&#xff1a; 方法一&#xff1a;使用 JsonInclude 注解 1.1 类级别&#xff1a;在接口返回的 ‌DTO 类或字段‌ 上添加 JsonInclude 注解&#xff0c;强制忽略 null 值&#xff1a; 类级别&#xff1a;所有字段为 null 时不返回 JsonInclude(Js…...

计算机毕业设计Python+DeepSeek-R1大模型考研院校推荐系统 考研分数线预测 考研推荐系统 考研(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

一、Prometheus架构

Prometheus 云原生十二要素是一套最佳实践和规范,旨在帮助开发人员更好地构建云原生应用 这十二个要素分别是: 单一职责独立部署无状态声明式API服务发现容错处理自适应算法自动化运维响应式编程通信协议服务注册与发现数据持久化一、Prometheus 是什么 Prometheus 是一个…...

火山引擎 DeepSeek R1 API 使用小白教程

一、火山引擎 DeepSeek R1 API 申请 首先需要三个要素&#xff1a; 1&#xff09;API Key 2&#xff09;API 地址 3&#xff09;模型ID 1、首先打开火山引擎的 DeepSeek R1 模型页面 地址&#xff1a;账号登录-火山引擎 2、在页面右下角&#xff0c;找到【推理】按钮&#…...

react+vite+pnpm+ts基础项目搭建

1. 项目初始化 pnpm create vitelatest my-react-app --template react-ts cd my-react-app pnpm install2. 核心依赖安装 # 基础依赖 pnpm add react-router-dom tanstack/react-query zustand axios# UI 组件库 (任选其一) pnpm add mui/material emotion/react emotion/st…...

ArcGIS Pro 经纬网添加全解析:从布局到样式优化

在地理信息系统的广阔领域中&#xff0c;地图的精确性与直观性对于数据的呈现和分析起着至关重要的作用。 经纬网&#xff0c;作为地图上不可或缺的元素之一&#xff0c;能够为用户提供准确的地理坐标参考&#xff0c;帮助用户快速定位和理解地理空间数据的分布。 本文将深入…...

新闻研究导刊杂志社《新闻研究导刊》编辑部2024年第23期目录

研究论文 媒介智能化环境下新闻传播面临的风险及应对策略研究 冶玉娜; AI赋能地方政务新媒体智能化转型策略研究——以佛山政务新媒体为例 温秀妍; 新闻传播在社交媒体影响下的流变与发展展望 李晋; 县级融媒体中心生产优质短视频的路径探索 陈政清; 数字游…...

DDoS攻击的介绍和防治

一.DDoS攻击是什么 DDoS攻击&#xff1a;dos是服务器拒绝提供服务的意思&#xff0c;最前面的D是分布式的意思&#xff0c;所以说这个大概可以理解为分布式的机器攻击服务器&#xff0c;占用服务器资源&#xff0c;使得服务器拒绝提供服务的一种攻击手段&#xff0c;虽然原理简…...

UDP透传程序

UDP透传程序 本脚本用于在 设备 A 和 设备 B 之间建立 UDP 数据转发桥梁&#xff0c;适用于 A 和 B 设备无法直接通信的情况。 流程&#xff1a; A --> 电脑 (中继) --> B B --> 电脑 (中继) --> A 需要修改参数&#xff1a; B_IP “192.168.1.123” # 设备 B 的…...

深度学习pytorch之简单方法自定义9种卷积即插即用

本文详细解析了 PyTorch 中 torch.nn.Conv2d 的核心参数&#xff0c;通过代码示例演示了如何利用这一基础函数实现多种卷积操作。涵盖的卷积类型包括&#xff1a;标准卷积、逐点卷积&#xff08;1x1 卷积&#xff09;、非对称卷积&#xff08;长宽不等的卷积核&#xff09;、空…...

TMS320F28P550SJ9学习笔记2:Sysconfig 配置与点亮LED

今日学习使用Sysconfig 对引脚进行配置&#xff0c;并点亮开发板上的LED4 与LED5 我的单片机开发板平台是 LAUNCHXL_F28P55x 我是在上文描述的驱动库C2000ware官方例程example的工程基础之上进行添加功能的 该例程路径如下&#xff1a;D:\C2000Ware_5_04_00_00\driverlib\f28p…...

zRAM内存压缩技术:原理与实践初探

zRAM内存压缩技术&#xff1a;原理与实践指南 1. 技术背景与原理 zRAM是Linux内核中的一项内存压缩技术&#xff0c;于2014年进入Linux 3.14内核主线。它的核心思想是利用CPU压缩算法压缩内存数据&#xff0c;在不增加物理内存的情况下扩展系统有效内存容量。 当系统内存紧张…...

Hive 3.1 在 metastore 运行的 remote threads

Remote threads 是仅当 Hive metastore 作为单独的服务运行是启动&#xff0c;请求需要开启 compactor。 有以下几种&#xff1a; 1. AcidOpenTxnsCounterService 统计当前 open 的事务数 从表 TXNS 中统计状态为 open 的事务。此事务数量可以再 hive metrics 中。 2. Acid…...

大语言模型揭秘:从诞生到智能

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;无疑是技术领域最耀眼的明星之一。它们不仅能够理解人类的自然语言&#xff0c;还能生成流畅的文本&#xff0c;甚至在对话、翻译、创作等任务中表现出接近人类的智能…...

基于模糊PID控制的供热控制系统设计Simulink仿真

1.模型简介 本仿真模型基于MATLAB/Simulink&#xff08;版本MATLAB 2017Ra&#xff09;软件。建议采用matlab2017 Ra及以上版本打开。&#xff08;若需要其他版本可联系店主代为转换&#xff09; 换热站干扰因素多导致传统PID控制无法满足控制要求的问题&#xff0c;提出利用…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

LangFlow技术架构分析

&#x1f527; LangFlow 的可视化技术栈 前端节点编辑器 底层框架&#xff1a;基于 &#xff08;一个现代化的 React 节点绘图库&#xff09; 功能&#xff1a; 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...