今天的主角依然是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

Python Pyinstaller打包含pandas库的py文件遇到的坑的更多相关文章

  1. 用 pyinstaller 打包含xpinyin 库的Python程序

      在文章用 pyinstaller 打包含有 pinyin 库的程序中,给出了如何使用pyinstaller 打包含xpinyin 库的Python程序的方法,能生成可运行的exe文件.本文将会给出 ...

  2. 【Python学习笔记】Pandas库之DataFrame

    1 简介 DataFrame是Python中Pandas库中的一种数据结构,它类似excel,是一种二维表. 或许说它可能有点像matlab的矩阵,但是matlab的矩阵只能放数值型值(当然matla ...

  3. 【Python】将python3.6软件的py文件打包成exe程序

    下载pyinstaller pyinstaller 改变图标 pyinstaller -F --icon=my.ico xxx.py 采用命令行操作的办法 在cmd命令行中,输入代码: 首先,前往Py ...

  4. [Python]项目打包:5步将py文件打包成exe文件 简介

    1.下载pyinstaller并解压(可以去官网下载最新版): http://nchc.dl.sourceforge.net/project/pyinstaller/2.0/pyinstaller-2 ...

  5. [Python]项目打包:5步将py文件打包成exe文件(转)

    1.下载pyinstaller并解压(可以去官网下载最新版): http://nchc.dl.sourceforge.net/project/pyinstaller/2.0/pyinstaller-2 ...

  6. java调用含第三方库的py文件

    这是一个心酸的历程. py文件如下: 这里调用出现的问题主要是第三方包的问题,因为你的py文件里可能含有很多三方库文件,jython的jar包里可能不含有这个,所以这时需要你找到你已有三方库文件的ex ...

  7. RobotFramework中加载自定义python包中的library(一个py文件中有多个类)

    结构如下: appsdk\ appsdk.py(这里面有多个类,包括appsdk,appsdksync等类) __init__.py ... ① 有个appsdk的文件夹(符合python包的定义) ...

  8. Python的交互模式和直接运行.py文件有什么区别

    使用文本编辑器 - 廖雪峰的官方网站 https://www.liaoxuefeng.com/wiki/1016959663602400/1017024645952992 直接输入python进入交互 ...

  9. Python NLTK——代码重用,F5运行py文件cmd闪退,invalid syntax

    打开IDLE,对代码进行保存(Ctrl+S)后,代码都是可以运行的. 但是打开文件就会弹出cmd并闪退,截了好几次图发现报的是Invalid syntax的错. 后来发现应该在IDLE中新建一个fil ...

随机推荐

  1. aspx页面,取得Excel某列不同类型的数据为空

    红色部分需要加上, string connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source ...

  2. 使用DotfuscatorPro_4.9对软件dll库进行加密

    点击settings选项,Disable String Encryption改成NO,具体里面的设置如下图. 再点击Rename选项下的options,左边的选项勾上,再把Renaming Schem ...

  3. Linux常用指令笔记

    目标:统计当前目录下java文件的个数 指令:`ls -R ./ | grep .java$ | wc -l` 原理:`ls -R ./`列出当前文件夹下的所有FILE,包括目录以及文件;`grep ...

  4. re.S、 re.M

    re.S是代表.可以匹配\n以及“  re.M是多行   code import re a = '''asdfsafhellopass: 234455 worldafdsf ''' b = re.fi ...

  5. 使用 Postman 取得 Token 打另一隻 API

    使用 Postman 取得 Token 打另一隻 API Spring MVC token 统一校验和user 信息自动获取 使用token和SpringMVC来实现安全的RESTFul接口 spri ...

  6. 火车头采集器如何采集QQ群成员中的QQ号

    如何采集QQ群群员QQ号,采集QQ号,批量采集QQ号 众所周知,QQ群群员QQ号无法导出,即使会员也不可以,那我们只能通过三方工具来实现我们的要求,那今天我们讲讲如何通过火车采集器来采集QQ群群员QQ ...

  7. websocket Tomcat JSP Demo

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...

  8. 聊聊IOCP,聊聊异步编程

    *:first-child { margin-top: 0 !important; } .markdown-body>*:last-child { margin-bottom: 0 !impor ...

  9. Mysql推荐使用规范(转)

    一:基础规范 1.使用InnoDB存储引擎 支持事务.行级锁.并发性能更好.CPU及内存缓存页优化使得资源利用率更高 2.推荐使用utf8mb4字符集 无需转码,无乱码风险, 支持emoji表情以及部 ...

  10. [干货教程]仿网易云课堂微信小程序开发实战经验

    本篇文章想跟大家分享下:我们公司“湖北诚万兴科技”最近刚帮客户定制开发.目前已上线的“哎咆课堂”微信小程序的开发经验分享.首先大概介绍下这个小程序所涉及到的主要技术点:微信登录.微信支付.微信小程序F ...