Python 版本管理 —— Poetry

主要针对虚拟环境下的 python 包管理工具

poetry 与常见框架对比

  • conda: Python 版本管理,创建不同虚拟环境,管理不同 python 与 包 版本均

  • Pyenv:Python 版本管理,注意这里主要是对于不同 python 版本需求

    # 安装
    curl https://pyenv.run | bash
    
    # 添加系统路径并初始化 Pyenv
    export PATH="$HOME/.pyenv/bin:$PATH"
    eval "$(pyenv init -)"
    eval "$(pyenv virtualenv-init -)"
    
    # 安装不同版本
    pyenv install 3.8.0
    
    # 全局启用
    pyenv global 3.8.0
  • pip: Python 自带的包管理

  • venv: Python 自带的虚拟环境管理

    python -m venv venv

小结:

  1. conda: “重量级"环境管理,可以管理虚拟环境,其虚拟环境下可以独立使用不同版本 py 与不同包,互不干扰
  2. pip+venv: 官网自带轻量化,但 pip 不检测依赖,容易出现"孤儿包”(删除下游包后上有依赖无法自动删除)
  3. Pyenv: 管理不同的 python 版本

archlinux 中直接通过 pacman 即可安装

# arch
sudo pacman -S python-poetry

官网安装方式

# 查看版本
poetry -V

# 创建新的基于poetry 的 py 项目,类似 vue-cli 创建新工程
poetry new <proj-name>

# 已有工程上初始化
poetry init

# 依赖稳定后生成lock文件
poetry lock

# 解析并安装 pyproject.toml 的依赖包
poetry install

# 添加包
poetry add <packag name>

# 删除包
poetry remove <packag name>

# 列出当前虚拟环境中的包
poetry show

# 树形结构查看项目安装的依赖
poetry show -t
# 查看虚拟环境信息
poetry env info

# 显示虚拟环境列表
poetry env list

# 显示虚拟环境绝对路径
poetry env list --full-path

# 创建虚拟环境
poetry env use python3.X.X

# 删除虚拟环境
poetry env remove python3.X.X

# 查看python版本
poetry run python -V

# 启动环境
poetry shell

这里创建虚拟环境是需要本地有对应 python 解释器的且在环境变量中找到的

poetry source add tsinghua https://pypi.tuna.tsinghua.edu.cn/simple

也可以直接修改 pyproject.toml

[[tool.poetry.source]]
name = "tsinghua"
url = "https://pypi.tuna.tsinghua.edu.cn/simple"

poetry 默认将虚拟环境统一存放

Windows:C:\Users\<username>\AppData\Local\pypoetry\Cache\virtualenvs\
Linux:.local\pypoetry\cache\virtualenvs\

通过如下设置使 poetry 将虚拟环境放在项目 .venv

# 设置项目内 venv
poetry config virtualenvs.in-project true

# 查看配置
poetry config --list

ref