基础使用
poet
使用流程
安装poetry
全局配置
config.toml
文件:start $ENV:AppData\pypoetry\
- 修改指定缓存目录(依赖安装,依赖下载等)
- 是否开启本地虚拟环境(创建
.env
目录,隔离环境)
创建/初始化项目
添加依赖
安装依赖
通过run指令运行项目
安装
自动安装
这种安装方式比较省事,是官方推荐的安装方法(python已添加到环境变量)
- widnow
(Invoke-WebRequest -Uri https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py -UseBasicParsing).Content | python
- linux
curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python3
下载完成后,用户文件夹内会新增两个poetry的执行文件
# {user_name}/.poetry
|-- bin/ # 「bin」
| |-- poetry.bat #
| `-- poetry #
|-- lib/ # 「lib」
windows - pipx
手动安装(windows)(已被废弃)
这个安装方法是笔者结合自身环境研究的,系统环境中没有python或者系统中有多个python,想安装到指定某个版本的python中
setp1
下载官方的安装脚本,保存为pypoetry-install.py
,
下载地址:https://install.python-poetry.org/
直接右键安装即可
python ./pypoetry-install-script.py
setp2
如果这里下载太慢或者保存,可以尝试通过更换配置pip.ini文件来更换安装源,当前使用阿里或者百度的成功安装
.\python.exe ..\pypoetry-install.py
setp3
- 如何源正确,基本能看到以下提示信息
- 接下来根据提示将安装好的poetry添加到系统环境变量
# 测试
poetry --version
通过pip(仅支持linux)
- window
# setp1: 指定一个虚拟环境存放目录
python3 -m venv $VENV_PATH
.\python.exe -m venv w:\cps\python\poetry\venv_path
# 进入刚刚新建的虚拟环境
# 注意这里用的是 .ps1,如果使用cmd作为终端,可以用activate.bat
W:\cps\python\poetry\venv_path\Scripts\Activate.ps1
.\python.exe -m pip install -U pip setuptools
如图所示,出现(venv_path)
既说明进入虚拟环境成功,后面接着更新pip和安装poetry
.\python.exe -m pip install poetry
当要卸载 Poetry时,只需删除整个
$VENV_PATH
目录
更新
poetry self update
poetry self update --preview
poetry self update 1.8.0
创建项目
- 新建
# 在当前文件夹中创建项目,同时创建src文件夹
poetry new . --src
- 已存在的项目加入peotry
poeyry init <project_name>
poetry init --python "D:\CPS\python\Python378\python.exe"
切换python版本
# 首先确保pyproject.toml中python字段的配置比要设置的版本低或者相同
[tool.poetry.dependencies]
python = "^3.7"
# 在项目环境中打开shell,设置env为指定的python
poetry env use D:\CPS\python\Python378\python.exe
poetry env use D:\CPS\python\Python3810\python.exe
poetry env use D:\CPS\python\Python_3.10.2_x64_green\python.exe
常用指令
语法:poetry <command>
- 常用示例:
poetry env info # 查看当前虚拟环境情况
poetry env list # 列出当前所有虚拟环境
poetry env list --full-path # 显示虚拟环境绝对路径
poetry env remove # 删除指定的虚拟环境
poetry env remove python3 # 执行删除虚拟环境时,需要指定对应的解析器版本
- 总结
名称 | 功能 |
---|---|
new | 创建一个项目脚手架,包含基本结构、pyproject.toml 文件 |
init | 基于已有的项目代码创建 pyproject.toml 文件,支持交互式填写 |
install | 安装依赖库 |
update | 更新依赖库 |
add | 添加依赖库 |
remove | 移除依赖库 |
show | 查看具体依赖库信息,支持显示树形依赖链 |
build | 构建 tar.gz 或 wheel 包 |
publish | 发布到 PyPI |
run | 运行脚本和代码 |
env | 虚拟环境管理,对虚拟环境进行各种操作 |
注意:
install
指令会读取pyproject.toml
或poetry.lock
,并安装里面列出的依赖,对poetry.lock
的处理方式是这样的:如果有这个文件,就安装里面指定的版本的包,如果没有,那就从pyproject.toml
中计算依赖,并安装满足条件的最新版本的包。额外的,如果不想安装开发版本依赖,需要加上--no-dev
参数
虚拟环境
常用指令
# 列出所有配置
poetry config --list
poetry config cache-dir d:\python\cache-dir
# 列出某个配置
poetry config virtualenvs.path
# 全局配置
poetry config virtualenvs.create false
# 项目配置
poetry config virtualenvs.create false --local
# 某个字段恢复默认配置
poetry config virtualenvs.path --unset
# 更新pip
poetry run python -m pip install --upgrade pip
# 安装requirements到虚拟环境
poetry run python -m pip install -r ./requirements.txt
自定义指令(poetry run)
自定义配置
- 创建一个scripts文件夹用来存放相关脚本的文件夹
DIR:{项目目录}
| |-- Scripts/
| | `-- test.py # 脚本中有个函数叫做 main()
| `-- main.py
- 配置文件:
{项目目录}/pyproject.toml
# [tool.poetry].packages 字段添加该文件夹
# 这样poetry才会自动加载这个文件夹作为脚本文件夹使用
[tool.poetry]
packages = [{include = "scripts/*.py"}]
# 配置命令执行的alias
[tool.poetry.scripts]
test = 'scripts.test:main' # 这样使用 poetry run test 就是相当于 poetry run python -m ./scripts/test.py:main
参阅文献
下面的文章都没有具体指明怎么自定义文件夹,只是思路都是对的
- 官方字段配置
- https://stackoverflow.com/questions/63809553/how-to-run-fastapi-application-from-poetry
- fastapi - 如何从 Poetry 运行 FastAPI 应用程序?
项目配置
文件路径:{项目目录}/pyproject.toml
[tool.poetry]
name = "my-package"
version = "0.1.0"
description = "The description of the package"
license = "MIT"
authors = [
"Sébastien Eustace <sebastien@eustace.io>"
]
readme = "README.md"
repository = "https://github.com/python-poetry/poetry"
homepage = "https://python-poetry.org"
keywords = ["packaging", "poetry"]
# 生产依赖
[tool.poetry.dependencies]
python = "^3.8" # Compatible python versions must be declared here
aiohttp = "^3.8.1"
# Dependencies with extras
requests = { version = "^2.28", extras = [ "security" ] }
# Python specific dependencies with prereleases allowed
tomli = { version = "^2.0.1", python = "<3.11", allow-prereleases = true }
# Git dependencies
cleo = { git = "https://github.com/python-poetry/cleo.git", branch = "master" }
# Optional dependencies (extras)
pendulum = { version = "^2.1.2", optional = true }
# 开发依赖
[tool.poetry.dev-dependencies]
pytest = "^7.1.2"
pytest-cov = "^3.0"
# 在安装或者更新依赖后执行的命令
[tool.poetry.scripts]
my-script = "my_package:main"
[[tool.poetry.source]]
name = "tsinghua" # 源名称
url = "https://pypi.tuna.tsinghua.edu.cn/simple/" # 源地址
环境变量
变量名称 | 说明 |
---|---|
POETRY_CONFIG_DIR | 配置文件config.toml的存放目录 |
POETRY_DATA_DIR | 所有数据文件的存放目录 |
POETRY_CACHE_DIR | 所有缓存的目录 |
poetry 支持通过环境变量的形式配置config.toml
# 所有变量名采用 POETRY_ 开头
# 其余所有字段均用大写
export POETRY_VIRTUALENVS_PATH=/path/to/virtualenvs/directory
export POETRY_HTTP_BASIC_MY_REPOSITORY_PASSWORD=secret
包管理
add
指令安装
poetry add package_name -vvv
WHL文件本地安装
有一些依赖或者包无法通过poetry安装,可以使用本地whl的方式:
# setp1: 在项目根目录新建一个whl文件夹,用来存放所有whl文件
mkdir whl
# setp2: 通过add指令,安装whl
poetry add ./whl/xxx.whl
# sept3: 检查pyproject.toml 中该包是否被成功的添加
[tool.poetry.dependencies]
GDAL={ path = "whl/GDAL-3.4.3-cp310-cp310-win_amd64.whl"}
fiona={ path = "whl/Fiona-1.8.21-cp310-cp310-win_amd64.whl"}
使用requirements.txt
- 生成
poetry run pip freeze > requirements.txt
- 安装
poetry run pip install -r requirements.txt
【坑】
Could not parse version constraint:xxxx
通过 poetry add
添加某些包的时候,如果该包内部定义的版本号规则存在问题,就会抛出此错误
发生场景:
- 安装mikeio的时候,提示:
Could not parse version constraint:>=3.5<
这个constraint
指的就是>=3.5<
,很明显,这个>=3.5<
是一个错误的版本标识,