今天的主角依然是pyinstaller打包工具,为了让pyinstaller打包后exe文件不至过大,我们的py脚本文件引用库时尽可能只引用需要的部分,不要引用整个库,多使用“from *** import **,**”语句,如:

from openpyxl import load_workbook,Workbook
from openpyxl.styles import Border,Side,Alignment,Protection,Font,GradientFill,Color
from easygui import msgbox
from pandas import DataFrame,ExcelWriter,read_excel

  在打包py文件时还是会遇到其他问题:

1、64位windows python上打包的程序 或 不能在32位上运行,反之却可以。如果你的客户群都是32位windows,建议你的虚拟机vmware下开发环境使用32位windows以及32位的python开发环境,避免不必要的麻烦。

2、我们的很多涉及到科学计算的脚本文件都要借助pandas,Numpy这两个库:

  pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。

  用pyinstaller在打包含pandas库的py文件时依然会出现问题,有可能可以生成exe文件,但是程序无法正常执行,闪退:

参考答案::pyinstaller-and-pandas

我们先用正常方法打包一遍py文件,之后会自动生成.spec后缀的文件,我们需要用文本编辑器对spec文件进行更改,好让pyinstaller能正常引用到pandas库:

在spec文件内,定义一个方法来取得pandas文件路径:

def get_pandas_path():
import pandas
pandas_path = pandas.__path__[0]
return pandas_path

  还需要在a=Analysis代码段下添加以下代码:

dict_tree = Tree(get_pandas_path(), prefix='pandas', excludes=["*.pyc"])
a.datas += dict_tree
a.binaries = filter(lambda x: 'pandas' not in x[0], a.binaries)

  如,本人编写的一个简单的excel表格拆分工具“table_spliter_V0.91_sort.py”,其中运用了pandas的DataFrame类下的sort方法,对excel文件进行多条件排序,我们对spec文件进行更改后如下:

# -*- mode: python -*-

block_cipher = None

def get_pandas_path():
import pandas
pandas_path = pandas.__path__[0]
return pandas_path a = Analysis(['table_spliter_V0.91_sort.py'],
pathex=['D:\\'],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher) dict_tree = Tree(get_pandas_path(), prefix='pandas', excludes=["*.pyc"])
a.datas += dict_tree
a.binaries = filter(lambda x: 'pandas' not in x[0], a.binaries) pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
name='table_spliter_V0.91_sort',
debug=False,
strip=False,
upx=True,
runtime_tmpdir=None,
console=True , icon='photo.ico')

  再在PowerShell下用pyinstaller执行打包时,需要这样写:

pyinstaller table_spliter_V0.91_sort.spec --onefile

生成的exe文件可以正常执行,大功告成,不过生成的exe文件依然较大,有32Mb,下次希望能找到更好的方法压缩exe文件大小。

当然,后期会研究下这两种“py文件封装exe”方法:

py2exe

cx_Freeze

最新文章

  1. Android Monkey压力测试
  2. poj 3687(拓扑排序)
  3. css学习笔记 3
  4. Uva 699The Falling Leaves
  5. android:themes.xml
  6. 读书笔记:Ross:概率模型导论:方差和协方差
  7. [wordpress]wp-api-jwt-auth 尝试添加运行在多站点中 need change
  8. RMAN 备份详解
  9. ViewPage和ActionBar打造滑动视图
  10. JavaSE复习日记 : 方法的调用和方法的重载
  11. 云计算+SaaS+业务开发平台=JSAAS云平台
  12. ELK对Tomcat日志双管齐下-告警触发/Kibana日志展示
  13. [C++ Primer Plus] 第9章、内存模型和名称空间(二)课后习题
  14. linux 修改图片的尺寸
  15. kafka学习指南(总结版)
  16. unmappable character for US-ASCII
  17. Python - 3MySQL 数据库连接
  18. hexo修改Next主题的样式
  19. IdentityServer3零星笔记
  20. JavaScript流程控制及函数

热门文章

  1. sql查父节点小笔记
  2. C++ STL堆操作
  3. 离屏Canvas — 使用Web Worker提高你的Canvas运行速度
  4. 关于windows 下每次打开IE 8都弹出欢迎使用Internet Explorer 8 弹窗的关闭方法
  5. iOS WKWebView (NSURLProtocol)拦截js、css,图片资源
  6. word2vec:基本的安装及使用简介
  7. ZooKeeper注册中心安装详细步骤(单节点)
  8. 6.2 Pandora 实操 - 数据展示
  9. 22.2、react生命周期与react脚手架(二)
  10. 防止xss和sql注入:JS特殊字符过滤正则