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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值