在过去的几年中,pipenv和Makefile一直是我的最爱项目工具。不过最近,我开始用Poetry管理我的项目。
Poetry 是一个类似于 pipenv 的 Python 工具,帮助管理依赖和打包。
首先,我们需要Poetry已经在你的电脑上了。我这边的例子是使用Python 3.9在我的macOS上执行以下命令:
pip -V:
pip 24.1.1 位于 /usr/local/lib/python3.9/site-packages/pip (Python 3.9)
我们将先将 pip 从 23.3.1 版本更新到 24.1.1 版本,更新完 pip 后再安装 Poetry:
$ python3.9 -m pip install --upgrade pip
弃用警告:使用 distutils 配置文件配置安装方案已弃用,并且在未来即将不再工作。如果您使用的是 Homebrew 或 Linuxbrew Python,请参阅讨论 https://github.com/Homebrew/homebrew-core/issues/76621
要求已满足的条件:pip 在 /usr/local/lib/python3.9/site-packages (23.3.1)
正在收集 pip
下载 pip-24.1.1-py3-none-any.whl.metadata (3.6 kB)
正在下载 pip-24.1.1-py3-none-any.whl (1.8 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 13.4 MB/秒
正在安装收集到的包:pip
正在尝试卸载 pip
找到现有安装:pip 23.3.1
正在卸载 pip-23.3.1:
成功卸载 pip-23.3.1
我们先从安装Poetry开始:
$ pip install poetry
正在安装 poetry
下载 poetry-1.8.3-py3-none-any.whl.metadata (6.8 kB)
安装成功:poetry-1.8.3, poetry-core-1.9.0, poetry-plugin-export-1.8.0
这次,我想基于FastAPI来做个项目。FastAPI是一个用于构建API的现代高性能框架。
使用FastAPI的关键特点包括:
- 非常快 :就像 Node.js 和 Go 一样快
- 快速编写 :加快编写功能的速度
关于Go、Node.js和Python(Flask、FastAPI、Django、Pyramid)的性能对比测试
FastAPI 的用例:
- 微服务:使用 FastAPI 的高性能、低开销和异步功能,使其成为创建小型、专注和可扩展服务的绝佳选择。
- 无服务器和云函数服务
- SPA(单页应用程序)的后端
- 与数据库和 ORM 的集成。最常用的 ORM 是 SQLAlchemy 和 Tortoise ORM,后者的设计灵感来自 Django ORM。
常见Python ORM的对比,来自Tortoise ORM网页
该项目可以使用命令行界面(CLI)构建,也可以使用你最喜欢的集成开发环境(IDE)进行开发。对我来说,我最喜欢的Python IDE是PyCharm,它可以直接创建一个可以直接使用的项目。
创建CLI项目
我们将先检查一下Poetry是否安装好了。
poetry --version
Poetry 版本 1.8.3
要创建项目,只需执行该命令,然后按照交互式项目创建向导的指引。
$ poetry init
该命令将引导您创建 pyproject.toml 配置文件。
包名 [patinflyfastapi]: patinflyfastapi
版本 [0.1.0]: 0.1.0
描述 []:
作者 [TomasGiS <me@tomasgis.cat>] [n 跳过]: TomasGiS <help.medium@tomasgis.cat>
许可 []:
兼容的 Python 版本 [^3.9]:
您是否想交互式地定义您的主要依赖项?(yes/no) [yes] yes
要添加或搜索的包(留空以跳过): fastapi
找到与 fastapi 匹配的 20 个包
显示前 10 个匹配项
输入要添加的包编号(或如果未列出则输入完整的包名)[]:
[ 0] fastapi
...
> 0
输入所需的版本约束(留空以使用最新版本): ^0.111.0
添加一个包(留空以跳过): uvicorn
找到与 uvicorn 匹配的 20 个包
显示前 10 个匹配项
输入要添加的包编号(或如果未列出则输入完整的包名)[]:
[ 0] uvicorn
...
> 0
输入所需的版本约束(留空以使用最新版本):
使用版本 ^0.30.1
之前的交互命令会询问你是否想要创建开发和主环境。如果你选择创建两个不同的环境,请根据需要进行选择。
以下是项目的基本信息
[tool.poetry]
name = "patinflyfastapi"
version = "0.1.0"
description = ""
authors = ["TomasGiS <help.medium@tomasgis.cat>"]
readme = "README.md"
项目依赖的库
[tool.poetry.dependencies]
python = "^3.9"
fastapi = "^0.111.0"
uvicorn = "^0.30.1"
开发依赖
[tool.poetry.group.dev.dependencies]
fastapi = "^0.111.0"
uvicorn = "^0.30.1"
用于构建项目的工具
[build-system]
requires = ["poetry-core"] # 构建系统所需工具
build-backend = "poetry.core.masonry.api" # 构建后端
之前的文件名为 pyproject.toml,它从 PEP 621 (2020年)起遵循官方的 toml 格式。
以 pyproject.toml 文件为基础的源代码树,该文件由 PEP 517 定义,并基于 PEP 518 扩展了该文件中的 [build-system] 表,新增了一个键。目前,pyproject.toml 文件由 PyPA(Python 包装权威组织)维护,最新的文档可以在 这里 查阅。
前面的例子分为4个部分:
- [tool.poetry] 用于描述项目基本信息
- [tool.poetry.dependencies],列出生产环境需要安装的依赖项。
- [tool.poetry.dev.dependencies],列出开发环境需要安装的依赖项。
- [build-system],包含配置 poetry 或其他构建工具的相关信息(或元数据)。
当然可以使用如下命令添加FastAPI和Uvicorn依赖或任何其他依赖。
例如,如果你想使用poetry添加fastapi和uvicorn[standard],你可以使用这个命令。
要表示简洁版本,可以这样表示:简版
poetry add fastapi==0.111.0
当然,你可以随时去掉项目里的任何依赖。
poetry remove fastapi # 在Poetry中移除fastapi包
poetry remove -dev fastapi # 在Poetry中移除带-dev标记的fastapi包
在创建了满足最低要求的项目之后,现在我们可以添加一些更多需求以便在开发环境中运行代码测试。
poetry add --group dev coverage flake8 mypy pylint
下一步就是运行我们刚建好的环境。
$ poetry shell
正在创建虚拟环境 patinflyfastapi-9VT-DdIv-py3.9
在 /Users/TomasGiS/Library/Caches/pypoetry/virtualenvs/patinflyfastapi-9VT-DdIv-py3.9 中启动 shell
emulate bash -c '. /Users/TomasGiS/Library/Caches/pypoetry/virtualenvs/patinflyfastapi-9VT-DdIv-py3.9/bin/activate'
虚拟环境已激活: /Users/TomasGiS/Library/Caches/pypoetry/virtualenvs/patinflyfastapi-9VT-DdIv-py3.9
创建PyCharm项目
PyCharm 是由 jetbrains 创建的一款用于 Web 开发和数据科学的 IDE。主要的工具允许根据以下内容创建项目,
和其它 IDE 类似,PyCharm 自带了一系列工具,并且还可以通过插件来扩展 IDE 的功能性和工具。
让我们基于FastAPI,并使用poetry工具进行项目管理,创建一个新的项目叫做PatinflyFastAPI。
在 PyCharm 中创建项目
通过 CLI 命令,你可以创建名为 pyproject.toml 的项目配置文件,这个文件使用 toml 格式。
当使用 PyCharm 向导创建项目时,它将生成配置文件和一个简单的示例:
最后一个步骤是运行FastAPI。如下,我在PyCharm里运行了HTTP请求测试:
参考的资料
- FastAPI 官方文档
- Poetry (诗歌)
- PyCharm (PyCharm)
共同学习,写下你的评论
评论加载中...
作者其他优质文章