Python打包方法Pyinstaller的使用


Posted in Python onOctober 09, 2018

Python是一个脚本语言,被解释器解释执行。它的发布方式:

  • .py文件:对于开源项目或者源码没那么重要的,直接提供源码,需要使用者自行安装Python并且安装依赖的各种库。(Python官方的各种安装包就是这样做的)
  • .pyc文件:有些公司或个人因为机密或者各种原因,不愿意源码被运行者看到,可以使用pyc文件发布,pyc文件是Python解释器可以识别的二进制码,故发布后也是跨平台的,需要使用者安装相应版本的Python和依赖库。
  • 可执行文件:对于非码农用户或者一些小白用户,你让他装个Python同时还要折腾一堆依赖库,那简直是个灾难。对于此类用户,最简单的方式就是提供一个可执行文件,只需要把用法告诉Ta即可。比较麻烦的是需要针对不同平台需要打包不同的可执行文件(Windows,Linux,Mac,...)。

本文主要就是介绍最后一种方式,.py和.pyc都比较简单,Python本身就可以搞定。将Python脚本打包成可执行文件有多种方式,本文重点介绍PyInstaller,其它仅作比较和参考。

Python版本:Python3.5.2或本地下载地址

一、安装Pyinstaller

1、安装pywin32

下载安装文件:查找到跟自己适用的python版本及window系统版本匹配的pywin32,下载后安装

使用pip命令安装:pip install pywin32

2、安装Pyinstaller

下载安装文件安装:官网

使用pip命令安装:pip install PyInstaller

二、使用Pyinstaller

1、使用下载安装的方式安装的Pyinstaller打包方式

将需要打包的文件放在解压得到的Pyinstaller文件夹中,打开cmd窗口,把路径切换到当前路径打开命令提示行,输入以下内容(最后的是文件名):

python pyinstaller.py -F myfile.py

2、使用pip方式安装的Pyinstaller打包方式

打开cmd窗口,把路径切换到文件所在路径(文件随便放在哪里都行)打开命令提示行,输入以下内容(最后的是文件名):

pyinstaller -F myfile.py

3、输入参数的含义

-F 表示生成单个可执行文件

-w 表示去掉控制台窗口,这在GUI界面时非常有用。不过如果是命令行程序的话那就把这个选项删除吧!

-p 表示你自己自定义需要加载的类路径,一般情况下用不到

-i 表示可执行文件的图标

三、注意事项

文件中使用了第三方库的打包方式

在打包之前务必找到第三方库的包,把包复制到到跟myfile.py同目录下,然后再使用以上2种方式打包,否则会打包失败或者即使打包成功,程序也会闪退。

下面演示一下使用了第三方库的打包方式:

找到第三方库的包,如使用了requests,可以使用查找的方式,找到这个包在哪里,然后把它复制到myfile.py同目录下

Python打包方法Pyinstaller的使用

把包文件复制到myfile.py目录下

Python打包方法Pyinstaller的使用

给程序换图标的方法

输入命令中添加一个-i tubiao.ico(图标的相对路径)。如图:

Python打包方法Pyinstaller的使用

四、exe文件生成

如果程序打包过程没有报错,则会生成3个文件夹(有时候是2个),其中名为dist的文件夹中会有一个myfile.exe文件,运行一下,如果没有问题就打包成功,可以把这个exe文件单独拿出去用,其他的生成的文件夹可以删掉了。

Python打包方法Pyinstaller的使用

其他打包工具

distribute

功能类似setuptools. 安装后会有easy_install. 支持Python2和Python3.
官方: https://pypi.python.org/pypi/distribute/0.7.3
已经于2013年7月5日的0.7.3版后停止开发。

distutils2

功能类似setuptools.
官方:https://pypi.python.org/pypi/Distutils2/1.0a4
已经于2012年3月13日的1.0a4版后开始停止开发。
PyPI上的原文: keep using setuptools and pip for now, don't use distutils2.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中numpy包使用教程之数组和相关操作详解
Jul 30 Python
Django 使用Ajax进行前后台交互的示例讲解
May 28 Python
pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换实例
Aug 02 Python
python添加菜单图文讲解
Jun 04 Python
解决django中ModelForm多表单组合的问题
Jul 18 Python
使用TensorFlow实现简单线性回归模型
Jul 19 Python
python自定义时钟类、定时任务类
Feb 22 Python
Python3.6实现根据电影名称(支持电视剧名称),获取下载链接的方法
Aug 26 Python
wxpython布局的实现方法
Nov 01 Python
通过实例解析python创建进程常用方法
Jun 19 Python
python实现简单的五子棋游戏
Sep 01 Python
PyCharm配置KBEngine快速处理代码提示冲突、配置命令问题
Apr 03 Python
Python如何发布程序的详细教程
Oct 09 #Python
python如何发布自已pip项目的方法步骤
Oct 09 #Python
Django csrf 验证问题的实现
Oct 09 #Python
Python正则表达式指南 推荐
Oct 09 #Python
详解Django的CSRF认证实现
Oct 09 #Python
浅析python中的迭代与迭代对象
Oct 08 #Python
实例讲解python中的序列化知识点
Oct 08 #Python
You might like
玩家交还《星际争霸》原始码光盘 暴雪报以厚礼
2017/05/05 星际争霸
全国FM电台频率大全 - 9 上海市
2020/03/11 无线电
新版PHP极大的增强功能和性能
2006/10/09 PHP
浅谈javascript的数据类型检测
2010/07/10 Javascript
JQuery each()嵌套使用小结
2014/04/18 Javascript
jquery和css3实现的炫酷时尚的菜单导航
2014/09/01 Javascript
JavaScript函数定义的常见注意事项小结
2014/09/16 Javascript
JS实现自定义简单网页软键盘效果代码
2015/11/05 Javascript
JavaScript导航脚本判断当前导航
2016/07/12 Javascript
JS查找字符串中出现次数最多的字符
2016/09/05 Javascript
js通过keyCode值判断单击键盘上某个键,然后触发指定的事件方法
2017/02/19 Javascript
JQueryMiniUI按照时间进行查询的实现方法
2017/06/07 jQuery
node.js多个异步过程中判断执行是否完成的解决方案
2017/12/10 Javascript
解决Vue中mounted钩子函数获取节点高度出错问题
2018/05/18 Javascript
vue.js多页面开发环境搭建过程
2019/04/24 Javascript
Vue项目结合Vue-layer实现弹框式编辑功能(实例代码)
2020/03/11 Javascript
JavaScript隐式类型转换代码实例
2020/05/29 Javascript
vue实现虚拟列表功能的代码
2020/07/28 Javascript
在antd中setFieldsValue和defaultVal的用法
2020/10/29 Javascript
Python中字符串对齐方法介绍
2015/05/21 Python
浅谈python新手中常见的疑惑及解答
2016/06/14 Python
基于Python和Scikit-Learn的机器学习探索
2017/10/16 Python
Python实现GUI学生信息管理系统
2020/04/05 Python
Selenium 模拟浏览器动态加载页面的实现方法
2018/05/16 Python
Pytorch在dataloader类中设置shuffle的随机数种子方式
2020/01/14 Python
Python3实现mysql连接和数据框的形成(实例代码)
2020/01/17 Python
python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例
2020/02/25 Python
Python random库使用方法及异常处理方案
2020/03/02 Python
Pytorch数据拼接与拆分操作实现图解
2020/04/30 Python
在pycharm中文件取消用 pytest模式打开的操作
2020/09/01 Python
Python3中FuzzyWuzzy库实例用法
2020/11/18 Python
CSS3弹性盒模型开发笔记(二)
2016/04/26 HTML / CSS
县委常委班子对照检查材料思想汇报
2014/09/28 职场文书
导游词之清晏园
2019/11/22 职场文书
CSS Transition通过改变Height实现展开收起元素
2021/08/07 HTML / CSS
《金肉人》米特&《航海王》阿鹤声优松岛实因胰脏癌去世 享寿81岁
2022/04/13 日漫