VideoDown Project
如果按照往常开发中的环境项目结构,加上需要的依赖,一套运行环境下来大概在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
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
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
...
...
......
app = QApplication(sys.argv)
app.setWindowIcon(QIcon("icon.ico"))
window = MainWindow()
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\......\static\images\icon.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
命令说明:
standalone :分发文件,打包出来的内容指向 .dist 文件
扩展:其中如果是单个文件,可以使用:onefile
include-data-dir :复制包含所有文件的整个文件夹,顾名思义,打包完后,该文件会保留在打包内容中
扩展:复制目录中的部分或全部文件:include-data-file=<source>=<target>
官方表示还有更好的自动检测包数据并复制:-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\......\static\images\icon.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
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%\\static\lib_\\%%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
说明
cd /d %~dp0 : %~dp0 表示当前环境目录 cd 表示切换目录
cd ../ : 表示切换上一层目录 也就是根目录
set path=%cd% : %cd% 表示当前路径, 定义变量path 将 路径赋值给path
for /f %%i in ('dir %path%\\static\\lib_ /b') do (
move "%path%\\static\lib_\\%%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 6\Languages 文件夹下
编译器设置
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}\static\install_packge.bat"; StatusMsg: "InstallDependency package file"; Flags: skipifsilent
加入完保存
最后点击上方运行按钮编译
弹出在编译之前保存脚本,点击是,保存
提示是否安装,点击取消即可,或者可以直接安装,也可以直接去输出文件夹安装
然后找到封装好的应用
以上就是打包封装,如果有了解可以咨询,后面可以出一个视频操作
|