如果按照往常开发中的环境项目结构,加上需要的依赖,一套运行环境下来大概在400MB左右
其中PySide6 就有150MB
使用嵌入式Python,结合打包封装,具有一定操作性,打包后大小 40MB,封装完20MB
注意一定需要:requirements 虚拟环境依赖文件包
第一步、梳理项目结构projects ├─gui_py | ├─download │ └─.*.py ├─static │ ├─settings | ├─.*.json | ├─.*.bat | ├─requirements | └─img | └─svg_icons └─main.py
结构说明:项目拆分为三个部分
第一部分 gui_py文件,为具体脚本或项目内容结构,包含py,gui文件等,
包含一些脚本整个项目配置文件,
注意事项:路径使用的路径需要使用os模块对项目操作,
例如引入外部static文件内容可以为以下三种形式
os.path.dirname(os.path.abspath(__file__)) os.path.abspath(os.getcwd()) "static/ima/svg_icons/..."
错误形式例如
"projects/static/ima/svg_icons/..."
第二部分 static文件,为静态资源,包含配置文件,数据文件,日志文件,图片视频等静态资源文件
第三部分 main.py文件,为入口执行文件
示例:是一段入口文件,单独剥离出来即可
import os
import sys
# import QT CORE
# ///
from PySide6.QtGui import QIcon
from PySide6.QtWidgets import QMainWindow, QApplication
from gui.core.json_settings import Settings
from gui.uis.windows.main_window import UI_MainWindow, SetupMainWindow
from gui.uis.windows.main_window.functions_main_window import MainFunctions
# MAIN WINDOW
# ///
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
...
...
......
app = QApplication(sys.argv)
app.setWindowIcon(QIcon("icon.ico"))
window = MainWindow()
# EXEC APP
# ///
sys.exit(app.exec())
第二步、Nuitka,打包
1、安装Nuitka打包工具
pip install nuitka # 如果安装比较慢,可以尝试使用镜像源 pip install -i https://pypi.douban.com/simple/ nuitka
2、安装mingw64
网站:https://sourceforge.net/projects/mingw-w64/
具体文件下载
32位下载:https://sourceforge.net/projects/mingw-w64/files/ 找到MinGW-W64 GCC-8.1.0 点击 i686-win32-sjlj 下载
64位下载:https://sourceforge.net/projects/mingw-w64/files/ 找到MinGW-W64 GCC-8.1.0 点击 x86_64-win32-sjlj 下载
下载后解压,配置环境变量,不会配置环境变量可以看看文章
https://blog.csdn.net/qq_42475194/article/details/108548359
直接看第六步
环境路径为
bin目录路径
3、使用Nuitka打包
nuitka --standalone --include-data-dir=static=static --mingw64 --show-progress --nofollow-import-to --follow-import-to=gui --windows-icon-from-ico=E:Download_DL......staticimagesicon.ico --output-dir=E:Download_DL......build main.py
可复制直接使用命令
nuitka --standalone --include-data-dir=static=static --mingw64 --show-progress --nofollow-imports --follow-import-to=gui --windows-icon-from-ico=E:Download_DL...icon.ico --nofollow-import-to=PySide6,pyside6,shiboken6 --output-dir=E:Download_DL...build main.py # 修改--windows-icon-from-ico # 修改--follow-import-to= # 修改--output-dir= # 修改 main.py
命令说明:
standalone :分发文件,打包出来的内容指向 .dist 文件 扩展:其中如果是单个文件,可以使用:onefile
include-data-dir :复制包含所有文件的整个文件夹,顾名思义,打包完后,该文件会保留在打包内容中 扩展:复制目录中的部分或全部文件:include-data-file== 官方表示还有更好的自动检测包数据并复制:-include-package-data (但未测试) 我这里将自己的静态文件保存,static=static
mingw64:c构建 如果在运行中提示下载缓存工具,可以点击Yes
show-progress:显示进度
nofollow-import-to:有选择地排除需要编译导入的模块 例如我们在main.py文件中 导入PySide6 那么在编译时候,会将PySide6进行提取,但这是不完全的,所以可以在编译完后删除,或者是在`main.py`文件中调整导入
follow-import-to:指定需要导入的文件夹,也就是 本次目录结构中的 gui 文件
windows-icon-from-ico: exe图标icon
output-dir : 打包后放在那个地方,这里就是指定输出路径
以上是打包DEBUG环境
后面配置好依赖,启动exe程序会开启命令行和exe桌面应用
正式使用需要加上: --windows-disable-console 没有控制台的 Windows 程序不会出错, 出于调试目的,删除--windows-disable-console或使用上述选项--windows-force-stdout-spec和 --windows-force-stderr-spec路径 --windows-onefile-tempdir-spec
正式命令
nuitka --standalone --mingw64 --windows-disable-console --include-data-dir=static=static --show-progress --nofollow-import-to --follow-import-to=gui --windows-icon-from-ico=E:Download_DL......staticimagesicon.ico --output-dir=E:Download_DL......build main.py
配置时间不会很慢,大概三分钟以内,会将python环境编译成pyd和dll相关文件
以上不一一展示,编译完成后,路径打开后缀为.dist文件夹 .build 文件可以放置一边不用操作 然后找到主运行程序。
编译过的文件结构如下
main.dist ├─static │ ├─settings | ├─.*.json | ├─.*.bat | ├─requirements | └─img | └─svg_icons ├─main.exe ├─......dll └─......dll # 现有的结构为 main.dist 为项目基础 # static 为静态文件保持不变 # main.exe为主程序入口 # 一些编译好的dll和pyd文件 # 内置环境已经完成,开始集成依赖环境
4、配置依赖环境
''' 配置依赖环境建议使用脚本形式操作 windwos环境,可以使用基本的dos操作方法, 加上Python嵌入式环境,基本可以操作 先配置 pip 命令 再配置 安装操作 '''
进入Python官方下载网站
https://www.python.org/downloads/windows/ 找到对应版本的python Windows x86-64 embeddable zip file 64位 Windows x86 embeddable zip file 32位
我下载的64位,因为PySide6暂时只支持64位下载
下载后解压文件夹
实际上 只需要复制几个文件即可,因为再进行编译配置的时候,已经将Python的基本环境配置好, 只需要配置一些安装pip的配置环境即可
此时将文件复制到static文件夹中,新建立一个lib_文件,将文件拷贝到此文件夹中 名称都可以随意 site-packge
获取`apt_get.py`文件 打开`https://bootstrap.pypa.io/get-pip.py` 直接复制内容 保存到本地文件
开始编写bat脚本 文件放置再static 目录下
# 此时目录结构如下 main.dist ├─static │ ├─lib_ | | ├─python.cat | | ├─python.exe | | ├─python38._pth | | ├─python38.zip | | └─pythonw.exe | ├─apt_get.py | ├─install_packge.bat | ├─requirements | └─img | └─svg_icons ├─main.exe ├─......dll └─......dll # 其中install_packge.bat 脚本为windows环境下执行脚本,逻辑上通用,配置环境
脚本如下
cd /d %~dp0
cd ../
set path=%cd%
for /f %%i in ('dir "%path%"\static\lib_ /b') do (
move "%path%\staticlib_\%%i" "%path%"
echo "%path%\static\lib_\%%i" "%path%"
)
"%path%\python" "%path%"\static\apt_get.py
"%path%\scripts\pip" install --upgrade pip
"%path%\scripts\pip" install -t "%path%" -i https://pypi.douban.com/simple/ -r "%path%\static\requirements"
pause
说明 补充一下
"%path%" dos 下 有些文件夹是带有空格 需要加入双引号 扩住路径
cd /d %~dp0 : %~dp0 表示当前环境目录 cd 表示切换目录
cd ../ : 表示切换上一层目录 也就是根目录
set path=%cd% : %cd% 表示当前路径, 定义变量path 将 路径赋值给path
for /f %%i in ('dir %path%\static\lib_ /b') do (
move "%path%\staticlib_\%%i" "%path%"
echo "%path%\static\lib_\%%i" "%path%"
)
这里几段for循环操作 主要目的是为了循环遍历文件,然后将文件移动至指定文件夹下 也就是根目录(main.dist)下:
%path%\python %path%\static\apt_get.py :使用python 命令 运行apt_get.py文件 安装pip文件
%path%\scripts\pip install -t %path% -r %path%\static\requirements :使用安装好的 pip 安装依赖文件
重点:-t %path% 指定pip 安装环境至 指定路径
pause : 可加可不加, 目的是为了暂停命令行,查看具体情况
此时可以测试使用脚本,直接点击运行
根目录下,一些需要的依赖文件
测试 点击 exe 程序查看是否可以运行,如果可以运行,即可将static 文件作为 开发中迭代更新文件,进行保存 此时若打开 exe 程序 会弹出命令行的框,那么在编译时候加上 --windows-disable-console 即可第三步、inno setup 封装
1、 下载安装 inno setup
https://jrsoftware.org/isdl.php 选择Random site 或有快捷方式即可 正常安装即可
2、配置项目
安装成功后 开始配置项目
创建新文件
点击Next
应用信息
Application name: 应用名称 必填 Application version: 应用版本 必填 Application publisher: 应用创作人或公司 非必填 Application website: 应用web站点 非必填 (没有就不用填写)
应用文件
''' Application destination base folder: 应用程序目标基础文件夹 Application folder name: 应用程序文件夹名称 这里是表示安装后,应用名称 Allow user to ghange the application folder:允许用户改变应用程序文件夹 也就是表述 在安装的时候,选择安装目录,原本安装到C盘,可以更改到D盘 other The application doesn't need a folder:应用程序不需要文件夹 '''
应用程序文件
Application main executable file: 应用程序主可执行文件 选择exe文件 Allow user to start the application after Setup has finished: 允许用户在安装完成后启动应用程序 The application doesn't have a main executable file :应用程序没有主可执行文件 下方添加主目录 也就是本程序的main.dist文件夹
Associate a file type to the main executable :将文件类型与主可执行文件关联 Application file type name:应用程序文件类型名称 Application file type extensionexel:应用程序文件类型 这里填写为exe即可
应用程序的快捷方式
Create a shortcut to the main executable in the Start Menu Programs foldert : 在"开始菜单程序"文件夹中创建主可执行文件的快捷方式 Application Start Menu folder name: 应用程序开始菜单文件夹名称 Allow user to change the Start Menu folder name :允许用户改变开始菜单文件夹名称 Allow uSer to disable Start Menu folder creation :允许用户改变开始菜单文件夹名称 Create an Internet shortcut in the Start Menu folder :在“开始菜单”文件夹中创建Internet快捷方式 Create an Uninstall shor tcut in the Start Menu folder :在开始菜单文件夹中创建一个卸载快捷方式 Other shortcuts to the main executable: 主可执行文件的其他快捷方式 Allow user to create a desktop shortcut :允许用户创建桌面快捷方式
应用程序文档
Please specify which documentation files should be shown by Setup during installation: 请指定安装过程中安装程序应该显示哪些文档文件 license file :许可文件 Information file shown hefore installation:安装前显示的信息文件 Information file shown after installation :安装后显示的信息文件
安装运行方式
Administrative install mode (install for all users):管理安装模式(为所有用户安装) Non administrative install mode finstall for current user only):非管理安装模式安装仅适用于当前用户) Allow user to gverride the install mode via the command line:允许用户通过命令行控制安装模式 Ask the user to choose the install mode at startup: 要求用户在启动时选择安装模式
语言配置
注意中文配置,可以网上获取 https://jrsoftware.org/files/istrans/ 然后保存至Inno Setup 6Languages 文件夹下
编译器设置
Custom compiler outout folder: 自定义编译器输出文件夹: Compiler outout hase file name: 编译器输出hase文件名 Custom Setun icon file: 自定义Setun图标文件 Setup password:设置密码
Inno设置预处理器
Yes, use #define compiler directives :是的,使用#define编译器指令
Finish
Inno Setup CompilerWould you like to compile the new script now?: 你现在想编译新脚本吗? 这里选择否
保存配置文件
再[RUN]中加入需要执行的脚本文件
Filename: "{app}staticinstall_packge.bat"; StatusMsg: "InstallDependency package file"; Flags: skipifsilent
加入完保存
最后点击上方运行按钮编译
弹出在编译之前保存脚本,点击是,保存
提示是否安装,点击取消即可,或者可以直接安装,也可以直接去输出文件夹安装
然后找到封装好的应用
以上就是打包封装,如果有了解可以咨询,后面可以出一个视频操作



