
poetry是一个Python依赖管理和打包工具。主要用途包括:

poetry官网
官网:https://python-poetry.org/
当然你可能要问:不是已经有conda和pip了吗,为什么还要再搞个poetry出来?
如果你进poetry的官网查看介绍,你会发现poetry像是一个加强版的pip和venv。 poetry不是conda这样的大而全的虚拟环境管理,不能像conda那样安装不同版的Python(甚至其它语言的程序)。
poetry专注于解决项目的依赖问题,确保他人能轻松复现你的Python项目(而不掉进依赖地狱)。
另外stackoverflow上有一个讨论:能否将conda和poetry结合起来,conda负责创建不同版本的python(及其它依赖,如cuda),poetry只负责管理python包。https://stackoverflow.com/questions/70851048/does-it-make-sense-to-use-conda-poetry https://medium.com/@silvinohenriqueteixeiramalta/conda-and-poetry-a-harmonious-fusion-8116895b6380
推荐使用pipx安装: pipx install poetry
也可以使用poetry提供的安装器安装:https://python-poetry.org/docs/#installing-with-the-official-installer
基本使用
常用命令:
poetry new <project_name>:创建新项目
poetry init:初始化现有项目
poetry add <package>:添加和安装包
poetry install:安装pyproject.toml中的依赖
poetry shell:激活虚拟环境
exit:退出虚拟环境和新shell
deactivate:退出虚拟环境且不离开shell
如果你正在开始一个新的项目,可以用poetry new <project_name>创建项目:
poetry new poetry-demopoetry会生成一些文件。
重点:pyproject.toml定义了项目及其依赖项。
[tool.poetry]
name = "poetry-demo"
version = "0.1.0"
description = ""
authors = ["xx <xx@163.com>"]
readme = "README.md"
[tool.poetry.dependencies]
python = "^3.10"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"可以看到pyproject.toml分为几个部分:
[tool.poetry]:项目的名称、版本、描述、作者等信息[tool.poetry.dependencies]:项目的Pyhton版本、依赖[build-system]:先不管通过poetry init初始化已有项目。运行命令后,poetry会用交互方式让你填写项目信息,然后生成pyproject.toml。
cd pre-existing-project
poetry init
...如果你使用其他工具(如
conda)管理虚拟环境,则不需要使用poetry shell,因为您可能已经激活了该虚拟环境并提供了正确的 python 实例。
推荐使用下面的命令,设置虚拟环境目录为当前项目所在位置:
poetry config virtualenvs.in-project true
使用 poetry shell可以创建一个(激活了虚拟环境的)嵌套的shell。
exit。deactivatepyproject.toml中可以手动设置依赖项[tool.poetry.dependencies]
pendulum = "^2.1"
pendulum = "^2.1"表示pendulum包的版本>=2.1.0 <3.0.0
poetry add 命令添加依赖项它会自动找到合适的版本并安装包和子依赖项。 poetry add pendulum
有时候找不到合适的版本,可以指定版本。比如在python3.8的条件下安装numpy会安装失败,提示numpy最低支持的python版本是3.9。通过
poetry add numpy==1.24.1指定numpy版本可以安装成功。
(当别人拿到你的项目后,就可以轻松安装依赖了)
在pyproject.toml所在目录下,执行poetry install会安装pyproject.homl中的依赖项。
poetry最大的亮点是解决了Python包依赖问题。此外还提供了虚拟环境和打包、发布等功能。限于篇幅原因,本文没有介绍poetry的打包和发布功能。