跳至主要内容

[note] Python Poetry

參考資料

TL;DR

# 建立新的 Python 專案
$ poetry new poetry-demo # 初始化專案
$ poetry env use python # 建立並使用 virtual env
$ poetry add [package] # 安裝套件
$ poetry shell # 進入虛擬環境

CMD / CLI 基本使用

參考資料

Commands @ Python Poetry

Poetry 專案初始化

# 使用 Poetry 建立一個新的 Python 專案
$ poetry new poetry-demo

# 在既有的 Python 專案中使用 Poetry
$ poetry init

Poetry 虛擬環境

# 建立虛擬環境所使用的 Python 版本
$ poetry env use python

# 移除虛擬環境(適合用在 virtualenvs.in-project 為 false)
$ poetry env remove <env>
$ poetry env remove --all

# 啟動虛擬環境(如果沒有的話,會建立新的)
$ poetry shell

# 列出現在有的虛擬環境
$ poetry env list

# 原本的虛擬環境會被放在 Library/Caches/pypoetry/virtualenvs/[project-name]-[hash]-[py-version]
# 如果設成 true 則會被放在專案裡的 .venv 中
$ poetry config virtualenvs.in-project true
  • virtualenvs.in-projecttrue 時,如果想要移除虛擬環境,直接把 .venv 刪掉即可,不用使用 poetry env remove,接著再用 poetry shellpoetry env use python 建立新的虛擬環境。

Poetry 套件管理

# 安裝套件,也可以一次安裝多個套件
# -D, --dev
$ poetry add fastapi
$ poetry add fastapi beanie

# 如果自己手動更新 pyproject.toml,需要進一步更新 poetry.lock 檔
$ poetry lock

# 安裝套件至虛擬環境
$ poetry install

# 更新套件
$ poetry update # 更新所有可以更新的套件
$ poetry update <package> # 更新至最新的 compatible version
$ poetry add <package>@latest # 更新至最新的版本

# 檢查 poetry.lock 和 pyproject.toml 的內容是否一致
$ poetry check --lock

# 檢視所有已安裝的套件(來自 poetry.lock)
$ poetry show --tree
$ poetry show <package> --tree

# 移除套件
$ poetry remove <package>
  • 當使用 Poetry 安裝套件時,會更新 pyproject.toml,接著會更新 poetry.lock
  • 虛擬環境會看的是 poetry.lock
  • poetry lock 只會更新 poetry.lock 檔,並不會更新在虛擬環境中的套件,因此需要在用 poetry install 來更新虛擬環境中的套件
  • poetry.lock 的意義就類似 requirements.txt
# 檢視 Poetry 的設定
$ poetry config --list

# 更新 Poetry 版本
$ poetry self update

搭配 pyenv 使用

# https://blog.kyomind.tw/poetry-pyenv-practical-tips/
$ pyenv local 3.9.12
$ poetry env use 3.9.12
$ poetry env use python

Install poetry

$ curl -sSL https://install.python-poetry.org | python3 -

poetry 的 bin 會被安裝在 ~/.local/bin,所以要把這個路徑加到 PATH:

# .zshrc

# POETRY
export PATH="$HOME/.local/bin:$PATH"