Skip to main content

基础使用

poetimage-20220828125457014

官方首页

使用流程

  • 安装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

  • 如何源正确,基本能看到以下提示信息

image-20220901150428364

  • 接下来根据提示将安装好的poetry添加到系统环境变量

image-20220901150517575

# 测试
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

image-20220901144352246

如图所示,出现(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.tomlpoetry.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)

自定义配置

  1. 创建一个scripts文件夹用来存放相关脚本的文件夹
DIR:{项目目录}
| |-- Scripts/
| | `-- test.py # 脚本中有个函数叫做 main()
| `-- main.py
  1. 配置文件:{项目目录}/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

参阅文献

下面的文章都没有具体指明怎么自定义文件夹,只是思路都是对的

项目配置

文件路径:{项目目录}/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<是一个错误的版本标识,