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 config virtualenvs.in-project true --localcat 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