01 准备工作

准备工作

背景

在这里插入图片描述
Flask 诞生于 2010 年,是 Armin ronacher(人名)用 Python 语言基于 Werkzeug 工具箱编写的 轻量级 Web 开发框架。

Flask 本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展 Flask-Mail,用户认证 Flask-Login,数据库 Flask-SQLAlchemy ),都需要用第三方的扩展来实现。比如可以用 Flask 扩展加入 ORM、JWT、文件上传、身份验证等。 Flask 没有默认使用的数据库,你可以选择 MySQL,也可以用 NoSQL。

其 WSGI 工具箱采用 Werkzeug(路由模块),模板引擎则使用 Jinja2。这两个也是 Flask 框架的核心。

Flask的优点

  1. 轻量级设计与灵活性:Flask 以其轻量级的设计著称,不强制要求复杂的配置,允许开发者根据项目需求自由选择组件和库,非常适合快速开发小型到中型项目。

  2. 强大的社区和扩展性:Flask 拥有庞大的社区支持和丰富的扩展库,覆盖从数据库操作、身份验证到RESTful API开发等多个方面,使得开发者可以轻松扩展应用功能,应对各种复杂需求。

  3. 易用性和开发友好:Flask 的 API 设计简洁直观,非常适合初学者快速上手。它内置的开发服务器和调试器,以及对RESTful 路由和Jinja2模板引擎的支持,都大大提高了开发效率和体验。

使用虚拟环境

使用虚拟环境(virtual environment)在开发 Flask 应用程序时有几个显著的好处:

  1. 隔离项目依赖:每个项目可以拥有自己独立的依赖环境,这意味着不同项目可以使用不同版本的库而互不干扰。这避免了版本冲突,确保了项目依赖的清晰和一致性。

  2. 环境一致性:通过虚拟环境,可以确保开发、测试和生产环境的一致性。每个环境都可以配置为完全相同的依赖和库版本,从而减少“在我的机器上可以运行”的问题。

  3. 简化依赖管理:使用虚拟环境可以更方便地管理项目依赖。你可以为每个项目创建一个requirements.txt文件,记录所有必需的包及其版本,便于其他开发者或部署环境重现相同的环境。

  4. 避免系统级污染:不使用虚拟环境可能会导致系统级的Python环境变得混乱,安装的包可能会相互冲突。虚拟环境将所有依赖限制在特定目录下,保护了系统级Python环境的整洁。

  5. 便于环境迁移和部署:由于所有依赖都被限定在虚拟环境中,将项目从一个机器迁移到另一个机器或部署到服务器上时,只需简单地复制或重建虚拟环境即可,大大简化了部署过程。

  6. 提高安全性:在虚拟环境中安装的包通常只限于该环境,这降低了因安装不安全或过时的包而带来的安全风险。

虚拟环境

使用 venv 的好处:

  1. 轻量级和原生支持venv 是 Python 的标准库的一部分,无需安装额外的包即可使用。它为创建隔离的 Python 环境提供了简单直接的方法。

  2. 易于管理依赖:通过创建独立的环境,venv 允许开发者为每个项目安装特定版本的依赖,避免了不同项目间的依赖冲突。

  3. 跨平台兼容性venv 在所有主流操作系统上都可用,包括 Windows、macOS 和 Linux,确保了良好的跨平台兼容性。

使用 poetry 的好处:

  1. 依赖管理和构建工具集成poetry 不仅管理依赖,还负责项目的构建和打包。它自动处理依赖的解析和版本控制,简化了项目的构建和打包过程。

  2. 依赖锁定poetry 使用 pyproject.toml 文件和一个锁定文件(poetry.lock),确保无论在什么环境下安装,依赖的版本都是一致的。

  3. 虚拟环境管理poetry 可以自动创建和管理虚拟环境,无需手动激活或管理环境路径。

  4. 发布和版本控制poetry 可以直接将包发布到 PyPI,还支持版本控制,简化了包的发布和维护流程。

poetry 相比 venv 的优势:

  1. 依赖管理的自动化和完整性poetry 自动处理依赖解析和版本控制,而 venv 主要负责创建隔离环境,依赖管理需要额外的工具(如 piprequirements.txt)。

  2. 更优的依赖锁定机制poetry 使用 poetry.lock 文件确保依赖的一致性,而 venv 依赖于 requirements.txt 文件,后者在多人协作时可能不够稳定。

  3. 集成构建和发布流程poetry 提供了从依赖管理到构建、打包、发布的完整工作流,而 venv 仅提供环境隔离功能,构建和发布需要其他工具。

  4. 更好的用户体验poetry 的设计旨在提供更流畅的开发体验,从依赖安装到项目打包,整个过程更为简洁和自动化。

总的来说,venv 是一个轻量级且易于使用的环境隔离工具,而 poetry 提供了更全面的依赖管理和项目打包功能,适合需要更高级依赖管理和自动化构建流程的项目。

在flask中使用poetry

在 Flask 项目中使用 Poetry 主要有以下几个原因:

  1. 依赖管理:Poetry 提供了一种更现代和更简洁的方式来管理 Python 依赖。它通过 pyproject.toml 文件来声明项目依赖,这比传统的 requirements.txt 文件更加清晰和易于管理。Poetry 还会自动创建一个 poetry.lock 文件来锁定依赖项的确切版本,确保项目在不同环境中的一致性。

  2. 环境隔离:虽然 Flask 本身使用虚拟环境(如通过 venv 创建的环境)来隔离项目依赖,但 Poetry 内置了虚拟环境管理功能,可以自动创建和管理虚拟环境,简化了环境设置和依赖安装的步骤。

  3. 构建和打包:Poetry 不仅管理依赖,还支持项目的构建和打包。它可以直接生成 wheel 文件和源码包,简化了将项目打包和发布到 PyPI 的过程。这对于希望将 Flask 应用打包为可分发包的开发者来说非常有用。

  4. 版本控制:Poetry 允许开发者轻松地管理项目的版本,并且可以方便地发布新版本到 PyPI。这对于维护 Flask 应用的版本历史和分发非常有帮助。

  5. 依赖解析优化:Poetry 使用先进的依赖解析算法,可以更有效地解决依赖冲突,并且在添加、更新或移除依赖时提供更准确的依赖树。

  6. 用户体验:Poetry 的命令行工具设计得直观易用,许多常见的操作(如添加依赖、更新依赖、构建项目等)都可以通过简单的命令完成,提高了开发效率。

  7. 安全性:Poetry 通过其依赖锁定机制,确保了项目依赖的一致性和安全性,减少了因依赖版本不一致导致的安全风险。

综上所述,虽然 Flask 项目可以使用传统的 venvpip 进行依赖管理,但 Poetry 通过提供更全面的依赖管理、环境隔离、构建打包和版本控制等功能,为 Flask 开发者提供了一个更高效、更现代化的开发工作流。

从零开始使用poetry

安装

poetry 是一个命令行工具,安装之后就可以使用 poetry 指令。可以将其安装全局环境或者是虚拟环境,我推荐安装在全局环境,这样在后面使用时不需要单独激活虚拟环境。同时 poetry 也依赖了比较多的模块,每个虚拟环境都安装一次也会比较麻烦。
在这里插入图片描述

pip install poetry

安装之后就会在 python 解释器的安装目录下的 Scripts 目录里面出现 poetry.exe,因为在安装 python 解释器是配置过环境变量,然后就可以直接全局使用了。

初始化 poetry 项目

为了方便解说,我们先创建一个新的项目,名称为 poetry-demo

指定都非常简单,建议跟着一步步自己也尝试一下。
在这里插入图片描述
1、初始化项目

mkdir poetry-demo
cd poetry-demo
poetry init

然后会跳出来一连串的互动对话,用于创建项目的配置文件,这里我就直接全部一路回车,然后看一下生成的 pyproject.toml 配置文件:
在这里插入图片描述

创建虚拟环境

使用指令

 poetry env use python

在这里插入图片描述
可以看出 poetry 为创建创建一个名为 poetry-demo-c-UarFxq-py3.8的虚拟环境
重点说明

  • poetry env use python 是使用当前命令行下激活的 python 解释器创建虚拟环境

    • 也可以将指令最后的 python ,改为 python3、python3.8,之类的,甚至只要需要
      3.8,只要确保对于的解释器能够在环境变量中找到。

    • 更多的配置可以查看 官方文档

  • poetry 默认会将虚拟环境统一放在指定目录,例如刚刚创建的项目就放在
    C:\Users\xxp\AppData\Local\pypoetry\Cache\virtualenvs\ 目录当中

  • 虚拟环境的命名模式为 项目名-随机数-python版本

对于这种命名我个人是蛮喜欢的,每个项目有一个单独虚拟环境,并且制定了对应的版本,看一眼就能知道自己使用的环境是否正确。

对于 poetry 将虚拟环境统一放在指定路径下,这一点我更偏向于 venv 的做法,也就是把虚拟环境放在项目目录下,方便用于观看依赖包的源码,在做项目部署的时候更方便一些。

所幸 poetry 提供了这样的选项。

在当前项目下创建虚拟环境

我们可以使用 以下指令来查看 poetry 的几个主要设定

poetry config --list

在这里插入图片描述
其中 virtualenvs.create = true 若改为 false,则可以停止 poetry 在检查不到虚拟环境是自动创建的行为模式,但是建议不要改动。

virtualenvs.in-project = false 就是我们要修改的目标,使用指令:poetry config virtualenvs.in-project true
在这里插入图片描述
先把之前创建的虚拟环境删除

poetry env remove python

在这里插入图片描述
重新创建虚拟环境,看一下差异:

poetry env remove python

在这里插入图片描述
可以看出:

  • 虚拟环境的路径改为项目的根目录下了
  • 名称固定位 .venv

个人觉得这样的设定更加简洁优雅。

启动与退出虚拟环境

在项目的根目录下使用以下命令就可以进入到虚拟环境

poetry shell

在这里插入图片描述
poetry shell 指令会检查当前目录或上层目录是否存在 pyproject.toml 来确定需要启动的虚拟环境,所以如果不移动到项目的目录下,则会出现错误。
在这里插入图片描述
退出虚拟环境就更简单了,只要输入 exit 就可以了。

poetry 指令

poetry 是一个独立的命令行工具,他有自己的指令,需要花费额外的时间与精力学习,相较 pip 更加复杂,这个能是使用 poetry 的一道关卡。好在常用指令其实不超过 10 个,下面就来一一介绍。

安装模块

使用指令:

poetry add

相较于 pip install,我们试试安装 flask 看看会有什么样的变化
在这里插入图片描述

展示模块

使用指令:

poetry show

在这里插入图片描述
可以看到 poetry 会将所有的信息全部列出来,并且清楚的告知了新增了那些第三方模块。

此时项目中的 pyproject.toml 也发生了变化
在这里插入图片描述
这里要说明,安装 flask ,则 pyproject.toml 只会新增 flask = “^3.0.3” 这个字段的第三方模块,其余依赖不会出现在 toml 文件中。

这里是一个非常大的优点,以便区分那些是用户安装的第三方模块,那些是第三方模块一并安装的依赖。

删除模块

使用指令:

poetry remove flask

在这里插入图片描述
可以看出连同第三方模块的依赖都被删除了,这点比venv做的好。

输出 Poetry 虚拟环境的 requirements.txt

poetry export -f requirements.txt -o requirements.txt --without-hashes

在这里插入图片描述

Poetry 常用指令清单

算来算去,Poetry 的常用指令主要有下面几个:

  1. poetry add: 这个命令用于添加新的依赖到你的pyproject.toml文件中。你可以指定包名和版本范围,Poetry会自动处理依赖关系。

  2. poetry remove: 使用这个命令可以从你的项目中移除指定的依赖。它会同时更新pyproject.toml文件和poetry.lock文件,确保依赖关系保持一致。

  3. poetry export: 这个命令允许你将pyproject.toml文件中的依赖导出到其他格式,比如requirements.txt文件,以便在不使用Poetry的环境中使用。

  4. poetry env use: 这个命令用于指定Poetry应该使用哪个Python环境。你可以指定Python解释器的路径,Poetry会根据这个路径创建和管理虚拟环境。

  5. poetry shell: 这个命令会启动一个新的Poetry虚拟环境的shell。在这个shell中,你可以直接运行你的项目,而不需要手动激活虚拟环境。

  6. poetry show: 这个命令用于显示当前项目依赖的列表,包括版本信息。你可以用它来检查哪些包被安装了,以及它们的版本。

  7. poetry init: 这个命令用于初始化一个新的Poetry项目。它会引导你创建pyproject.toml文件,这是Poetry用来管理项目依赖的核心文件。

  8. poetry uninstall: 这个命令用于从项目中移除指定的依赖包。与poetry remove类似,但它专注于移除操作,不涉及其他依赖关系的更新。
    其中一半,单一项目可能只会用个一两次而已,比如 init 、 install 和 env use ,实际上需要学习的指令并不多。

修改 poetry 镜像源

修改为清华镜像源

poetry source add tsinghua https://pypi.tuna.tsinghua.edu.cn/simple
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值