青蛙小白
目录

Poetry

Poetry是一个用于Python的依赖管理打包工具。可以声明项目所依赖的库,管理(安装/更新)这些库。Poetry提供了一个poetry.lock以确保依赖被可重复的安装,使用Poetry还可以构建的项目以进行分发。

安装Poetry

使用pipx安装poetry

# 私有仓库开启认证的,还需要配置认证,待验证
pipx install poetry -vvv --index-url=https://your-private-domain/repository/pypi-public/simple  

pipx install poetry -vvv --index-url=https://mirrors.aliyun.com/pypi/simple
...
... /usr/bin/python3.11 -m venv --without-pip /home/<theuser>/.local/share/pipx/venvs/poetry..
...

pipx安装的东西也是会与~/.local下,并且有独立的虚拟环境:

ls -l ~/.local/bin
lrwxrwxrwx poetry -> /home/<theuser>/.local/share/pipx/venvs/poetry/bin/poetry

升级poetry:

pipx upgrade poetry -vvv --index-url=https://mirrors.aliyun.com/pypi/simple 

poetry使用tips

使用poetry install时,关键的环境变量export POETRY_REQUESTS_TIMEOUT=180

使用Poetry创建项目

创建项目

创建项目:

poetry new --src foo
Created package foo in foo

查看项目目录结构:

tree foo
foo
├── pyproject.toml
├── README.md
├── src
│   └── foo
│       └── __init__.py
└── tests
    └── __init__.py

进入项目目录:

cd foo

创建虚拟环境

默认情况下,poetry 会在全局虚拟环境目录(例如$HOME/.cache/pypoetry/virtualenvs)中为项目创建和管理虚拟环境。 一般来说都希望将虚拟环境放在项目目录中,可以通过poetry.toml配置文件中的[virtualenvs]部分中 in-project = true 来实现。 通过下面的命令完成这个配置,如果poetry.toml文件不存在会创建此文件。

更多poetry.toml的配置可参考这里
poetry config virtualenvs.in-project true --local
cat poetry.toml
[virtualenvs]
in-project = true

这样做的好处是:

  • 便于管理和清理:虚拟环境与项目目录绑定,更容易管理和清理项目及其依赖。
  • 项目隔离:确保每个项目使用独立的虚拟环境,避免不同项目之间的依赖冲突。
  • 便于版本控制:可以选择将.venv文件夹添加到.gitignore中,以避免将虚拟环境文件提交到版本控制系统。

选择期望使用的python版本创建虚拟环境:

poetry env use /usr/bin/python3.11

会在项目的.venv目录中创建好虚拟环境。

pypi源配置

poetry source add --priority=primary local https://mirrors.aliyun.com/pypi/simple/
# poetry source add --priority=primary local https://pypi.example.com/repository/pypi-public/simple

如果指定的pypi是私有仓库,并且开启了认证,可以使用下面的方法为私有pypi指定用户名和密码:

poetry config http-basic.local <username>

用户密码会被明文存储在~/.config/pypoetry/auth.toml中。

或者使用环境变量指定用户名和密码:

export POETRY_HTTP_BASIC_LOCAL_USERNAME=<username>
export POETRY_HTTP_BASIC_LOCAL_PASSWORD=<password>

另外还可以通过设置~/.netrc文件,设置这个文件同时对poetry和pip有效。

vi ~/.netrc
machine pypi.example.com
login theuser
password changeme

chown $USER ~/.netrc
chmod 0600 ~/.netrc

顺便配置一下pip默认使用私有仓库

也可同时配置一下pip默认使用私有仓库(注意这个配置的是pip的默认源,而不是poetry的,因为平时也会经常使用pip安装东西),具体可参考https://pip.pypa.io/en/stable/topics/configuration/。 在Unix系统可在以下位置配置pip.conf文件:

  • Global /etc/pip.conf
  • User $HOME/.config/pip/pip.conf
  • Site $VIRTUAL_ENV/pip.conf
[global]
timeout = 120
index-url = https://pypi.example.com/repository/pypi-public/simple
trusted-host = 
  pypi.example.com

添加依赖

项目创建好了,可以为项目添加依赖了。

poetry add jinja2 -vvv

执行后会在pyproject.toml中的[tool.poetry.dependencies]下添加依赖,同时会生成poetry.lock

初始化项目,安装依赖

poetry install

查看项目的依赖树

poetry show --tree
poetry show --tree > a.txt
评论