从零到一:快速上手 Poetry——Python 项目管理的利器
在 Python 项目开发中,包管理、依赖管理和虚拟环境的创建一直是开发者们经常面对的难题。传统上,开发者通常会使用 pip
、virtualenv
或者 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.toml
和 poetry.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
这会将 requests
从 pyproject.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 项目开发中,包管理、依赖管理和虚拟环境的创建一直是开发者们经常面对的难题。传统上,开发者通常会使用 pip、virtualenv 或者 conda 来处理这些问题。然而,随着 Python 项目复杂度的增加,传统工具往往显得力不从心&…...
【量化科普】Beta,贝塔系数
【量化科普】Beta,贝塔系数 🚀量化软件开通 🚀量化实战教程 在量化投资领域,Beta(贝塔系数)是一个衡量投资组合或股票相对于整个市场波动性的指标。它反映了资产收益与市场收益之间的相关性,…...

C++----异常
一、C 语言传统的错误处理方式 在 C 语言中,处理错误主要有两种传统方式,每种方式都有其特点和局限性。 1. 终止程序 原理:使用类似assert这样的断言机制,当程序运行到某个条件不满足时,直接终止程序的执行。示例代…...
合理规划时间,从容应对水利水电安全员考试
合理规划时间,从容应对水利水电安全员考试 在忙碌的工作与生活节奏中备考水利水电安全员考试,合理规划时间是实现高效备考的核心。科学的时间管理能让你充分利用每一分每一秒,稳步迈向考试成功。 制定详细的学习计划是第一步。依据考试时间…...
(解决) 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双击后,电脑风扇会运行一段时间后再停止(应该是在保存进程到硬盘&#…...
Spring Boot 接口 JSON 序列化优化:忽略 Null 值的九种解决方案详解
一、针对特定接口null的处理: 方法一:使用 JsonInclude 注解 1.1 类级别:在接口返回的 DTO 类或字段 上添加 JsonInclude 注解,强制忽略 null 值: 类级别:所有字段为 null 时不返回 JsonInclude(Js…...

计算机毕业设计Python+DeepSeek-R1大模型考研院校推荐系统 考研分数线预测 考研推荐系统 考研(源码+文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
一、Prometheus架构
Prometheus 云原生十二要素是一套最佳实践和规范,旨在帮助开发人员更好地构建云原生应用 这十二个要素分别是: 单一职责独立部署无状态声明式API服务发现容错处理自适应算法自动化运维响应式编程通信协议服务注册与发现数据持久化一、Prometheus 是什么 Prometheus 是一个…...

火山引擎 DeepSeek R1 API 使用小白教程
一、火山引擎 DeepSeek R1 API 申请 首先需要三个要素: 1)API Key 2)API 地址 3)模型ID 1、首先打开火山引擎的 DeepSeek R1 模型页面 地址:账号登录-火山引擎 2、在页面右下角,找到【推理】按钮&#…...
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 经纬网添加全解析:从布局到样式优化
在地理信息系统的广阔领域中,地图的精确性与直观性对于数据的呈现和分析起着至关重要的作用。 经纬网,作为地图上不可或缺的元素之一,能够为用户提供准确的地理坐标参考,帮助用户快速定位和理解地理空间数据的分布。 本文将深入…...

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

DDoS攻击的介绍和防治
一.DDoS攻击是什么 DDoS攻击:dos是服务器拒绝提供服务的意思,最前面的D是分布式的意思,所以说这个大概可以理解为分布式的机器攻击服务器,占用服务器资源,使得服务器拒绝提供服务的一种攻击手段,虽然原理简…...
UDP透传程序
UDP透传程序 本脚本用于在 设备 A 和 设备 B 之间建立 UDP 数据转发桥梁,适用于 A 和 B 设备无法直接通信的情况。 流程: A --> 电脑 (中继) --> B B --> 电脑 (中继) --> A 需要修改参数: B_IP “192.168.1.123” # 设备 B 的…...
深度学习pytorch之简单方法自定义9种卷积即插即用
本文详细解析了 PyTorch 中 torch.nn.Conv2d 的核心参数,通过代码示例演示了如何利用这一基础函数实现多种卷积操作。涵盖的卷积类型包括:标准卷积、逐点卷积(1x1 卷积)、非对称卷积(长宽不等的卷积核)、空…...

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

zRAM内存压缩技术:原理与实践初探
zRAM内存压缩技术:原理与实践指南 1. 技术背景与原理 zRAM是Linux内核中的一项内存压缩技术,于2014年进入Linux 3.14内核主线。它的核心思想是利用CPU压缩算法压缩内存数据,在不增加物理内存的情况下扩展系统有效内存容量。 当系统内存紧张…...
Hive 3.1 在 metastore 运行的 remote threads
Remote threads 是仅当 Hive metastore 作为单独的服务运行是启动,请求需要开启 compactor。 有以下几种: 1. AcidOpenTxnsCounterService 统计当前 open 的事务数 从表 TXNS 中统计状态为 open 的事务。此事务数量可以再 hive metrics 中。 2. Acid…...

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

基于模糊PID控制的供热控制系统设计Simulink仿真
1.模型简介 本仿真模型基于MATLAB/Simulink(版本MATLAB 2017Ra)软件。建议采用matlab2017 Ra及以上版本打开。(若需要其他版本可联系店主代为转换) 换热站干扰因素多导致传统PID控制无法满足控制要求的问题,提出利用…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...

【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...

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

抽象类和接口(全)
一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...

热门Chrome扩展程序存在明文传输风险,用户隐私安全受威胁
赛门铁克威胁猎手团队最新报告披露,数款拥有数百万活跃用户的Chrome扩展程序正在通过未加密的HTTP连接静默泄露用户敏感数据,严重威胁用户隐私安全。 知名扩展程序存在明文传输风险 尽管宣称提供安全浏览、数据分析或便捷界面等功能,但SEMR…...

数据结构:泰勒展开式:霍纳法则(Horner‘s Rule)
目录 🔍 若用递归计算每一项,会发生什么? Horners Rule(霍纳法则) 第一步:我们从最原始的泰勒公式出发 第二步:从形式上重新观察展开式 🌟 第三步:引出霍纳法则&…...

在Zenodo下载文件 用到googlecolab googledrive
方法:Figshare/Zenodo上的数据/文件下载不下来?尝试利用Google Colab :https://zhuanlan.zhihu.com/p/1898503078782674027 参考: 通过Colab&谷歌云下载Figshare数据,超级实用!!࿰…...