Python Pyinstaller打包含pandas库的py文件遇到的坑
今天的主角依然是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”方法:
Python Pyinstaller打包含pandas库的py文件遇到的坑的更多相关文章
- 用 pyinstaller 打包含xpinyin 库的Python程序
在文章用 pyinstaller 打包含有 pinyin 库的程序中,给出了如何使用pyinstaller 打包含xpinyin 库的Python程序的方法,能生成可运行的exe文件.本文将会给出 ...
- 【Python学习笔记】Pandas库之DataFrame
1 简介 DataFrame是Python中Pandas库中的一种数据结构,它类似excel,是一种二维表. 或许说它可能有点像matlab的矩阵,但是matlab的矩阵只能放数值型值(当然matla ...
- 【Python】将python3.6软件的py文件打包成exe程序
下载pyinstaller pyinstaller 改变图标 pyinstaller -F --icon=my.ico xxx.py 采用命令行操作的办法 在cmd命令行中,输入代码: 首先,前往Py ...
- [Python]项目打包:5步将py文件打包成exe文件 简介
1.下载pyinstaller并解压(可以去官网下载最新版): http://nchc.dl.sourceforge.net/project/pyinstaller/2.0/pyinstaller-2 ...
- [Python]项目打包:5步将py文件打包成exe文件(转)
1.下载pyinstaller并解压(可以去官网下载最新版): http://nchc.dl.sourceforge.net/project/pyinstaller/2.0/pyinstaller-2 ...
- java调用含第三方库的py文件
这是一个心酸的历程. py文件如下: 这里调用出现的问题主要是第三方包的问题,因为你的py文件里可能含有很多三方库文件,jython的jar包里可能不含有这个,所以这时需要你找到你已有三方库文件的ex ...
- RobotFramework中加载自定义python包中的library(一个py文件中有多个类)
结构如下: appsdk\ appsdk.py(这里面有多个类,包括appsdk,appsdksync等类) __init__.py ... ① 有个appsdk的文件夹(符合python包的定义) ...
- Python的交互模式和直接运行.py文件有什么区别
使用文本编辑器 - 廖雪峰的官方网站 https://www.liaoxuefeng.com/wiki/1016959663602400/1017024645952992 直接输入python进入交互 ...
- Python NLTK——代码重用,F5运行py文件cmd闪退,invalid syntax
打开IDLE,对代码进行保存(Ctrl+S)后,代码都是可以运行的. 但是打开文件就会弹出cmd并闪退,截了好几次图发现报的是Invalid syntax的错. 后来发现应该在IDLE中新建一个fil ...
随机推荐
- Asp.Net任务Task和线程Thread
Task是.NET4.0加入的,跟线程池ThreadPool的功能类似,用Task开启新任务时,会从线程池中调用线程,而Thread每次实例化都会创建一个新的线程.任务(Task)是架构在线程之上的, ...
- git 创建tag , 查看tag , 删除tag
简介 用git了很久了,也喜欢这个版本控制工具,今天来分享下,怎么用命令创建tag,查看tag,删除tag和把本地tag推到远程git服务器上 C:\Users\\WandaPuHuiProject ...
- 【C#】读取Excel中嵌套的Json对象,Json带斜杠的问题(其一)
策划填Excel表时,约定对于复杂类型的数据采用Json的格式填写.如下图,D列的内容是Json数据. 单元格中的Json如下. { "name": "BeJson2&q ...
- mysql密码的坑
一段时间没用本机的mysql,忘了root密码,从网上找的修改方法用起来大多都有问题.mysql版本8.0.12. 网上大多数思路:修改msql启动方式为带--skip-grant-tables参数: ...
- C# 在while循环中new的对象
一: 问:那每次循环都会new一个A?那内存不是会满吗?还是说要把这个初始化对象的动作放到循环外面的写法会比较好? while(true) { A a = new A(); ... sleep(100 ...
- xxl-job安装教程
xxl-job是一个开源的分布式调度框架,其他类似的框架还有airflow,oozie等等,需要进行对比 https://github.com/xuxueli/xxl-job 1.首先git clon ...
- MySQL 5.7.14安装说明,解决服务无法启动
http://jingyan.baidu.com/article/f54ae2fc0affca1e92b84999.html http://www.myexception.cn/mysql/51431 ...
- vue双向绑定的时候把遍历的数组转为了字符串,并且再转回去数组进行绑定
我的问题大家可能不太懂,我详细再解释一下,就是我通过遍历一个大的数组,多层遍历之后,最后的值还是一个小的数组,形如: aaa:[ { bbb1:[ "111","&quo ...
- [Cassandra] Mutation of <x> bytes is too large for the maxiumum size of <y>
[Cassandra] Mutation of bytes is too large for the maxiumum size of Q: WARN [SharedPool-Worker-4] 20 ...
- [原]Jenkins(十六) jenkins再出发之jenkins+robot+blue ocean+svn
jenkins version: 部署省略..(如有需要请查看本博客jenkins系列的文档) 新的jenkins需要先填写administratorpassword (如下图)找到下面红色的路径打开 ...