Quiet
  • 主页
  • 归档
  • 分类
  • 标签
  • 链接
  • 关于我

bajiu

  • 主页
  • 归档
  • 分类
  • 标签
  • 链接
  • 关于我
Quiet主题
  • python

为Python项目启用poetry和pyproject.toml

bajiu
青年大学习

2024-02-17 10:12:00

什么是 poetry

为什么要使用poetry?

因为想使用pyproject.toml,并通过pyproject.toml进行依赖包管理,目前 pip 还不支持,所以 poetry 是首选

1. Windows安装poetry

作为Python的一个第三方库。拥有统一、便捷的安装方式:

pip install poetry

但是这样的安装方式有一些弊端,因为poetry也依赖了很多的其他的包,这些依赖包会同时的一起安装进去。那么这么多的包,尤其不同版本的包,可能会捣乱我们的Python环境。所以我们需要一个方式来进对他进行隔离。

当然也可以在虚拟环境当中安装poetry,但是这样的话有一个弊端,就是可能需要为每一个虚拟环境分别安装poetry。

所以为了日后使用起来干净舒服,在这里我放弃了这种最便捷的安装方式,接下来给大家介绍我是如何进行安装的。

1.1 安装pipx

pipx会为安装的每一个包自动创建隔离环境,并自动设置环境变量,安装的包能够被执行,非常使用安装那些命令行程序,比如block、httpie、poetry。

首先在系统级python环境中安装pipx

pip install pipx

验证安装成功

λ pipx list
venvs are in C:\Users\summer\.local\pipx\venvs
apps are exposed on your $PATH at C:\Users\summer\.local\bin

1.2 安装 poetry

C:\Users\summer
λ pipx install poetry 
  installed package poetry 1.1.4, Python 3.9.0
  These apps are now globally available
    - poetry.exe
done!

安装成功后,使用pipx检查安装效果

C:\Users\summer
λ pipx list
venvs are in C:\Users\summer\.local\pipx\venvs
apps are exposed on your $PATH at C:\Users\summer\.local\bin
   package poetry 1.1.4, Python 3.9.0
    - poetry.exe
C:\Users\summer
λ poetry
Poetry version 1.1.4

USAGE
  poetry [-h] [-q] [-v [<...>]] [-V] [--ansi] [--no-ansi] [-n] <command> [<arg1>] ... [<argN>]

ARGUMENTS
  <command>              The command to execute
  <arg>                  The arguments of the command

GLOBAL OPTIONS
  -h (--help)            Display this help message
  .......

自此,poetry就已经安装好了。

我们是通过pipx安装的poetry,日后也可以通过pipx 更新poetry:

pipx upgrade poetry

2. 在项目中使用 poetry

在系统中只有一个poetry就够了,接下来在各个项目中使用即可。

这里有一个项目APIPractice, 之前是pip +requirement.txt 半手动的方式管理依赖,接下来改为poetry

2.1 初始化 pyproject.toml

在项目的根目录,执行poetry是, 并一路回车

在Do you confirm generation? (yes/no) [yes] 后拿下回车之后,将会在当前目录生成pyproject.toml,内容如下:

[tool.poetry]
name = "apipractice"
version = "0.1.0"
description = "我是一个描述"
authors = []

[tool.poetry.dependencies]
python = "^3.9"

[tool.poetry.dev-dependencies]

[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"

2.2 创建项目虚拟环境

此时peotry使用的还是pipx为它创建的独立虚拟环境

C:\Users\summer\github\APIPractice>poetry env info

Virtualenv
Python:         3.9.0
Implementation: CPython
Path:           NA

System
Platform: win32
OS:       nt
Python:   c:\users\summer\.local\pipx\venvs\poetry

接下来要为项目创建项目虚拟环境,以便安装项目的各项依赖

C:\Users\summer\github\APIPractice>poetry env use python
Creating virtualenv apipractice-gBZexHj9-py3.9 in C:\Users\summer\AppData\Local\pypoetry\Cache\virtualenvs
Using virtualenv: C:\Users\summer\AppData\Local\pypoetry\Cache\virtualenvs\apipractice-gBZexHj9-py3.9

所有由 poetry 创建虚拟环境会会几种在一个地方,一般情况下,我们不需要直到整个环境的具体路径,

在项目根目录执行 poetry shell 即可进入整个虚拟环境

C:\Users\summer\github\APIPractice>poetry shell
Spawning shell within C:\Users\summer\AppData\Local\pypoetry\Cache\virtualenvs\apipractice-gBZexHj9-py3.9
Microsoft Windows [版本 10.0.19042.746]
(c) 2020 Microsoft Corporation. 保留所有权利。

C:\Users\summer\github\APIPractice>

验证

C:\Users\summer\github\APIPractice>pip -V
pip 20.3.3 from C:\Users\summer\AppData\Local\pypoetry\Cache\virtualenvs\apipractice-gBZexHj9-py3.9\lib\site-packages\pip (python 3.9)

2.3 添加新的依赖

既然要使用poetry来进行依赖包的管理,那我们在后面也会的避免使用pip ,

添加依赖的命令

poetry add <pakge_name>

pyproject.toml 文件中添加如下内容:

[[tool.poetry.source]]
name = "aliyun"
url = "https://mirrors.aliyun.com/pypi/simple"

接下来他会花比较久的时间去分析fastpi的依赖关系,以及依赖包的依赖关系。最终会生成一个大约800行内容的poetry.lock文件, 并且修改pyproject.toml

[tool.poetry.dependencies]
python = "^3.9"
fastapi = {extras = ["all"], version = "^0.63.0"}

自此,依赖安装成功。

为了以后避免出现其他的状况,本项目中尽量不要在用pip做任何事情。。。把pip暂时忘记吧

3. 总结

现在新的项目已经使用poetry和pyproject.toml来进行管理了。

回顾发现,poetry在开始做了2件事:

  1. 初始化pyproject.toml
  2. 创建虚拟环境

之后,主要负责:

  1. 管理依赖
  2. 切换虚拟环境
上一篇

机器学习简介 - 寻找函数的艺术

下一篇

Linux安装Anaconda

©2024 By bajiu.