资讯动态

Flask 教程实战:让 Flaskr 项目可安装——pyproject.toml 描述项目与 pip 可编辑安装全解

发布时间:2026/9/5 16:09:46 来源:尧图企业网站定制
Flask 教程实战让 Flaskr 项目可安装——pyproject.toml 描述项目与 pip 可编辑安装全解【免费下载链接】flaskThe Python micro framework for building web applications.项目地址: https://gitcode.com/gh_mirrors/fl/flask本篇基于 Flask 官方教程的 Make the Project Installable 章节展开讲解如何把一个 Flask 应用教程中的博客应用 Flaskr变成标准的 Python 可安装项目编写pyproject.toml、以可编辑editable模式安装、理解依赖声明与构建后端。读完后你将掌握使用标准 Python 打包工具链管理项目依赖、在任意目录导入应用、并隔离测试环境与开发环境的完整方案同时能看到 Flask 仓库自身正是用同一套方式打包的见 examples/tutorial 示例工程与 pyproject.toml。为什么要把项目做成可安装在教程前面各章中Flaskr 应用由 examples/tutorial/flaskr 组成的包之所以能运行仅仅是因为你一直停留在项目目录下Python 解释器恰好能把flaskr当作本地模块找到。让项目可安装Make the Project Installable意味着你可以构建出一个wheel文件并在另一个环境中安装它——就像当初在开发环境中安装 Flask 一样。这带来的收益包括部署方式统一部署你的项目与安装任何其他 Python 库完全一样全程使用标准 Python 工具pip、wheel、虚拟环境管理一切随处可导入安装之后无论从哪个目录运行都可以import flaskr不再受必须在项目目录里的限制依赖随包声明可以像管理其他包一样管理项目依赖pip install yourproject.whl会连带安装dependencies中声明的所有依赖测试环境隔离测试工具如 pytest 虚拟环境可以把测试环境从开发环境中隔离出来避免两者互相污染。教程原文在此处有一个值得记住的提示这一步虽然是教程靠后才引入的但在你今后的真实项目中应该从一开始就这么做。用 pyproject.toml 描述项目pyproject.toml文件描述你的项目及其构建方式。教程给出的最小完整版本如下# pyproject.toml [project] name flaskr version 1.0.0 description The basic blog app built in the Flask tutorial. dependencies [ flask, ] [build-system] requires [flit_core4] build-backend flit_core.buildapi逐项说明各字段的含义字段作用[project] name项目/包名即 pip 中显示的名称这里为flaskr[project] version语义化版本号教程示例固定为1.0.0[project] description一句话项目描述展示在包索引等元数据中[project] dependencies运行时依赖列表。安装本包时 pip 会自动解析并安装。flask不带版本约束表示任意最新兼容版本[build-system] requires构建本包所需的环境依赖。flit_core4表示使用 flit 构建工具且限定大版本低于 4[build-system] build-backendPEP 517 构建后端入口flit_core.buildapi是 flit 提供的标准后端关于这些文件与选项的更多解释可参考 Python 官方的 Packaging 教程文档中链接的 packaging.python.org 教程页面这里不再展开。仓库中的教程示例工程提供了更完整的真实版本 examples/tutorial/pyproject.toml在最小版本之上补充了实际项目中常见的配置# examples/tutorial/pyproject.toml节选 [project] name flaskr version 1.0.0 description The basic blog app built in the Flask tutorial. readme README.rst license {file LICENSE.txt} maintainers [{name Pallets, email contactpalletsprojects.com}] classifiers [Private :: Do Not Upload] dependencies [ flask, ] [project.urls] Documentation https://flask.palletsprojects.com/tutorial/ [project.optional-dependencies] test [pytest] [build-system] requires [flit_core4] build-backend flit_core.buildapi [tool.flit.module] name flaskr [tool.flit.sdist] include [ tests/, ] [tool.pytest.ini_options] testpaths [tests] filterwarnings [error]与教程最小版本的差异点值得注意[project.optional-dependencies] test [pytest]声明了可选的测试依赖组安装命令写作pip install .[test]这样 pytest 只在需要跑测试时才会进入环境[tool.flit.module] name flaskr显式告诉 flit 要打包的模块名。由于name flaskr与顶层包目录同名这一节其实也可以省略示例工程写出它属于显式化[tool.flit.sdist] include把tests/目录纳入源码发行sdist保证发布出去的源码包含测试classifiers [Private :: Do Not Upload]是一个约定俗成的分类器防止有人误把这个私有示例上传到 PyPI。值得一提的是Flask 框架本身也使用同一套 flit 打包体系。看仓库根目录的 pyproject.toml# 根目录 pyproject.toml节选 [build-system] requires [flit_core3.11,4] build-backend flit_core.buildapi [tool.flit.module] name flask并且 pyproject.toml 中的[project.scripts]一节声明了flask flask.cli:main控制台脚本入口——这就是为什么pip install flask之后你在终端能直接使用flask命令。教程项目不需要自定义命令入口Flaskr 的命令如init-db是通过 Click 注册到应用上的由flask命令发现并调用。以可编辑模式安装项目在激活的虚拟环境中用pip安装你的项目$ pip install -e .这条命令告诉 pip 在当前目录找到pyproject.toml并以editable可编辑或development开发模式安装项目。可编辑模式的核心含义是后续修改本地代码时无需重新安装只有在改变项目元数据例如dependencies中新增依赖时才需要重新执行安装命令。Flask 官方教程示例工程同样遵循这一流程。其 examples/tutorial/README.rst 给出的完整步骤是先创建并激活虚拟环境再执行pip install -e .如果基于 Flask 主分支开发则先pip install -e ../..从源码安装开发版 Flask再pip install -e .安装 Flaskr。安装完成后可以用pip list观察项目是否已安装教程原文的输出示例$ pip list Package Version Location -------------- --------- ---------------------------------- click 6.7 Flask 1.0 flaskr 1.0.0 /home/user/Projects/flask-tutorial itsdangerous 0.24 Jinja2 2.10 MarkupSafe 1.0 pip 9.0.3 Werkzeug 0.14.1输出中flaskr一行的Location指向项目目录这是可编辑安装的典型特征包的位置不是 site-packages 里的副本而是源码目录本身。示例中的具体版本号是教程撰写时期的旧版本当前仓库的 Flask 在 pyproject.toml 中声明支持 Python 3.10依赖werkzeug3.1.0、jinja23.1.2等实际pip list会以当时解析到的版本为准。安装后从任意目录运行应用安装后运行方式与你此前在教程中做的没有任何变化——--app依然是flaskrflask run依然启动应用区别在于你可以在任意目录调用它而不再局限于flask-tutorial目录内$ flask --app flaskr init-db $ flask --app flaskr run --debug打开 http://127.0.0.1:5000 即可看到 Flaskr 首页。从源码层面看这个随处可运行的能力来自flask命令的应用定位逻辑。src/flask/cli.py 中的locate_app()负责把--app flaskr这样的字符串参数变成应用实例def locate_app( module_name: str, app_name: str | None, raise_if_not_found: bool True ) - Flask | None: try: __import__(module_name) except ImportError: # Reraise the ImportError if it occurred within the imported module. ... elif raise_if_not_found: raise NoAppException(fCould not import {module_name!r}.) from None else: return None module sys.modules[module_name] if app_name is None: return find_best_app(module) else: return find_app_by_string(module, app_name)它通过__import__(module_name)走标准导入机制导入模块然后按名称查找Flask实例。未安装未 editable 安装时__import__(flaskr)只有当前工作目录恰好在sys.path中才能成功这正是教程强调只能从项目目录里运行的原因可编辑安装让flaskr的包元数据注册进了环境的 site-packages指向源码目录标准导入机制从此在任何工作目录下都能解析到它flask命令的--app机制才真正随处可用。为测试环境提供隔离的依赖教程原文指出的第三个收益——测试工具可以隔离测试环境与开发环境——在示例工程中落地为 examples/tutorial/pyproject.toml 的可选依赖组与 examples/tutorial/README.rst 的测试流程$ pip install .[test] $ pytest这里的.[test]表示以可编辑模式安装项目本身并额外安装test可选依赖组即 pytest。测试代码从 examples/tutorial/tests/conftest.py 开头即可看到安装带来的直接效果——from flaskr import create_app这类导入不依赖任何相对路径技巧只要 flaskr 已安装就能在任意位置工作from flaskr import create_app from flaskr.db import get_db from flaskr.db import init_db pytest.fixture def app(): Create and configure a new app instance for each test. # create a temporary file to isolate the database for each test db_fd, db_path tempfile.mkstemp() # create the app with common test config app create_app({TESTING: True, DATABASE: db_path}) ...配合 examples/tutorial/tests/test_factory.py 中对create_app()工厂函数的直接测试可以看出因为项目是安装好的包而不是散落在目录里的脚本测试可以在独立虚拟环境中只安装声明过的依赖来运行验证配置注入TESTING: True、数据库临时文件隔离等行为而不受开发机环境的干扰。小结可安装项目的标准工作流把本章内容收敛为一条可复制的工作流在项目根目录编写pyproject.toml声明name、version、dependencies与[build-system]flit_core flit_core.buildapi在项目目录内执行pip install -e .完成可编辑安装用pip list确认包名与Location指向源码目录之后在任意目录执行flask --app flaskr init-db、flask --app flaskr run --debug行为与安装前一致需要跑测试时执行pip install .[test]再pytest让测试环境按声明的依赖组独立装配。这套流程与 Flask 自身的打包方式flit 构建后端 PEP 517一致也是教程建议新项目从一开始就采用的标准化做法。下一章 tests 将在此基础上展开测试细节deploy 则会讨论如何把这样一个已可安装的应用部署到生产环境。【免费下载链接】flaskThe Python micro framework for building web applications.项目地址: https://gitcode.com/gh_mirrors/fl/flask创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价