-pyinstaller:把python项目打包成不同平台的可执行文件
-nsis:NSIS(Nullsoft Scriptable Install System)是一个开源的 Windows 系统下
安装程序制作程序,它提供了安装、卸载、系统设置、文件解压缩等功能。
这如其名字所指出的那样,NSIS 是通过它的脚本语言来描述安装程序的行为和逻辑的
pip install pyinstaller
build文件夹 用于构建可执行文件
dist文件夹 包含应用程序的所有依赖项和可执行文件
run.spec 配置文件
那么你直接打包命令执行后,运行run.exe 是会有问题的, 打包的二进制文件里,会找不到该静态文件的
datas=[('templates/index.html', 'templates'), ('static/style.css', 'static')],
datas=[('config.json', '.')],
可选参数 |
示例 |
说明 |
-F |
pyinstaller -F run.py |
只在dist文件夹中生成一个程序run.exe文件,适用于没有多依赖.py文件 |
-D |
pyinstaller -D run.py |
默认选项,除了主程序run.exe外,还会在在dist文件夹中生成很多依赖文件,推荐使用这个,不容易出报错 |
-i |
pyinstaller -i D:\demo.ico run.py |
给生成的demo.exe文件设置一个自定义的图标 |
项目中如果有些.py文件不想打包,比如配置文件,方便后续修改,怎么办
项目的启动文件run.py打包后,会在项目根目录下生成一个run.spec配置文件
pyinstaller .\run.spec
这样在 dist/_internal/目录下就可以看到,该不想打包的非.py文件
这样再次双击运行该run.exe python项目就起来了
a = Analysis(['run.py'],
pathex=['D:\\sjy_repos\\ceshi'],
binaries=[],
datas=[('templates/index.html', 'templates'), ('static/style.css', 'static')],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
-------------------------------------------
或者把配置文件内容不要写在settings.py,写到settings.json里面
run.spec配置文件改下
datas=[('settings.json','.')],
------------------------------------------------------
from gevent import monkey
monkey.patch_all()
import json
import os
from app_flask import app
from utils.uwsgi_server.server_gevent import *
if __name__ == "__main__":
if os.path.exists(file_path):
with open('./settings.json','r',encoding='utf-8') as setting_file:
settings_dict = json.load(setting_file)
SYS_NAME = settings_dict['SYS_NAME']
PORT = settings_dict['SERVICE_SERVER_PORT']
print("配置文件读取正确")
print(f'{SYS_NAME}[服务器模式]启动……')
server = uwsgi_server(app=app,address='0.0.0.0',port=PORT)
server.start()
打包后,运行.exe文件,报错说找不到setings文件等
import os, sys
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
deactivate
python38 -m virtualenv venv
venv/scripts/activate
pip list
pyinstaller -D .\run.py
flask项目打包过程中,报错解决
python install gevent
python install gevent-websocket
在flask的执行入口文件(app.py)中引入gevent,引入即可
from engineio.async_drivers import gevent
---------------------------------------
from flask import Flask, render_template
from flask_socketio import SocketIO, send, emit
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret_key'
socketio = SocketIO(app, async_mode='gevent')
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY