Poetry-基本使用

Poetry 官方文档

简介

Poetry 可用于管理和安装 python dependencies, 其将 setup.py, requirements.txt, setup.cfg, MANIFEST.inPipfile 这些 pip 包管理时用到的文件以 pyproject.toml 文件替代.

安装

Archlinux 上安装为:

1
sudo pacman -S python-poetry

基本使用

查看可用子命令

1
poetry list

查看系统环境 debug 信息

1
poetry debug info

配置 poetry 环境

可以用:

1
poetry config --list

查看 poetry 的设置.

输出如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
cache-dir = "/home/jie/.cache/pypoetry"
experimental.system-git-client = false
installer.max-workers = null
installer.modern-installation = true
installer.no-binary = null
installer.parallel = true
keyring.enabled = true
solver.lazy-wheel = true
virtualenvs.create = true
virtualenvs.in-project = null
virtualenvs.options.always-copy = false
virtualenvs.options.no-pip = false
virtualenvs.options.no-setuptools = false
virtualenvs.options.system-site-packages = false
virtualenvs.path = "{cache-dir}/virtualenvs" # /home/jie/.cache/pypoetry/virtualenvs
virtualenvs.prefer-active-python = false
virtualenvs.prompt = "{project_name}-py{python_version}"
warnings.export = true

这些都是键值对, 可以直接设置如:

1
poetry config warning.export false

初始化 poetry 项目

1
poetry init

之后会交互询问一些项目基本信息.

添加依赖

Poetry 本身不能像 go mod tidy 一样从项目文件中读取所需的依赖, 需要手动添加:

1
poetry add fastapi

其将:

1
fastapi = "^0.112.2"

添加到:

1
2
[tool.poetry.dependencies]
python = "^3.12"

之后. 同时会创建一个虚拟环境并安装 fastapi.

1
2
3
4
5
6
7
8
9
10
Creating virtualenv test-AYqKul44-py3.12 in /home/jie/.cache/pypoetry/virtualenvs

Updating dependencies
Resolving dependencies... (11.3s)

Package operations: 13 installs, 0 updates, 0 removals

- Installing numpy (2.1.0)
....
....

安装 dependencies

1
poetry install

运行脚本

因为 poetry 会构建一个 virtual environment, 因此需要用 poetry run 来运行虚拟环境中的命令:

1
poetry run python main.py

又如:

1
poetry run uvicorn main:app --port 8088 --reload

查看虚拟环境中的包信息

1
poetry show

输出如:

1
2
3
4
5
6
7
8
9
annotated-types   0.7.0   Reusable constraint types to use with typing.Annotated
anyio 4.4.0 High level compatibility layer for multiple asynchronous event loop implement...
fastapi 0.112.2 FastAPI framework, high performance, easy to learn, fast to code, ready for p...
idna 3.8 Internationalized Domain Names in Applications (IDNA)
pydantic 2.8.2 Data validation using Python type hints
pydantic-core 2.20.1 Core functionality for Pydantic validation and serialization
sniffio 1.3.1 Sniff out which async library your code is running under
starlette 0.38.4 The little ASGI library that shines.
typing-extensions 4.12.2 Backported and Experimental Type Hints for Python 3.8+

查看虚拟环境的包安装在哪个目录下

1
poetry env info --path

查找包

如:

1
poetry search fastapi

会在远程仓库中查找 fastapi 这个包的信息.

搭配 pipreqs

pipreqs 是一个能够利用项目代码生成 requirements.txt 文件 的工具:

1
pipreqs ./

之后:

1
poetry add $(cat requirements.txt)

搭配 Nvim

需要先 poetry shell 之后, Nvim 的 LSP 才能正确解析到依赖.


Poetry-基本使用
http://example.com/2024/08/21/Poetry-基本使用/
作者
Jie
发布于
2024年8月21日
许可协议