将dist文件打包成exe可执行程序
1、需要安装pywebview 网页预览依赖:
pip install pywebview
2、安装打包成exe得文件得依赖:
pip install pyinstaller
3、main.py:
单页面:
# 这是一个示例 Python 脚本。# 按 Shift+F10 执行或将其替换为您的代码。
# 按 双击 Shift 在所有地方搜索类、文件、工具窗口、操作和设置。
import os
print(os.getcwd())import threading
import webview
import sys# 定义一个函数,当窗口关闭时调用
def on_closed():print("窗口已关闭")# 按装订区域中的绿色按钮以运行脚本。
if __name__ == '__main__':# 创建一个窗口并加载一个 HTML 文件# 你可以将 'example.html' 替换为你的 HTML 文件的路径window = webview.create_window('青竹蜂云剑', 'web/index.html', width=1280, height=920, resizable=True,)webview.start()
若依框架:
import os
import threading
import webview
from flask import Flask, request, Response, send_from_directory
import httpx
import logging
import sys# 配置日志
logging.basicConfig(level=logging.INFO)# 获取当前工作目录
base_dir = os.path.dirname(os.path.abspath(__file__))
web_dir = os.path.join(base_dir, 'web') # 前端文件目录# 创建Flask应用处理代理请求
app = Flask(__name__, static_folder=web_dir)# 提供静态文件服务
@app.route('/')
def index():return send_from_directory(web_dir, 'index.html')@app.route('/<path:filename>')
def static_files(filename):return send_from_directory(web_dir, filename)# 代理路由处理
@app.route('/prod-api/<path:subpath>', methods=['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'])
def proxy_handler(subpath):"""处理所有/prod-api/请求并转发到目标服务"""try:# 1. 构建目标URL(移除/prod-api/前缀)target_url = f'http://localhost:8080/{subpath}'logging.info(f"转发请求到: {target_url}")# 2. 转发请求并获取响应with httpx.Client() as client:# 复制原始请求的headers(排除Host)headers = {key: value for key, value in request.headersif key.lower() != 'host'}# 转发请求resp = client.request(method=request.method,url=target_url,headers=headers,data=request.get_data(),params=request.args,cookies=request.cookies,timeout=30)# 3. 返回响应给客户端excluded_headers = ['content-encoding', 'content-length', 'transfer-encoding', 'connection']headers = [(name, value) for name, value in resp.headers.items()if name.lower() not in excluded_headers]return Response(resp.content, resp.status_code, headers)except Exception as e:logging.error(f"代理请求失败: {str(e)}")return Response(f"代理服务错误: {str(e)}", status=500)def run_flask():"""启动Flask代理服务"""app.run(port=5000, use_reloader=False)if __name__ == '__main__':# 确保web目录存在if not os.path.exists(web_dir):os.makedirs(web_dir)logging.warning(f"创建了缺失的web目录: {web_dir}")# 启动Flask代理服务(在后台线程)threading.Thread(target=run_flask, daemon=True).start()# 创建Webview窗口(指向代理服务)window = webview.create_window('GamingAI','http://localhost:5000', # 通过代理服务加载页面width=1280,height=920,resizable=True)# 设置窗口关闭回调window.events.closed += lambda: sys.exit(0)webview.start()
4、复制好代码改改关键位置然后启动项目,查看运行效果:
python main.py
5、改完你的需求 生成exe文件的命令:
pyinstaller --onefile --add-data "./web/;./web/" main.py
若依框架:
pyinstaller --onefile --add-data "./web;./web/" --hidden-import=flask --hidden-import=httpx --hidden-import=engineio.async_drivers.threading main.py