文档章节

通过py2exe打包python程序的过程中,解决的一系列问题

o
 osc_a22drz29
发布于 2019/03/25 19:08
字数 1029
阅读 21
收藏 0

精选30+云产品,助力企业轻松上云!>>>

py2exe的使用方法参考《py2exe使用方法》

注:程序可以在解释器中正常运行,一切问题都出在打包过程中。

问题1:

  • 现象:RuntimeError: maximum recursion depth exceeded in comparison.
  • 原因:Python递归报错。Python中默认的最大递归深度是989,当尝试递归第990时便出现递归深度超限的错误。
  • 解决:在setup.exe中手动设置递归调用深度为10000000,代码如下:
      • import sys
        sys.setrecursionlimit(10000000)

问题2:

  • 现象: import _tkinter ImportError: DLL load failed: %1 不是有效的 Win32 应用程序。 
  • 原因:python解释器版本与tkinter版本不一致。可能是安装了多个python解释器,或者tkinter不是用pip安装、导致其版本与python解释器版本不一致。(本次遇到的情况属于后者)
  • 解决:安装对应版本的python解释器(2.7.10)

问题3:

  • 现象: [Errno 2] No such file or directory: 'libopenblas.IPBC74C7KURV7CB2PKT5Z5FNR3SIBV4J.gfortran-win_amd64.dll' 
  • 解决:在setup.py的setup-options中,dll_excludes下添加 'libopenblas.JKAMQ5EVHIVCPXP2XZJB2RQPIN47S32M.gfortran-win32.dll' ,排除这个dll文件

至此,已经可以打包完成,但打包后的exe无法运行。

问题4:

  • 现象:运行exe时弹出命令行窗口报错,之后在log中发现报错原因: ImportError: No module named mpl_toolkits. 
  • 尝试:中间尝试过在setup.py的setup-options中添加"includes"或"packages"指令,打包时就指定必须导入这个模块。这样的结果就是,打包过程中就出现上述报错,无法完成打包。下文“引申”中的两种方法也尝试过了,都无法解决问题。
  • 解决:仔细查看程序,发现其实不需要用到mpl_toolkits包,于是注释掉mpl_toolkits的导入。
  • 引申:搜索发现这种问题还是比较普遍的,主要的解决方式有两种,以后再出现这个错误时可以尝试这些解决方法(这次的问题这两个方法都无法解决):
    1. 认为原因在于py2exe无法识别运行时的动态导入,解决办法是在文件头就import相关模块(也有人建议,在这个办法的基础上,import部分结束之后,显式地调用一次这个模块,比如xxxx.__version__)
      • 【原地址:https://bytes.com/topic/python/answers/168576-help-py2exe-error-no-module-named-decimal】
    2. 认为原因在于py2exe无法识别egg文件。他的解决办法是: 我发现python的Lib/site-packages下安装的是egg文件,beautifulsoup4-4.4.0-py2.7.egg。用winrar将其解压,把bs4目录直接放到Lib/site-packages下,再打包并执行,一切正常。问题解决。 
      • 【原地址:https://www.cnblogs.com/simplestupid/p/4716658.html】

问题5:

  • 现象:RuntimeError: Could not find the matplotlib data files.
  • 原因:matplotlib运行时缺失一些必要的文件。
  • 解决:在setup.py的setup-options-includes中添加
  • "matplotlib.backends",
    "matplotlib.figure",
    "matplotlib.backends.backend_tkagg"

 

在setup.py的setup中添加

  • data_files = [(r'mpl-data', glob.glob(r'C:\Python27\Lib\site-packages\matplotlib\mpl-data\*.*')),
                  (r'mpl-data', [r'C:\Python27\Lib\site-packages\matplotlib\mpl-data\matplotlibrc']),
                  (r'mpl-data\images', glob.glob(r'C:\Python27\Lib\site-packages\matplotlib\mpl-data\images\*.*')),
                  (r'mpl-data\fonts', glob.glob(r'C:\Python27\Lib\site-packages\matplotlib\mpl-data\fonts\*.*'))]

问题6:

  • 现象:OMP: warning #178:Function GetModuleHandleEx failed:   OMP: System error #126: 找不到模块
  • 解决:在setup.py的setup-options中,取消 "bundle_files":1,不再将所有文件打包到一个exe中。
  • 引申:这个问题出现于用py2exe打包、含numpy包,且把所有文件打包到一个exe中的时候。值得参考的解决方法是: 在setup.py的setup-options中excludes("scipy"和)"numpy",并将它们的整个包文件夹复制到dist目录中,并将该目录添加到python main.py顶部的系统路径中 。
    • 【原地址(关于此报错的一些讨论):https://stackoverflow.com/questions/22412984/omp-warning-when-numpy-1-8-0-is-packaged-with-py2exe】

 附:最终的setup.py

 1 # -*- coding: utf-8 -*-
 2 from distutils.core import setup
 3 import py2exe
 4 import glob
 5 import sys
 6 sys.setrecursionlimit(10000000)
 7 
 8 # 在命令行下运行  python  setup.py  py2exe 
 9 
10 setup(
11     options={
12        "py2exe":{
13             "includes":["sip",
14                         "matplotlib.backends",
15                         "matplotlib.figure",
16                         "matplotlib.backends.backend_tkagg"
17                         ],
18             "dll_excludes":["MSVCP90.dll", 'libopenblas.JKAMQ5EVHIVCPXP2XZJB2RQPIN47S32M.gfortran-win32.dll'],
19             "compressed":1, 
20             "optimize":2, 
21             # "bundle_files":1
22         }
23     },
24     version = "0.1.0", 
25     description = "PID Debug",
26     name = "PID",
27     zipfile=None,
28     data_files = [(r'mpl-data', glob.glob(r'C:\Python27\Lib\site-packages\matplotlib\mpl-data\*.*')),
29                   (r'mpl-data', [r'C:\Python27\Lib\site-packages\matplotlib\mpl-data\matplotlibrc']),
30                   (r'mpl-data\images', glob.glob(r'C:\Python27\Lib\site-packages\matplotlib\mpl-data\images\*.*')),
31                   (r'mpl-data\fonts', glob.glob(r'C:\Python27\Lib\site-packages\matplotlib\mpl-data\fonts\*.*'))],
32     windows=[{"script":'main.py',
33                      "icon_resources":[(1, "3.ico")]
34                     }
35                 ] 
36 )
setup.py

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
Python3代码打包教程(用py2exe把你的代码变成exe)

先说成功经历:1、打包Python3.3+PyQt5程序2、打包普通程序在他人电脑上运行 再说说打包工具,基本上现在在网上看到就三种,pyinstaller、cxfreeze、py2exe pyinstaller:没用过不予评论 cxfr...

dcx013
2018/11/13
284
0
打包python文件,让文件程序化

通过对源文件打包,Python程序可以在没有安装 Python的环境中运行,也可以作为一个独立文件方便传递和管理。 现在网上主流的打包方式有两种py2exe或者pyinstaller两款多平台的Python程序打包...

osc_tc6nsv9u
2018/06/10
6
0
Python制作EXE可执行文件

(一)将python程序打包成可执行文件的方式 py2exe:需要setup.py配置文件,配置丰富 pyinstaller:无需任何配置和参数快速打包,简单易用 cxFreeze:听说支持python3,除此之外一无是处 py...

cwalet
2015/01/07
412
0
python打包成为exe文件

pyinstaller 库的使用 PyInstaller是一个十分有用的第三方库,它能够在Windows、Linux、Mac OS X 等操作系统下将 Python 源文件打包,通过对源文件打包,Python 程序可以在没有安装 Python 的...

osc_o5wlp6ft
2018/07/17
10
0
python程序打包,来源于知乎(已验证)

百度经验方法:https://jingyan.baidu.com/article/22a299b5ec76869e19376ad9.html pandas导包问题解决方案: 修改原有的打包代码为: 1 -F 指只生成一个exe文件,不生成其他dll文件 -w 不弹...

osc_96xykppu
2018/06/24
5
0

没有更多内容

加载失败,请刷新页面

加载更多

macz技巧分享—macOS高端使用技巧

Macos 的占有量不如 Windows,两者之间当操作方式也有很大的不同,当很多人熱悉 Windows 的操作之后,再接触 macos,觉得难上手,其实是习惯问题。如果你学习一些技巧,会觉得 macos 其实也不...

mac小叮当
47分钟前
11
0
手把手教你如何用黑白显示器显示彩色!

来源:大数据文摘 本文约1000字,建议阅读6分钟。 本文为你介绍如何通过黑白显示器上也能显示出彩色。 原来在黑白显示器上也能显示出彩色啊!通过在监视器上覆盖拜耳滤色镜,并拼接彩色图像,...

osc_jklrr90y
47分钟前
18
0
key-value结构排序:给定一个字符串,统计每个字符出现频率,先按value降序,再按key升序

对于key-value结构的排序 第一种:lambda表达式 第二种:函数 第三种:类对()的重载,仿函数形式 #include <iostream>#include <vector>#include <unordered_map>#include <string>#in......

osc_gwtkg2dc
48分钟前
0
0
BlockChain:2020年7月10日世界人工智能大会WAIC《链智未来 赋能产业区块链主题论坛——2020全球区块链创新50强》

BlockChain:2020年7月10日世界人工智能大会WAIC《链智未来 赋能产业区块链主题论坛——2020全球区块链创新50强》 目录 世界人工智能大会WAIC《链智未来 赋能产业区块链主题论坛——2020全球...

osc_vew1u0h0
49分钟前
0
0
BlockChain:2020年7月10日世界人工智能大会WAIC《链智未来 赋能产业区块链主题论坛》(三)

BlockChain:2020年7月10日世界人工智能大会WAIC《链智未来 赋能产业区块链主题论坛》(三) 目录 2020年7月10日世界人工智能大会WAIC《链智未来 赋能产业区块链主题论坛》 演讲嘉宾 演讲内容 ...

osc_8o71811p
50分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部