Python 依赖管理和打包工具 poetry

Poetry 是 Python 中进行依赖管理和打包的工具,使用 poetry 可以帮助你管理项目的依赖。poetry 提供了一个 lockfile 确保了项目可以重复安装,并且可以打包发布

安装

Poetry 支持 Python3.8 及以上的版本。具体安装方法如下:

复制代码
pipx install poetry

只需一条命令即可,当然还有其他的安装方法,具体可以查看poetry文档

但需要注意的一点是,poetry 需要安装在一个独立的虚拟环境中,不要与系统中使用的其他虚拟环境混淆。这是为了防止 poetry 的依赖被意外的升级或者卸载。而上面的 pipx 就是用来帮助将 python 的应用安装在一个独立的虚拟环境当中的

命令补全

poetry 支持 Bash,Fish和Zsh 的补全脚本,如果要使用 poetry 的自动补全,可以执行如下命令:

bash 复制代码
poetry completions bash >> ~/.bash_completion

该命令是支持在 bash 下的自动补全,其他的可以参考 poetry文档

poetry 使用

安装好 poetry 之后,就可以使用了,下面是一些基本的使用案例

创建项目

可以使用 poetry 创建一个项目,具体命令如下:

arduino 复制代码
poetry new poetry-demo

创建后的项目有一个 pyproject.toml,在这个文件里面可以指定 python 的版本,如下:

ini 复制代码
[tool.poetry.dependencies]
python = "^3.7.0"

上面表示支持 python3.7.0 及以上的版本。因为 poetry 不会自动帮你安装一个 python 解释器,所以需要你手动指定一个

已有项目使用 poetry

上面是通过 poetry 创建的一个新项目,如果是一个已有的项目,那么也可以使用 poetry 进行管理。具体的命令如下:

bash 复制代码
cd pre-existing-project
poetry init

这是用一种交互的方式去生成对应的依赖文件,完成之后就可以使用 poetry 管理依赖了

poetry 的两种模式

poetry 有两种模式,package mode 和 non-package model;如果你想打包你的项目并且想发布到 PyPI 这样的库当中,可以使用 package mode;在这种模式下,name 和 version 是必须要指定的

如果你只想使用 poetry 进行版本管理,那么就可以在 non-package model 下,这种模式下,name 和 version 不是必须的

默认模式是 package model,可以在 pyproject.toml 中添加以下配置进行更改:

ini 复制代码
[tool.poetry]
package-mode = false

指定依赖

如果你想指定依赖,可以在 pyproject.toml 中的 tool.poetry.dependencies 中指定。具体如下:

ini 复制代码
[tool.poetry.dependencies]
pendulum = "^2.1"

poetry 会使用这个信息到 tool.poetry.source 指定的仓库搜索,如果没有指定就会使用默认的 PyPi;除此之外也可以使用命令添加依赖,具体如下:

csharp 复制代码
poetry add pendulum

这条命令会自动找到合适的版本进行安装,并且会安装子依赖;因为默认拉取依赖是在 Pypi 仓库中,国内很容易拉取失败,所以可以 poetry 的 pip 镜像源。在 pyproject.toml 中指定,如下内容:

ini 复制代码
[[tool.poetry.source]]
name = "tsinghua"
url = "https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/"
priority = "primary"

这样就能够保证正常拉取了,拉取之后就会生成一个 poetry.lock 的文件,这个文件就是进行版本锁定,保证其他地方重新安装时也是一样的版本

使用虚拟环境

poetry 支持两种形式的虚拟环境,如果当前项目在一个虚拟环境当中,那么就会直接使用这个虚拟环境。

如果当前项目没有虚拟环境,那么在执行poetry add xxx或者执行 poetry install的时候都会创建一个虚拟环境。该虚拟环境默认在~/.cache/pypoetry/virtualenvs(如果是Linux)目录下面。虚拟环境名称是项目名称和一个随机数

之后使用 poetry 添加的依赖都会在这个虚拟环境当中。但是使用 pip install xxx不会将新增的依赖添加到这个虚拟环境当中。要想使用 pip 安装,则需要先激活这个虚拟环境,具体命令如下:

复制代码
poetry shell

这样就会激活这个虚拟环境

使用 poetry 管理虚拟环境

poetry 是在指定的 python 版本下安装的,所以默认情况下使用 poetry 创建的虚拟环境就是安装 poetry 时的 python 版本。

有时候,可能需要使用不同的 python 版本,那么此时就需要进行一些配置;如果你使用 pyenv 进行 python 的版本管理,可以设置环境变量virtualenvs.prefer-active-python=true,此时 poetry 就会查找当前 shell 的python 版本

例如:可以在某个项目中指定一个 python版本,如下:

bash 复制代码
pyenv install 3.9.8
pyenv local 3.9.8  # Activate Python 3.9 for the current project
poetry install

这样 poetry 就会在这个版本下创建虚拟环境了,具体可以参考 poetry环境管理

poetry 切换环境

如果在一些环境下面 pyenv 不可用,那么此时就可能需要指定当前的 python 版本了,具体命令如下:

bash 复制代码
poetry env use /full/path/to/python
相关推荐
B站_计算机毕业设计之家40 分钟前
豆瓣电影数据采集分析推荐系统 | Python Vue Flask框架 LSTM Echarts多技术融合开发 毕业设计源码 计算机
vue.js·python·机器学习·flask·echarts·lstm·推荐算法
渣渣苏1 小时前
Langchain实战快速入门
人工智能·python·langchain
lili-felicity1 小时前
CANN模型量化详解:从FP32到INT8的精度与性能平衡
人工智能·python
数据知道1 小时前
PostgreSQL实战:详解如何用Python优雅地从PG中存取处理JSON
python·postgresql·json
ZH15455891311 小时前
Flutter for OpenHarmony Python学习助手实战:面向对象编程实战的实现
python·学习·flutter
玄同7651 小时前
SQLite + LLM:大模型应用落地的轻量级数据存储方案
jvm·数据库·人工智能·python·语言模型·sqlite·知识图谱
User_芊芊君子1 小时前
CANN010:PyASC Python编程接口—简化AI算子开发的Python框架
开发语言·人工智能·python
白日做梦Q1 小时前
Anchor-free检测器全解析:CenterNet vs FCOS
python·深度学习·神经网络·目标检测·机器学习
喵手2 小时前
Python爬虫实战:公共自行车站点智能采集系统 - 从零构建生产级爬虫的完整实战(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集公共自行车站点·公共自行车站点智能采集系统·采集公共自行车站点导出csv
喵手2 小时前
Python爬虫实战:地图 POI + 行政区反查实战 - 商圈热力数据准备完整方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·地区poi·行政区反查·商圈热力数据采集