Python|Pyinstaller打包Python程序的过程详解

01

Pyinstaller是什么

PyInstaller is a program that freezes (packages) Python programs into stand-alone executables, under Windows, Linux, Mac OS X, FreeBSD, Solaris and AIX.

Pyinstaller相比于同类的优势:

1)支持Python2.7, Python 3.3-3.6

2)生成的可执行文件字节数更小

3)对第三方包的支持非常好,只需要将它们放到python的解释器对应的文件夹中,Pyinstaller便可自动打包到最终生成的可执行文件中。

As an example, libraries like PyQt, Django or matplotlib are fully supported, without having to handle plugins or external data files manually. Check our compatibility list of Supported Packages for details.

02

安装Pyinstaller

Install PyInstaller from PyPI:

pip install pyinstaller

以上是官网给出的安装方式,pip安装会更简捷,因为它会自动安装pyinstaller的第三方库地依赖。

但, 小编在安装时,不是走的这种方式,而是下载Pyinstaller的源文件,http://www.pyinstaller.org/downloads.html,命令行界面中cd到Pyinstaller的目录下,执行

python seteup.py install

应用这种方式的需要自行先下载安装pywin32库,需要注意它的版本一定要与python的版本一致,两方面:

1)python版本,

2)python是32位还是64位

如果pywin32的版本与python不一致,不会安装成功。

总结,安装Pyinstaller推荐使用pip安装方法。

03

Pyinstaller打包

打包最重要的一步,也是第一步,梳理程序用到的第三方库有哪些,比如用到了:

numpy,

pandas,

matplotlib

xlrd

一定要确保程序用到的python解释器所在的物理安装路径下,在site-packages文件夹下有了以上这些库,并且要与自己的程序用到的一致。

如果做不好,打包会提示找不到第三方库的引用等。

第二步,将自己的程序代码放到Pyinstaller的源文件根目录下。

第三步,执行以下命令:

pyinstaller yourprogram.py

说明:如果想打包不带命令窗口,前面加参数:

pyinstaller -w -F yourprogram.py

-w: 去掉命令窗口

-F: 打包成一个可执行文件

04

预置的文件如何发布

程序代码中往往使用一些提前预置的文件,比如窗口图片,配置文件等,那么如何将这些文件发布出来呢。

小编使用的方法是将这些文件copy到最终生成的可执行文件目录下,按照自己想要的文件系统组织。

注意这种方法系统中不能出现绝对路径。

05

其他问题

打包过程中,如果出现问题,需要首先知道问题是什么,因此,建议使用命令中不要带有-w,这样可以看到命令窗口中的错误,等完全测试好了后,再添加-w

遇到的一个问题:

解决方法:

在Python解释器文件目录 Python36-32\Lib\site-packages\PyInstaller-3.3+4e8e0ff7a-py3.6.egg\PyInstaller\hooks下添加一个hook-pandas.py文件:

hiddenimports=[ #all your previous hidden imports 'pandas', 'pandas._libs.tslibs.timedeltas' ]

以上,便是Pyinstaller的完整打包过程,如有问题或更好的解决方法、建议,请留言!

原文发布于微信公众号 - 算法channel(alg-channel)

原文发表时间:2018-03-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏技术文章

资深专家深度剖析Kubernetes API Server第1章(共3章)

欢迎来到深入学习Kubernetes API Server的系列文章,在本系列文章中我们将深入的探究Kubernetes API Server的相关实现。如...

15920
来自专栏蓝天

Linux+Apache+Mysql+PHP典型配置

调试环境:Redhat9.0 Apache1.3.29 Mysql3.23.58 PHP4.3.4

12730
来自专栏菩提树下的杨过

IIS7的应用程序池

最近将原来的系统迁移到IIS7.5上了,发现AspNetUpload只能运行在"程序程序池"的"经典"模式之下,采用"集成"模式后,AspnetUpload....

261100
来自专栏Linux运维学习之路

Nginx服务编译安装、日志功能、状态模块及访问认证模式实操

系统环境   [root@web ~]# cat /etc/redhat-release   CentOS release 6.9 (Final)   [ro...

29060
来自专栏惨绿少年

企业级LNMP架构搭建实例(基于Centos6.x)

1.1 部署LNMP架构说明 1.1.1 LNMP架构内容   01.部署linux系统   02.部署nginx网站服务   03.部署mysql数据库服务 ...

28200
来自专栏运维小白

Linux基础(day40)

11.6 MariaDB安装 安装mariadb cd /usr/local/src wget https://downloads.mariadb.com/Ma...

32160
来自专栏L宝宝聊IT

部署KVM虚拟化平台

19830
来自专栏Rainbond开源「容器云平台」

好雨云帮一周问答集锦(11.28-12.04)

15750
来自专栏逸鹏说道

jenkins配置.net mvc网站

jenkins配置.net mvc网站 上一篇使用jenkins配置.net mvc网站进行持续集成一只是简单介绍了jenkins构建站点到本地服务器,这一篇,...

40660
来自专栏静下来

windows 2003 iis服务器设置301重定向

最近在给公司之前的网站做调整,我发现网站没有301重定向。 系统是Windows Server 2003的,IIS6.0服务器。 第一步:首先得有2个站点 ...

33950

扫码关注云+社区

领取腾讯云代金券