当前位置: 首页 > web >正文

即开即用,封装 Flask 项目为 exe 文件实操步骤

见字如面,朋友们!

嗨,这里是 AIGC 创意人_竹相左边!

正如你们所知,我正在通过 AI 自学软硬件工程师,目标是手搓一台可回收火箭玩具!

最近,我被《流浪地球 2》中马兆的那句“没有硬件支撑,你破解个屁”深深打动——硬件和软件的结合,才是硬核的灵魂!

今天,我想和大家分享一个实用技巧:如何将我的 Flask 项目封装成一个即开即用的 .exe 文件,让没有编程知识的同事也能轻松使用。

跟着我一步步操作,打造属于我们的“软件硬件之光”吧!

image.png

一、为什么要封装为 .exe?

在开发 Flask 项目时,我们通常需要在 Python 环境中运行,依赖如 Flask、Pillow 等库。对于编程小白或非技术同事来说,配置环境、安装依赖简直是“天坑”。封装成 .exe 文件的好处在于:

  • 无需安装 Python:所有依赖打包到一起,双击运行即可。
  • 跨平台友好:Windows 用户直接使用(Mac/Linux 可考虑其他工具)。
  • 即开即用:就像火箭点火,启动即飞!

二、准备工作与工具

在开始之前,确认你的开发环境已准备好:

  • Python 环境:确保已安装 Python 3.x(我用的是 3.9,稳定得很!)。
  • PyInstaller:安装命令:pip install pyinstaller,这是我们封装的“火箭引擎”。
  • 项目文件:包括 app.py、routes、templates、static 和 utils 文件夹。

三、整代码以支持打包

我们需要修改 app.py,添加以下功能:

  • 检测是否以打包形式运行(PyInstaller 会在运行时设置 sys._MEIPASS)。
  • 正确设置 templates 和 static 文件夹路径。
  • 启动程序后自动打开浏览器。

    image.png

四、准备打包环境

  • 确保 PyInstaller 已安装:在你的开发环境中,安装 PyInstaller:

    pip install pyinstaller
     
  • 生成 requirements.txt:确保所有依赖都被记录,运行以下命令生成 requirements.txt:

    pip freeze > requirements.txt
     
  • 项目结构:确认你的项目目录结构如下:

五、使用 PyInstaller 打包

  • 进入项目目录
    cd D:\20250219\ai_work\jpg2pdf
  • 运行 PyInstaller 打包命令: 使用 --onefile 选项打包成单个 .exe 文件,同时使用 --add-data 包含 templates 和 static 文件夹。

    pyinstaller --onefile --add-data "templates;templates" --add-data "static;static" app.py
     
  • Windows 系统下,路径分隔符使用 ;。
  • 打包结果: 打包完成后,dist 文件夹中会生成 app.exe。

    image.png

六:测试打包后的 .exe

  • 将 app.exe 复制到桌面: 复制 dist\app.exe 到你的桌面或其他测试目录。
  • 双击运行 app.exe
  • 程序会启动 Flask 服务器。
  • 默认会自动打开浏览器,访问 http://127.0.0.1:5000。

七、小贴士与优化

  • 添加图标:用 --icon app.ico 自定义 .exe 图标。
  • 隐藏命令行:加 --noconsole 让界面更友好(但保留调试用)。
  • 问题排查:如果运行失败,检查是否有缺少的 DLL(如 VCRUNTIME140.dll),建议同事安装 Microsoft Visual C++ Redistributable。

http://www.xdnf.cn/news/4216.html

相关文章:

  • QQ相册下载工具
  • 宁德时代区块链+数字孪生专利解析:去中心化身份认证重构产业安全底座
  • NoUniqueKey问题和Regular join介绍
  • Linux USB Gadget | 框架 / 复合设备实践 / Configfs 配置
  • CSS分栏布局
  • 【T2I】PLACE: Adaptive Layout-Semantic Fusion for Semantic Image Synthesis
  • vue2+element实现Table表格嵌套输入框、选择器、日期选择器、表单弹出窗组件的行内编辑功能
  • CentOS配置了镜像源之后依旧下载元数据失败
  • (二)毛子整洁架构(CQRS/Dapper/DomianEvent Handler)
  • 高效调用京东 API 实战:商品详情页实时数据采集接口开发指南​
  • C++ this关键字
  • python校园二手交易管理系统-闲置物品交易系统
  • ts axios中报 Property ‘code‘ does not exist on type ‘AxiosResponse<any, any>‘
  • PCIe控制逻辑介绍(一)
  • 【C/C++】new关键字解析
  • 说下RabbitMQ的整体架构
  • K-means
  • 一款独立于游戏外的键盘源按键辅助工具他来了
  • C#发送之前转换为JSON格式
  • 美妆集合体验馆的「AI 焕新」:从人工到智能管理的蜕变
  • FPGA设计如何快速入门?(内附学习视频)
  • Kotlin Lambda优化Android事件处理
  • 极端工况的高频电流探头精度优化
  • Python实例题:Python操作excel自动化开发
  • 6.5 行业特定应用:金融、医疗、制造等行业的定制化解决方案
  • 数据结构 --- 栈
  • 基于RT-Thread的STM32F4开发第二讲第一篇——ADC
  • Flutter 布局
  • dubbo限流
  • Android OKHttp原理简单说明