Poetry的安装及使用

2020-09-29

Python的包管理一直算是个痛点,作为Python基金会官方钦定的Pipenv并不是太给力,反倒中途杀出的Poetry,让人眼前一亮。 今天我们就快速入门一下Poetry。

安装&配置

通过命令行,直接安装:

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

安装之后,推荐设置成在项目目录下生成virtualenv文件夹,管理起来更直观:

  1. poetry config virtualenvs.in-project true

使用

项目初始化

Poetry有两种初始化项目的方式,initnew

对于新项目,建议使用new来初始化:

  1. poetry new <project_name>

会自动生成项目的框架结构:

  1. ├── README.rst
  2. ├── demo_project
  3. └── __init__.py
  4. ├── pyproject.toml
  5. └── tests
  6. ├── __init__.py
  7. └── test_demo_project.py

对于旧的项目,可以使用:

  1. poetry init

会逐步引导初始化poetry项目。

文件说明

不论是用哪种方式初始化,最终都会在项目里创建两个主要文件:

  • pyproject.toml: 用于配置项目的基础信息和声明依赖。
  • poetry.lock: 添加第一个依赖之后会生成,并会随着每次对依赖包的修改(添加、更新、删除等)而发生改变,该文件用于精确锁定项目所使用的依赖的版本,以确保相同代码在运行时的环境一致。

依赖管理

  1. # 添加依赖
  2. poetry add <lib>
  3. # 添加dev依赖
  4. poetry add <lib> --dev
  5. # 删除依赖
  6. poetry remove <lib>
  7. # 更新依赖
  8. poetry update
  9. # 锁定依赖版本
  10. poetry lock
  11. # 列出全部依赖项
  12. poetry show
  13. # 列出陈旧的依赖项
  14. poetry show --outdated
  15. # 搜索指定的包
  16. poetry search <name>

运行环境管理

  1. # 运行单个文件
  2. poetry run python3 xxx.py
  3. # 进入到env环境中
  4. poetry shell
  5. # 退出环境
  6. deactivate
  7. # 指定python版本
  8. poetry env use /full/path/to/python
  9. poetry env use python3.7
  10. poetry env use 3.7
  11. poetry env use system
  12. # 显示环境
  13. poetry env info
  14. poetry env info --path
  15. # 列出环境
  16. poetry env list
  17. # 删除环境
  18. poetry env remove /full/path/to/path
  19. poetry env remove python3.7
  20. poetry env remove 3.7
  21. poetry env remove system

https://python-poetry.org/docs/managing-environments/#deleting-the-environments
image.png

poeery自身管理

  1. # 升级
  2. poetry self update
  3. # 检查配置
  4. poetry check
  5. # 导出成requirements.txt
  6. poetry export -f requirements.txt > requirements.txt
  7. # 查看配置
  8. poetry config --list
  9. # 修改配置
  10. poetry config <key> <value>
  11. # 清除指定来源(如pypi)的全部缓存
  12. poetry cache clear pypi --all

经验

  • 建议设置virtualenvs.in-project模式,方便使用,但是把.venv放到.gigignore中排除,避免不必要的仓库变动
  • poetry.lock是精确安装指定版本的依据,建议放入代码仓库中管理
  • 用好dev-dependencies,把开发时的一些依赖放进去,可降低生产环境安装的依赖包数量

参考链接