Poetry #
Poetry是一个用于Python的依赖管理和打包工具。可以声明项目所依赖的库,管理(安装/更新)这些库。Poetry提供了一个poetry.lock
以确保依赖被可重复的安装,使用Poetry还可以构建的项目以进行分发。
安装Poetry #
- 参考“Python开发环境”中的相关内容
使用Poetry创建项目 #
创建项目 #
创建项目:
1poetry new --src foo
2Created package foo in foo
查看项目目录结构:
1tree foo
2foo
3├── pyproject.toml
4├── README.md
5├── src
6│ └── foo
7│ └── __init__.py
8└── tests
9 └── __init__.py
进入项目目录:
1cd foo
创建虚拟环境 #
默认情况下,poetry 会在全局虚拟环境目录(例如$HOME/.cache/pypoetry/virtualenvs
)中为项目创建和管理虚拟环境。
一般来说都希望将虚拟环境放在项目目录中,可以通过poetry.toml
配置文件中的[virtualenvs]
部分中 in-project = true
来实现。
通过下面的命令完成这个配置,如果poetry.toml
文件不存在会创建此文件。
更多poetry.toml的配置可参考这里。
1poetry config virtualenvs.in-project true --local
1cat poetry.toml
2[virtualenvs]
3in-project = true
这样做的好处是:
- 便于管理和清理:虚拟环境与项目目录绑定,更容易管理和清理项目及其依赖。
- 项目隔离:确保每个项目使用独立的虚拟环境,避免不同项目之间的依赖冲突。
- 便于版本控制:可以选择将
.venv
文件夹添加到.gitignore
中,以避免将虚拟环境文件提交到版本控制系统。
选择期望使用的python版本创建虚拟环境:
1poetry env use /usr/bin/python3.11
会在项目的.venv
目录中创建好虚拟环境。
pypi源配置 #
1poetry source add --priority=primary local https://mirrors.aliyun.com/pypi/simple/
2# poetry source add --priority=primary local https://pypi.example.com/repository/pypi-public/simple
如果指定的pypi是私有仓库,并且开启了认证,可以使用下面的方法为私有pypi指定用户名和密码:
1poetry config http-basic.local <username>
用户密码会被明文存储在~/.config/pypoetry/auth.toml
中。
或者使用环境变量指定用户名和密码:
1export POETRY_HTTP_BASIC_LOCAL_USERNAME=<username>
2export POETRY_HTTP_BASIC_LOCAL_PASSWORD=<password>
另外还可以通过设置~/.netrc
文件,设置这个文件同时对poetry和pip有效。
1vi ~/.netrc
2machine pypi.example.com
3login theuser
4password changeme
5
6chown $USER ~/.netrc
7chmod 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
1[global] 2timeout = 120 3index-url = https://pypi.example.com/repository/pypi-public/simple 4trusted-host = 5 pypi.example.com
添加依赖 #
项目创建好了,可以为项目添加依赖了。
1poetry add jinja2 -vvv
执行后会在pyproject.toml
中的[tool.poetry.dependencies]
下添加依赖,同时会生成poetry.lock
。
初始化项目,安装依赖 #
1poetry install
激活虚拟环境 #
1# Spawns a shell within the virtual environment.
2poetry shell