侯体宗的博客
  • 首页
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

python学习教程之使用py2exe打包

Python  /  管理员 发布于 7年前   301

前言

本文主要给大家介绍了关于python使用py2exe打包的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

遇坑

之前经过折腾,pyinstaller打包文件可以在别的windows7上运行。但是,mfk, 客户说是xp系统。崩溃

使用pyinstaller各种折腾,打包出来的依然是不是有效的win32程序,各种报错。

后来尝试使用 py2exe 打包

使用

1、安装 不废话,下载exe版,傻瓜式安装

2、使用

编写类似一个 setup.py 文件,写各种配置(下边有)

调用命令

python setup.py py2exe

或者在setup.py下添加如下语句,点击文件自动运行

sys.argv.append('py2exe')

官方示例: http://www.py2exe.org/index.cgi/Tutorial

具体参数含义见:http://www.py2exe.org/index.cgi/ListOfOptions

问题

1、不是有效的win32程序

换32位的python,其他模块都重装,包括pyqt5

2、py2exe UnicodeDecodeError: 'gbk' codec can't decode

py2exe 的runtime.py 里 打开文件制定为utf-8

with open(target.script, "U",encoding="UTF-8") as script_file:

3、编译PyQt5 异常

把一句 Exception, e 该为 Exception as e 就好了

4、could not find or load the Qt platform plugin "windows"

把 C:\Python34\Lib\site-packages\PyQt5\plugins 下的 platforms 拷贝到 打包目录下的platforms搞定

5、找不到 msvc**100.dll 问题

把system32 目录下的 msvc**.dll 的三个dll文件拷贝到打包目录下

分享一下完成的打包脚本

from distutils.core import setupimport py2exeimport sysimport osimport globimport shutilimport msvcrt#this allows to run it with a simple double click.sys.argv.append('py2exe')PYTHON_HOME = os.getenv('PYTHON_HOME')TARGET_DIR = '../build2'# 删除原来生成的路径if os.path.exists(TARGET_DIR): print("是否删除文件夹(y/n)\t" + os.path.abspath(TARGET_DIR)) d = msvcrt.getch() if d == b'y': shutil.rmtree(TARGET_DIR) print(os.path.abspath(TARGET_DIR)+' 被删除')def find_data_files(dlist,source,target,patterns): # 是否有特殊符号 if glob.has_magic(source) or glob.has_magic(target):  raise ValueError("Magic not allowed in src, target") ret = dlist for pattern in patterns:  # 给pattern 上添加目录  pattern = os.path.join(source,pattern)  # 通过pattern寻找满足条件的文件  for filename in glob.glob(pattern):   # 判断文件是否存在   if os.path.isfile(filename):    # 获取相对source 的相对路径    relP = os.path.relpath(filename,source)    # 设置为目标路径    targetpath = os.path.join(target,relP)    # 获取目标文件的文件夹    path = os.path.dirname(targetpath)    ret.setdefault(path,[]).append(filename) print('-------------------')print('资源拷贝')data_files = {}# 拷贝xp需要的msvc**100.dllfind_data_files(data_files,'C:/Windows/System32/','',['msvc*100.dll'])# 拷贝pyqt5里依赖的dllfind_data_files(data_files, PYTHON_HOME+'/Lib/site-packages/PyQt5/plugins/platforms','platforms',['*.dll'])# 把当前目录下ui文件夹内容拷贝到目标文件夹的ui文件夹下find_data_files(data_files,'ui','ui',['*.*'])# 拷贝配置文件find_data_files(data_files,'config/','config/',['*.*'])# 转成键值对集合data_files = data_files.items()print(data_files)print('--------------------------')OPTIONS = { 'py2exe': { "includes": ["sip"],# 导入依赖 sip # "dll_excludes": ["MSVCP90.dll","MSVCR100.dll"], # 是否压缩 1 压缩。 0 不压缩 "compressed": 1, # 优化级别。 0 不优化 pyc 1 优化 pyd 2 pyo "optimize": 2, # 依赖的包 "packages": ["xml.etree", "xml"], # 是否把dll打包到压缩包里 # 1 所有的都打包 2 除了python解释器,其他的都打包 3 所有的不打包 "bundle_files": 1, # 生成的文件夹 'dist_dir':TARGET_DIR },}setup(  name = '登录器',  version = '1.0',  # 需要生成exe文件的 py。因为可能会有多个入口  windows = [  {   'script':'Login.py',   # 图标前的索引依赖ico里的图标数   "icon_resources":[(0, "ui/icon.ico")]  }  ],  data_files = data_files,  options = OPTIONS,  # 默认生成一个 library.zip 用来存放打包数据。如果设置为None,则打包数据存放在exe文件里  zipfile = None,)print("打包结束,按任意键退出..") msvcrt.getch()

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家的支持。


  • 上一条:
    不同版本中Python matplotlib.pyplot.draw()界面绘制异常问题的解决
    下一条:
    python数据结构之列表和元组的详解
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(95个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客