Python 做服务, html, js 打包单机 exe 的方法
最终我还是学会了Vue 和 ElectronVue 是纯前端的通常跑在浏览器里大家习惯了Vue 网页。Electron 自带一套主进程模型很多人用原生 HTML JS 写 Electron没用过 Vue。之后再补一下详细步骤吧方案一本地 Web 服务模式最简单适合纯 HTMLJS这种方案的核心是Python 启动一个本地微型服务器如 Flask/FastAPI同时托管 HTML 静态文件最后打包成一个 exe。用户双击 exe 后程序会在后台启动服务并自动打开默认浏览器访问本地页面。优点开发简单完全保留你现有的 HTML/JS 代码无需修改前端逻辑。缺点会弹出系统默认浏览器且地址栏会显示http://127.0.0.1:xxxx看起来不太像传统的桌面软件。实现步骤在 Python 代码中使用框架挂载 HTML 目录。例如使用 FastAPIpython编辑from fastapi import FastAPI from fastapi.staticfiles import StaticFiles import uvicorn app FastAPI() # 将当前目录下的 web 文件夹作为静态资源挂载 app.mount(/, StaticFiles(directoryweb, htmlTrue), namestatic) if __name__ __main__: uvicorn.run(app, host127.0.0.1, port8000)使用 PyInstaller 打包。在命令行执行bash编辑pip install pyinstaller # --add-data 源路径;目标路径 (Windows下用分号Mac/Linux用冒号) pyinstaller --onefile --add-data web;web main.py打包后生成的dist/main.exe即可直接运行。方案二原生桌面窗口模式推荐体验最好如果你希望程序运行后弹出一个没有地址栏、菜单栏的独立窗口看起来像真正的单机软件强烈推荐使用PyWebView或Eel库。它们能调用系统自带的 WebView 组件Windows 上是 Edge/IE 内核来渲染你的 HTML。优点界面专业无浏览器地址栏支持 Python 与 JS 双向通信JS 可以直接调用 Python 函数。实现步骤以 PyWebView 为例安装依赖pip install pywebview修改 Python 启动代码python编辑import webview # 直接加载本地 HTML 文件 webview.create_window(我的单机应用, web/index.html) webview.start()同样使用 PyInstaller 打包bash编辑pyinstaller --onefile --windowed main.py注--windowed参数可以隐藏后台的黑框控制台窗口。方案三专业 Electron 混合模式适合复杂前端工程如果你的前端是基于 Vue、React 等现代框架构建的且需要极强的界面交互体验可以采用Electron Python的方案。优点界面极其华丽跨平台兼容性最好VS Code、Discord 都是这么做的。缺点打包体积较大通常 100MB 起步配置相对复杂。核心逻辑Electron 作为主进程负责显示界面同时通过child_process在后台静默启动你的 Python 脚本作为后端 API 服务。 打包时的核心注意事项无论你选择哪种方案在将 Python 和 HTML 打包成单机版时都需要解决以下两个关键问题资源路径问题最容易踩坑在开发时我们读取文件通常用相对路径如./web/index.html。但 PyInstaller 打包成单文件 exe 后程序运行时会把资源解压到一个临时的系统文件夹中。解决方案在 Python 代码中加入以下兼容函数来获取正确的绝对路径python编辑import sys import os def resource_path(relative_path): 获取打包后资源的绝对路径 if hasattr(sys, _MEIPASS): # PyInstaller 打包后的临时目录 return os.path.join(sys._MEIPASS, relative_path) return os.path.join(os.path.abspath(.), relative_path) # 使用时 # html_path resource_path(web/index.html)依赖环境缺失打包后的 exe 虽然自带了 Python 解释器但如果你的 Python 代码调用了系统级的 DLL比如某些图像处理库在别人的电脑上可能会报错。解决方案通常需要在目标电脑上安装Microsoft Visual C Redistributable运行库这是 Windows 运行很多软件的必备组件。建议如果你的前端只是普通的 HTMLJS优先尝试方案二PyWebView它既能保证单机软件的质感又能让你继续发挥 Python 处理后端逻辑的优势。需要我按方案二PyWebView给你出一份完整的、可直接运行的代码框架吗包含 Python 后端、HTML 前端调用和打包配置。参考 - 无厘头 PythonUnicodeDecodeError: utf-8 codec cant decode byte 0x99 in position 32: invalid start bytePython 读文件错误: invalid start byte / illegal multibyte sequence_leader_ww的博客-CSDN博客UnicodeDecodeError: gbk codec cant decode byte 0x99 in position 32: illegal multibyte sequencerawBytes str(vsrefl.rawBytes, gbk)无厘S 头和 history 历史相关单词source/sɔːs/n. 史料来源historical source 史料scholar/ˈskɒlə(r)/n. 学者史学研究者scholarship/ˈskɒləʃɪp/n. 学术史学研究sequence/ˈsiːkwəns/n. 次序时序事件先后顺序历史时序succession/səkˈseʃn/n. 继承继任连续succession of kings 王位承袭sovereign/ˈsɒvrɪn/n./adj. 君主主权的历史君主statue/ˈstætʃuː/n. 雕像历史纪念雕像stele/ˈstiːli/n. 石碑碑刻古代历史铭文碑settlement/ˈsetlmənt/n. 定居点聚落史前 / 古代聚居遗址survive/səˈvaɪv/v. 留存幸存survivaln. 遗存历史文物遗存synchronic/sɪŋˈkrɒnɪk/adj. 共时的史学 / 语言学同一时代scribe/skraɪb/n. 抄写员文书古代史官、抄书人scroll/skrəʊl/n. 卷轴古卷历史文献卷轴sanction/ˈsæŋkʃn/n. 法令批准古代法令siege/siːdʒ/n. 围城围攻历史战役