从零到一:快速上手 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控制无法满足控制要求的问题,提出利用…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...

跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...

人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...

(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...
深入理解Optional:处理空指针异常
1. 使用Optional处理可能为空的集合 在Java开发中,集合判空是一个常见但容易出错的场景。传统方式虽然可行,但存在一些潜在问题: // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...