在win10下写了一个python抽签程序,需要搬到统信os下去运行,但没有root权限,不能安装tkinter或qt5组件,所以要把python应用打包成单一可执行文件。
python应用打包可用pyinstaller,要打包统信os下能运行,需要在统信os下进行打包。
virtualbox安装统信os v20
从统信官网下载统信os v20的iso文件,安装到virtualbox。

打开开发者模式:


安装python环境和组件
1 2 3
| sudo apt update sudo apt install python3-pip pip3 install pyinstaller
|
安装pyinstaller会出错,原因是典型的缺少编译依赖或pip 版本过旧。
1 2 3 4 5
| sudo apt install build-essential python3-dev zlib1g-dev libssl-dev
python3 -m pip install --upgrade pip setuptools wheel
pip3 install pyinstaller
|
运行pyinstaller,提示命令没找到,pyinstaller安装在~/.local/bin,此路径还没有被系统“PATH环境变量”纳入搜索范围的目录里。
nano ~/.bashrc
在最后面加上:
1 2
| export PATH="$HOME/.local/bin:$PATH"
|
使配置生效:
打包应用
1
| pyinstaller --onefile lottery.py
|
打包过程的输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| qs1@qs1-uos:~/Downloads/测试/测试$ /home/qs1/.local/bin/pyinstaller --onefile lottery.py 79 INFO: PyInstaller: 5.13.2 79 INFO: Python: 3.7.3 79 INFO: Platform: Linux-6.6.28-amd64-desktop-hwe-x86_64-with-uos-20-eagle 80 INFO: wrote /home/qs1/Downloads/测试/测试/lottery.spec 82 INFO: Extending PYTHONPATH with paths ['/home/qs1/Downloads/测试/测试'] 217 INFO: checking Analysis 217 INFO: Building Analysis because Analysis-00.toc is non existent 217 INFO: Initializing module dependency graph... 218 INFO: Caching module graph hooks... 226 INFO: Analyzing base_library.zip ... 589 INFO: Loading module hook 'hook-encodings.py' from '/home/qs1/.local/lib/python3.7/site-packages/PyInstaller/hooks'... 812 INFO: Loading module hook 'hook-heapq.py' from '/home/qs1/.local/lib/python3.7/site-packages/PyInstaller/hooks'... 1100 INFO: Loading module hook 'hook-pickle.py' from '/home/qs1/.local/lib/python3.7/site-packages/PyInstaller/hooks'... 1907 INFO: Caching module dependency graph... 1983 INFO: running Analysis Analysis-00.toc 2002 INFO: Analyzing /home/qs1/Downloads/测试/测试/lottery.py 2114 INFO: Loading module hook 'hook-platform.py' from '/home/qs1/.local/lib/python3.7/site-packages/PyInstaller/hooks'... 2115 INFO: Processing module hooks... 2119 INFO: Loading module hook 'hook-_tkinter.py' from '/home/qs1/.local/lib/python3.7/site-packages/PyInstaller/hooks'... 2119 INFO: checking Tree 2119 INFO: Building Tree because Tree-00.toc is non existent 2119 INFO: Building Tree Tree-00.toc 2123 INFO: checking Tree 2123 INFO: Building Tree because Tree-01.toc is non existent 2123 INFO: Building Tree Tree-01.toc 2124 WARNING: Tcl modules directory /usr/share/tcltk/tcl8.6/../tcl8 does not exist. 2130 INFO: Looking for ctypes DLLs 2130 INFO: Analyzing run-time hooks ... 2131 INFO: Including run-time hook '/home/qs1/.local/lib/python3.7/site-packages/PyInstaller/hooks/rthooks/pyi_rth__tkinter.py' 2139 INFO: Looking for dynamic libraries 2482 INFO: Looking for eggs 2484 INFO: Python library not among binary dependencies. Performing additional search... 2567 INFO: Using Python library /lib/x86_64-linux-gnu/libpython3.7m.so.1.0 2568 INFO: Warnings written to /home/qs1/Downloads/测试/测试/build/lottery/warn-lottery.txt 2577 INFO: Graph cross-reference written to /home/qs1/Downloads/测试/测试/build/lottery/xref-lottery.html 2585 INFO: checking PYZ 2585 INFO: Building PYZ because PYZ-00.toc is non existent 2585 INFO: Building PYZ (ZlibArchive) /home/qs1/Downloads/测试/测试/build/lottery/PYZ-00.pyz 2722 INFO: Building PYZ (ZlibArchive) /home/qs1/Downloads/测试/测试/build/lottery/PYZ-00.pyz completed successfully. 2726 INFO: checking PKG 2726 INFO: Building PKG because PKG-00.toc is non existent 2726 INFO: Building PKG (CArchive) lottery.pkg 5403 INFO: Building PKG (CArchive) lottery.pkg completed successfully. 5406 INFO: Bootloader /home/qs1/.local/lib/python3.7/site-packages/PyInstaller/bootloader/Linux-64bit-intel/run 5406 INFO: checking EXE 5406 INFO: Building EXE because EXE-00.toc is non existent 5406 INFO: Building EXE from EXE-00.toc 5406 INFO: Copying bootloader EXE to /home/qs1/Downloads/测试/测试/dist/lottery 5406 INFO: Appending PKG archive to custom ELF section in EXE 5427 INFO: Building EXE from EXE-00.toc completed successfully.
|
成功后会在当前目录下生成build和dist两个目录,可执行文件在dist目录下。
验证
生成可执行文件在当前统信os里可双击运行。
在文件上点右键,选属性,把权限管理下的允许以程序执行勾上。再双击,会出现是否要运行的提示框,选运行。



python应用可以打开并正常运行。
qt版本也可以顺利打包并执行。
这两个可执行文件在debian13和kde neon上都可以正常运行。
打包在统信 UOS 上操作,不要跨系统打包。
PyInstaller 不具备交叉编译能力,必须在统信 UOS 系统上运行打包命令。如果是在 Windows 上打包,生成的是 .exe 文件,无法在 Linux 上运行。打包应用是因为没有权限安装tkinter或qt5组件,不使用这两个组件的话,python应用(.py)是可以在uos下用python3 app.py的方式运行的,此时的应用是在无界面的形式下运行,没有窗体,只在终端console中有显示。

vb程序的跨系统运行
vb做的小型应用单文件,使用方便,要在uos下运行,需要在应用商店里安装”统信windows兼容引擎“,这个应用把wine包装好以兼容更多应用,不需自己手动配置。简单vb程序(没有使用第三方组件)在uos下双击运行,会自动添加vb组件vbctl并正确执行。抽签程序原来有vb版本,可以直接搬过来用。
好消息是目标机器上的统信os已经有tkinter和qt,可以直接执行带gui的py程序,但依然是不支持安装第三方组件。