# Poetry常用命令

# 项目管理

poetry new poetry-demo                    # 创建项目
poetry init                               # 初始化已有项目 - 在已有项目根目录下执行
poetry config --list                      # 查看poetry配置
poetry config virtualenvs.in-project true # 修改poetry配置

# 虚拟环境

  • poetry env use python​建立虛擬環境所使用的 Python 版本,取決於python​指令在你的「PATH」是連結到哪個版本。

    • 你也可以將指令最後的python​,改為python3​或python3.8​,甚至只需要3.8​,只要它們確實存在於 PATH 中。
    • 更多資訊可參考官方文件 (opens new window)
  • 預設上,Poetry 會統一將虛擬環境建立在「特定目錄」裡,比如本例中存放的路徑是/Users/kyo/Library/Caches/pypoetry/virtualenvs​。

  • 虛擬環境的命名模式為​**專案名稱-亂數-Python版本**​

poetry run python main.py                # 在poetry虚拟环境执行python命令
poetry shell                             # 显式激活poetry虚拟环境
source {path_to_venv}/bin/activate       # 手动激活虚拟环境

poetry install                            # 安装依赖(根据lock文件或生成lock文件-poetry.lock)
poetry update [<package>]                 # 尝试更新依赖版本-尽可能高版
poetry lock                               # 根据toml文件更新lock文件

# 设置使用哪个虚拟环境的python
poetry env use /full/path/to/python
poetry env use python3.7

# 显示环境
poetry env info
poetry env list

# 获取环境路径
poetry env info --path

# 获取python可执行路径
poetry env info --executable

# 删除环境
poetry env remove /full/path/to/python
poetry env remove python3.7
poetry env remove 3.7
poetry env remove test-O3eWbxRl-py3.7

# 依赖管理

所有依赖需要跨组无冲突-而不是组内无冲突-核心理念是lock文件仅仅是poetry版本的requirements.txt

poetry show --outdated                   # 查看可以更新的依赖
poetry show                              # 查看项目安装的依赖
poetry show [<package>] --tree           # 已树形结构查看项目安装的依赖

poetry export -f requirements.txt -o requirements.txt --without-hashes    # 输出requirements

# 将black新增到dev分支
poetry add black --group dev
poetry add black@23.3.0 --group dev        # 指定版本可覆盖老版本
poetry add pytest --group test

# 安装所有组的依赖
poetry install

# 安装 main 组的依赖 (三种写法)
poetry install --with main
poetry install --only main
poetry install --only-root

# 选择安装哪些组 (--without优先级高于with)
poetry install --with test,docs --without docs

# 将分组内的依赖都删除
poetry remove mkdocs --group docs

# 同步poetry的依赖到虚拟环境-会去除lock文件中没有的依赖
poetry install --sync

# 选择性同步poetry的某一个组
poetry install --without dev --sync
poetry install --with docs --sync
poetry install --only dev

# 配置镜像源

poetry source add ali https://mirrors.aliyun.com/pypi/simple/ --default
poetry source add tencent https://mirrors.cloud.tencent.com/pypi/simple/
poetry source add  tsinghua  https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/

# Poetry安装

Poetry 和 pip、git、pyenv 等工具一樣,都是典型的命令列工具,需要先安裝才能下達指令——poetry​。

# 安裝方式選擇

Poetry 主要提供了兩種安裝方式 (opens new window)

  1. 全域安裝至使用者的家目錄。
  2. pip 安裝至專案使用的 Python(虛擬)環境,即pip install poetry​。

個人推薦使用全域安裝,官方文件也表示不推薦使用 pip 安裝 (opens new window)

因為 pip 安裝是直接安裝到「專案所屬的 Python 虛擬環境」裡,而 Poetry 所依賴的套件非常多,總計超過 30 個,會嚴重影響專案虛擬環境的整潔度。文件中也警告這些依賴套件可能和專案本身的套件發生衝突

Be aware that it will also install Poetry’s dependencies which might cause conflicts with other packages.

# 全域安裝 Poetry 至家目錄

# macOS / Linux / WSL(Windows Subsystem for Linux)

curl -sSL https://install.python-poetry.org | python3 -
curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python -

# Windows

(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | python -

Poetry 实际安装如下:

  • $HOME/.local/bin​​ for Unix

    export PATH="$HOME/.local/bin:$PATH"
    
  • %APPDATA%\Python\Scripts​​ on Windows

# 設定 PATH 環境變數

# 在 macOS 或 Linux 上設定 PATH

使用 macOS 或 Linux,設定 PATH 的步驟相對簡單,只要在.zshrc​或.bashrc​或.bash_profile​新增:

export PATH=$PATH:$HOME/.local/bin

# 在 Windows 上設定 PATH

$Env:Path += ";C:\Users\jetbrains\AppData\Roaming\Python\Scripts"; setx PATH "$Env:Path"