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 ...
随机推荐
- SQL格式化插件—SQL Pretty Printer
在SQL Server中我们经常需要编写各种SQL脚本,例如存储过程和函数等,由于在编写过程中,经常会进行调整,格式很乱,可读性很差.对于有强迫症的人来说,看这样的代码非常痛苦,必须要手动对代码进行格 ...
- MySQL 加锁处理分析<转>
1 背景 1 1.1 MVCC:Snapshot Read vs Current Read 2 1.2 Cluster Index:聚簇索引 3 1.3 2P ...
- AI人工智能顶级实战工程师 课程大纲
课程名称 内容 阶段一.人工智能基础 — 高等数学必知必会 1.数据分析 "a. 常数eb. 导数c. 梯度d. Taylore. gini系数f. 信息熵与组合数 ...
- 消息中间件系列二:RabbitMQ入门(基本概念、RabbitMQ的安装和运行)
一.基本概念 1. AMQP AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议.支持不同语言和不同的产品 2. 生产者 ...
- name转json
^(\{)?(?<=\n)(.*)(\})?$ "$2":"", UserId UserOrderId ChargeAccount BuyNum Good ...
- koa文档参考
koa文档 简介 koa 是由 Express 原班人马打造的,致力于成为一个更小.更富有表现力.更健壮的 Web 框架.使用 koa 编写 web 应用,通过组合不同的 generator,可以免除 ...
- centos7 nginx Failed to read PID from file /run/nginx.pid: Invalid argument 解决方法
笔者在centos7上,配置nginx代理服务后, systemctl status nginx.service 提示错误 Failed to read PID from file /run/ngin ...
- KafkaManager对offset的两种管理方式
OffsetManager主要提供对offset的保存和读取,每个broker都有一个OffsetManager实例,kafka管理topic的偏移量有2种方式: 1.ZookeeperOffsetM ...
- js this指向理解
1.如果调用this的函数上级有多个对象,this只会指向上一级对象 下面实例fn函数调用this时,this指向b对象,如果b里面有a属性就输出值: 如果没有就是undefined 在来看下下面的实 ...
- Apache kylin进阶——元数据篇
一.Apache kylin元数据的存储 Apache kylin的元数据包括 立方体描述(cube description),立方体实例(cube instances)项目(project).作业( ...