Python 项目打包
点击展开更新日志
2025
1202
【新增】源起
【新增】项目介绍
1206
【新增】封装打包
nexttime
会有些什么呢(❁´◡`❁)
¶源起
是因为在内网进行密码管理,密码多了管理起来不太方便,就算存本地小本本也要加密码(现在就是这么干的,存的excel)。总觉得用起来不方便,正好没事借助强大的 DeepSeek 写了个简单的密码管理器应用。
不得不说,免费版的 DS 在代码生成方面确实还是有点实力,第一版生成了基本架构和主要代码,第一次就跑通了,只是后面想按照预期调整、排错、打包费了比较久的时间(也就半个月吧。。)。加上上下文限制,每次换对话也要把代码全部上传一次,就有点烦。
最后在虚拟机上勉强构建完成之后,传输到目标机上却发现 glibc 版本不匹配,只能重新准备环境构建,兜兜转转又是1周的时间。最终选择了 Docker 容器的方式,以下操作步骤(依赖、脚本)都是经过实际重新执行的,应该不会有问题…吧?
¶项目介绍
¶项目需求
- 开发语言:Python
- 交互方式:GUI
- 核心功能:
- 添加密码
- 修改密码
- 删除密码
- 查看密码
- 支持MySQL数据库
- 交付物:
- arm64 架构 appimage
¶环境
- 开发环境
- 操作系统:Win11 x86_64
- IDE:PyCharm2024.3.1
- Python:3.12
- QT:Qt6
- AI:DeepSeek
- 打包环境
- 设备:Mac mini M4
- CPU: arm64
- 虚拟机:Debian11
- Docker:arm64v8/debian:buster-slim
¶封装打包
为了安全性、便捷性,自然不可能写完之后就结束了,单是环境配置就不是一句话的事(pip:?),尤其对于内网环境,单文件版是最好的选择,因此项目的最终目标,必须是能够封装为独立文件,不依赖系统环境可运行。因内网环境是基于Debian的UOS20 arm64架构(glibc=2.28),因此我们选择打包为 appimage 包。
程序在pycharm中运行和打包后能够正常运行,中间还是存在区别,主要是对于静态资源的处理,加上对打包过程、原理的不熟悉,最好的方式就是先简单打包一版,以便进一步调试,因此,这里就优先选择打包为 x86_64 的 exe 程序,方便本地执行调试。
¶x86_64 exe
推荐使用 Python3.12 版本。
1 | pip install -r requirements.txt |
执行后会在当前项目根目录 dist 目录下生成exe。
¶arm64 appimage
这里需要根据目标系统 glibc 版本高低选择合适的 Python 和 qt 版本。
¶Python3.12+Qt6
构建环境
-
使用 Parallel Desktop 安装 Debian12 + DE;
-
更新仓库源
1
2
3
4
5
6
7
8
9
10
11
12
13vi /etc/apt/sources.list
Types: deb
URIs: http://mirrors.ustc.edu.cn/debian
Suites: bullseye bullseye-updates
Components: main contrib non-free
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
Types: deb
URIs: http://mirrors.ustc.edu.cn/debian-security
Suites: bullseye-security
Components: main contrib non-free
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg1
2apt update
apt install vim -
安装 Python12:似乎仓库就已经是了
1
2
3
4
5
6
7
8
9
10export http_proxy=http://127.0.0.1:7897
export https_proxy=http://127.0.0.1:7897
wget https://www/python.org/ftp/python/3.12.12/Python-3.12.12.tgz
tar xf Python-3.12.12.tgz # 如果报错什么EOF,说明下载不完整,删除重下
cd Python-3.12.12
apt install build-essential openssl libssl-dev zlib1g-dev libreadline-dev libncursesw5-dev libgdbm-dev libbz2-dev libffi-dev liblzma-dev tk-dev uuid-dev
make distclean # 如果重新安装了依赖执行这个后继续
./configure --enable-optimizations
make
make altinstall -
创建编译环境
1
2
3
4
5
6
7
8
9
10mkdir ~/venv
cd venv
python3.12 -m venv build
source build/bin/activate
# requirements_linux.txt 检查三个PyQt6是否是6版本,不是直接修改为6即可
apt install pkg-config default-libmysqlclient-dev qt6-base-dev qt6-tools-dev
pip install -r requirements_linux.txt -
安装依赖
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18sudo apt install build-essential qt6-base-dev qt6-tools-dev-tools qt6-declarative-dev qt6-qpa-plugins
# qmake
find /usr -name "qmake*" # 查找 qmake路径,比如我的环境在 /usr/lib/qt6/bin/
## 创建符号链接
sudo ln -sf /usr/lib/qt6/bin/qmake /usr/bin/qmake
sudo ln -sf /usr/lib/qt6/bin/qmake6 /usr/bin/qmake6
# PyQt6 无论如何编译安装都装不上,所用直接装的预编译包
pip install --use-pep517 PyQt6 --only-binary :all: --no-cache-dir
# qt6/plugins 如果运行报错根据实际路径修改打包脚本下 plugins 路径,注释不必要的路径
## 可能路径
## /usr/lib/aarch64-linux-gnu/qt6/plugins # 比如我的就在这里
## /usr/lib/arm-linux=gnueabihf/qt6/plugins
## /usr/lib/qt6/plugins
## /usr/local/lib/qt6/plugins
## /opt/qt6/plugins -
构建
1
python build_arm64_qt6.py
¶Python3.7+Qt5
若不是目标系统
glibc版本只有2.28,贸然升级得不偿失,因此只能寻求低版本构建方案。除非不得已,极其不建议升级系统相关组件!!!
如果是 arm64,只推荐 Docker 构建,而且不要再使用venv创建环境,况且在Mac mini上,低版本 Linux(Debian10,RockyLinux8,CentOS7,ubuntu18甚至都无法启动安装程序);x86_64就很好说了,虚拟机或者 Docker 都可以。
-
安装 Docker 或 Docker Desktop
-
启动容器
1
docker run --name build -it -v /path/to/project:/data arm64v8/debian:buster-slim /bin/bash
-
修改镜像仓库:debian10 buster
1
2
3
4
5
6
7
8
9
10/etc/apt/sources.list
deb https://mirrors.aliyun.com/debian-archive/debian buster main contrib non-free
# deb-src https://mirrors.aliyun.com/debian-archive/debian buster main contrib non-free
deb https://mirrors.aliyun.com/debian-archive/debian-security buster/updates main contrib non-free
# deb-src https://mirrors.aliyun.com/debian-archive/debian-security buster/updates main contrib non-free
deb https://mirrors.aliyun.com/debian-archive/debian buster-updates main contrib non-free
# deb-src https://mirrors.aliyun.com/debian-archive/debian buster-updates main contrib non-free
apt update -
准备构建环境
1
2
3
4
5
6apt install python3 python3-pip vim wget python3-pyqt5 pyqt5-dev qttools5-dev libmariadb-dev-compat libffi-dev libjpeg-dev
pip3 install --upgrade pip setuptools wheel
# 删除 requirements.txt 中 PyQt5 三行,删除版本指定,由pip决定
pip3 install -r requirements.txt -
构建
1
python3 buile_arm64_qt5.py
构建成功会在当前项目目录下创建 PasswordManager-arm64.AppImage,传到桌面环境 arm64 Linux,添加执行权限验证。





