Python PYQT5程序打包

        梳理一下程序编写和打包的流程避免碰到问题再重新搜索,本身不是专业的,写一些小程序方便工作使用,各个环节如果有更好的方案请各位大佬多指导。

目录

一、配置虚拟环境

二、下载对应版本的嵌入式python包(也可以程序调试完成了最后下载)

三、创建项目目录

四、Python嵌入式包配置

五、.py文件转换为.pyd

六、Inno Setup


一、配置虚拟环境

打开anaconda的命令行界面,创建需要python版本的环境

conda create -n name python=3.8
activate name

name就是需要配置的虚拟环境的名称,第一步创建,第二部切换到这个环境,切换到对应环境后可以通过pip安装各种需要的包

二、下载对应版本的嵌入式python包(也可以程序调试完成了最后下载)

官网下载,按图示选择需要的平台和版本的python嵌入式安装包

Welcome to Python.org

三、创建项目目录

(1)runtime:解压后的python嵌入式包,写代码调试的时候可以不用管这个,最后打包的时候再来处理

(2)start.py: 程序的入口,切换工作路径到这个目录下,根据自己的项目需要放置其他文件夹,

比如我自己的这个是界面用的Qtdesinger生成的文件就单独放一个文件夹ui,一些逻辑函数放在scr里面。程序编写的时候用的Pycharm,将anaconda创建的虚拟环境的python 配置给start.py,每次启动这个程序即可。

import sys
import os

if __name__ == '__main__':
    work_dir=os.path.dirname(os.path.abspath(__file__))
    os.chdir(work_dir)
    sys.path.append(os.path.abspath('scr'))
    sys.path.append(os.path.abspath('qt'))
    sys.path.append(os.path.abspath('ui'))
    sys.path.append(os.path.abspath('scr.egg'))
    import main
    main.main()

四、Python嵌入式包配置

目录下创建一个start.bat,通过调用嵌入式包中的python.exe运行入口的.py程序

@echo off
runtime\python.exe start.py

runtime下找到这个文件,在里面添加包的相对路径,创建对应的文件夹后,从虚拟环境中将需要的包拷贝至这个目录下,然后根据自己项目需要将包里面的模块进行剪切,如果剪切之后程序无法运行就再拷回去

五、.py文件转换为.pyd

遍历目录下的.py程序打包为.pyd

在.py文件的目录的上一级目录创建setup.py文件

from setuptools import setup
from Cython.Build import cythonize
import glob
import os

# 获取当前目录下所有的 .py 文件
py_files = glob.glob(os.path.join('.py文件路径', '*.py'))

setup(ext_modules = cythonize(py_files, compiler_directives={'language_level': "3"}))

在python的对应环境下运行命令,anaconda的命令行界面中激活对应的环境,切换到setup.py的路径下,运行下方的命令,生成的.pyd文件可拷贝至第四点中配置的包的目录下即可正常运行:

python setup.py build_ext --inplace

执行这一步的时候出现了一个问题,只要是类里面的函数转换为.pyd后则无法使用,如

def xxx(self)的都会提示传递给函数的参数多了一个,暂时未找到如何处理,因此只将一些关键的代码单独拎出来转换为.pyd

六、Inno Setup

       写好的程序里面有一些文件需要一直更新,因此选择打包为可安装的程序,如果没有配置文件修改等需求,可以用Enigma Virtual Box打包。

Inno Setup生成的脚本中加入下列两行可给与程序工作路径的管理员权限,如安装后文件夹下的文件出现无法编辑的情况可尝试该方法。

[Dirs]
Name: {app}; Permissions: users-full

### PyQt 应用程序打包教程 PyQt 是一种用于创建图形用户界面 (GUI) 的强大工具集[^2]。为了将基于 PyQt 开发的应用程序分发给最终用户,通常需要将其打包成独立的可执行文件。以下是关于如何使用 `fbs` 工具来完成这一过程的具体说明。 #### 使用 fbs 打包 PyQt 应用程序 `fbs` 是一个专门设计用来简化 PyQt 和 PySide 应用程序打包流程的框架。它能够自动生成项目结构并处理复杂的依赖关系管理。下面是一个典型的例子: ```python from fbs_runtime.application_context.PyQt5 import ApplicationContext from PyQt5.QtWidgets import QMainWindow import sys if __name__ == '__main__': appctxt = ApplicationContext() # 实例化 ApplicationContext window = QMainWindow() window.resize(250, 150) window.setWindowTitle("Example App") # 设置窗口标题 window.show() exit_code = appctxt.app.exec_() # 启动事件循环 sys.exit(exit_code) ``` 上述代码展示了如何通过 `ApplicationContext` 来初始化 PyQt 应用程序[^1]。接下来可以按照以下方式配置和构建应用。 #### 配置与构建步骤 1. **安装必要的库** 确保已安装 `fbs` 及其相关依赖项: ```bash pip install fbs ``` 2. **初始化项目** 运行命令以生成基础目录结构: ```bash fbs startproject ``` 3. **修改源码** 编辑位于 `src/main/python/` 下的入口脚本(如上所示),实现所需功能。 4. **测试运行环境** 在开发环境中验证应用程序是否正常工作: ```bash fbs run ``` 5. **冻结应用程序** 构建独立版本供部署使用: ```bash fbs freeze ``` 6. **生成安装程序(可选)** 如果希望进一步提供易于使用的安装体验,则可以通过如下指令制作安装包: ```bash fbs installer ``` 以上方法适用于大多数场景下的 PyQt 应用发布需求。对于更复杂的需求,比如集成多媒体支持或者特定硬件交互等功能模块时,可能还需要额外调整设置或引入第三方扩展库[^3]。 #### 注意事项 - 当前示例仅展示了一个简单的 GUI 结构;实际开发过程中应考虑异常捕获、资源加载等因素。 - 不同操作系统间可能存在兼容性差异,请务必针对目标平台分别测试成品表现。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值