You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将PyQt开发的Python应用打包为Ubuntu平台的可安装文件?

我来帮你搞定Ubuntu上PyQt应用打包成可安装文件的事儿!下面是几个最实用的方案,从Ubuntu原生的Deb包到跨发行版格式都覆盖到了:

方案1:打包成Debian包(.deb,Ubuntu原生格式)

这是最贴合Ubuntu生态的方式,用户可以直接双击安装,或者用系统包管理器部署,步骤分两步:先把Python应用转成可执行文件,再构建标准Deb包结构。

第一步:用PyInstaller把PyQt应用转成可执行文件

PyInstaller是Python打包的常用工具,能把你的代码和依赖打包成独立的可执行文件:

  • 先安装PyInstaller:
    pip install pyinstaller
    
  • 执行打包命令(假设你的主程序文件是main.py,--windowed参数会隐藏终端窗口,适合GUI应用):
    pyinstaller --windowed --name my_pyqt_app main.py
    
    如果你的应用有资源文件(比如图标、配置),记得用--add-data参数包含进去,比如:
    pyinstaller --windowed --name my_pyqt_app --add-data "assets/icons/*:assets/icons/" main.py
    
  • 打包完成后,dist目录下会生成my_pyqt_app文件夹(默认是多文件模式,启动速度比单文件快,推荐使用),里面就是可直接运行的程序。

第二步:构建Deb包目录结构

Deb包有固定的目录规范,我们手动搭建一个:

my_pyqt_app_deb/
├── DEBIAN/
│   ├── control
│   └── postinst(可选,安装后执行的脚本)
└── usr/
    ├── bin/
    │   └── my_pyqt_app/ (把dist里的整个my_pyqt_app文件夹复制到这里)
    └── share/
        ├── applications/
        │   └── my_pyqt_app.desktop (桌面快捷方式文件)
        └── icons/
            └── hicolor/
                └── 256x256/
                    └── apps/
                        └── my_app_icon.png (应用图标,尺寸推荐256x256)

关键文件说明:

  1. DEBIAN/control(必填,描述包信息)
    按下面的格式填写,替换成你的应用信息:

    Package: my-pyqt-app
    Version: 1.0.0
    Section: utils
    Priority: optional
    Architecture: amd64 (根据你的CPU架构修改,比如arm64、i386)
    Depends: libgl1-mesa-glx, libx11-xcb1 (PyQt依赖的系统库,PyInstaller打包后可能只需要这些基础库)
    Maintainer: Your Name <your_email@example.com>
    Description: 你的PyQt应用名称
      这里写应用的详细描述,第二行要缩进一个空格
    
  2. usr/share/applications/my_pyqt_app.desktop(桌面快捷方式)
    内容示例,注意Exec路径要指向可执行文件的实际位置:

    [Desktop Entry]
    Type=Application
    Name=我的PyQt应用
    Comment=这是一个用PyQt开发的GUI应用
    Exec=/usr/bin/my_pyqt_app/my_pyqt_app
    Icon=/usr/share/icons/hicolor/256x256/apps/my_app_icon.png
    Terminal=false
    Categories=Utility;Development; (按应用类型选择分类)
    
  3. 权限设置
    给DEBIAN目录下的文件设置可执行权限:

    chmod 755 my_pyqt_app_deb/DEBIAN/*
    

    给应用的可执行文件设置权限:

    chmod +x my_pyqt_app_deb/usr/bin/my_pyqt_app/my_pyqt_app
    

第三步:生成Deb包

在终端执行命令,生成最终的.deb文件:

dpkg-deb --build my_pyqt_app_deb

执行完成后,你会得到my_pyqt_app_deb.deb文件,用户可以双击安装,或者用命令行安装:

sudo dpkg -i my_pyqt_app_deb.deb
# 如果有依赖缺失,执行下面的命令修复
sudo apt-get -f install

简化Deb打包:用fpm工具

如果不想手动搭建目录结构,可以用fpm工具快速生成Deb包:

  • 安装fpm:
    sudo apt install ruby ruby-dev build-essential
    sudo gem install fpm
    
  • 直接把PyInstaller的产物打包成Deb:
    fpm -s dir -t deb -n my-pyqt-app -v 1.0.0 --prefix /usr/bin dist/my_pyqt_app/
    
    这个命令会自动生成control文件,不过你可能需要手动添加依赖和桌面快捷方式。
方案2:打包成Flatpak(跨发行版格式)

如果你的应用需要支持多个Linux发行版,Flatpak是个不错的选择,Ubuntu也原生支持:

  • 先安装Flatpak工具:
    sudo apt install flatpak flatpak-builder
    flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
    
  • 创建一个io.github.YourUsername.MyPyQtApp.yml的manifest文件,示例结构:
    app-id: io.github.YourUsername.MyPyQtApp
    runtime: org.python.Platform
    runtime-version: '3.10'
    sdk: org.python.Sdk
    command: my_pyqt_app
    finish-args:
      - --socket=wayland
      - --socket=x11
      - --share=ipc
    modules:
      - name: my-pyqt-app
        buildsystem: simple
        build-commands:
          - pip install --prefix=/app .
          - cp -r dist/my_pyqt_app /app/bin/
        sources:
          - type: dir
            path: .
    
  • 构建Flatpak包:
    flatpak-builder build-dir io.github.YourUsername.MyPyQtApp.yml
    
  • 安装测试:
    flatpak-builder --user --install build-dir io.github.YourUsername.MyPyQtApp.yml
    
方案3:打包成Snap(Ubuntu官方推荐的格式)

Snap是Canonical推出的打包格式,Ubuntu默认支持,适合发布到Snap Store:

  • 安装Snapcraft:
    sudo apt install snapcraft
    
  • 初始化Snap项目:
    snapcraft init
    
  • 修改snap/snapcraft.yaml配置文件,示例:
    name: my-pyqt-app
    base: core22
    version: '1.0.0'
    summary: 你的PyQt应用简介
    description: |
      这里写应用的详细描述
    
    grade: stable
    confinement: strict
    
    parts:
      my-pyqt-app:
        plugin: python
        source: .
        python-packages:
          - pyqt5
        override-build: |
          snapcraftctl build
          pyinstaller --windowed --name my_pyqt_app main.py
          cp -r dist/my_pyqt_app $SNAPCRAFT_PART_INSTALL/bin/
    
    apps:
      my-pyqt-app:
        command: bin/my_pyqt_app/my_pyqt_app
        desktop: usr/share/applications/my_pyqt_app.desktop
        plugs:
          - x11
          - wayland
    
  • 构建Snap包:
    snapcraft
    
  • 本地安装测试:
    sudo snap install my-pyqt-app_1.0.0_amd64.snap --dangerous
    
注意事项
  • PyInstaller打包时,要确保所有资源文件都被正确包含,否则运行时会找不到文件。
  • 打包Deb包时,架构要和你当前的Ubuntu系统一致,如果你需要支持多架构,可能需要交叉编译或者在对应架构的系统上打包。
  • 如果你的应用依赖系统特定的库,要在Deb包的control文件中添加对应的依赖项,避免用户安装后无法运行。

内容的提问来源于stack exchange,提问作者SARATH IR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 11:27:56