环境:Pycharm2019.1 + Win10 + Python3.7.3
一.pyinstaller简介
Python是一个脚本语言,被解释器解释执行。它的发布方式:
-
.py文件:对于开源项目或者源码没那么重要的,直接提供源码,需要使用者自行安装Python并且安装依赖的各种库。(Python官方的各种安装包就是这样做的)
-
.pyc文件:有些公司或个人因为机密或者各种原因,不愿意源码被运行者看到,可以使用pyc文件发布,pyc文件是Python解释器可以识别的二进制码,故发布后也是跨平台的,需要使用者安装相应版本的Python和依赖库。
-
可执行文件:对于非码农用户或者一些小白用户,你让他装个Python同时还要折腾一堆依赖库,那简直是个灾难。对于此类用户,最简单的方式就是提供一个可执行文件,只需要把用法告诉Ta即可。比较麻烦的是需要针对不同平台需要打包不同的可执行文件(Windows,Linux,Mac,...)。
本文主要就是介绍最后一种方式,.py和.pyc都比较简单,Python本身就可以搞定。将Python脚本打包成可执行文件有多种方式,本文重点介绍PyInstaller,
PyInstaller的原理简介
PyInstaller其实就是把python解析器和你自己的脚本打包成一个可执行的文件,和编译成真正的机器码完全是两回事,所以千万不要指望成打包成一个可执行文件会提高运行效率,相反可能会降低运行效率,好处就是在运行者的机器上不用安装python和你的脚本依赖的库。在Linux操作系统下,它主要用的binutil
工具包里面的ldd
和objdump
命令。
PyInstaller输入你指定的的脚本,首先分析脚本所依赖的其他脚本,然后去查找,复制,把所有相关的脚本收集起来,包括Python解析器,然后把这些文件放在一个目录下,或者打包进一个可执行文件里面。
可以直接发布输出的整个文件夹里面的文件,或者生成的可执行文件。你只需要告诉用户,你的应用App是自我包含的,不需要安装其他包,或某个版本的Python,就可以直接运行了。
需要注意的是,PyInstaller打包的执行文件,只能在和打包机器系统同样的环境下。也就是说,不具备可移植性,若需要在不同系统上运行,就必须针对该平台进行打包。
pyinstaller将Python脚本打包成可执行程序,使在没有Python环境的机器上运行
最新版是pyinstaller 3.1.1。支持python2.7和python3.3+。
可运行在Windows,Mac和Linux操作系统下。
但它不是跨编译的,也就是说在Windows下用PyInstaller生成的exe只能运行在Windows下,在Linux下生成的只能运行在Linux下。
二.Pyinstaller在windows下的安装
第一种方法是使用命令安装Pyinstaller,命令pip install Pyinstaller,(大写的P)
在Windows下,Pyinstaller需要PyWin32的支持。当用pip安装Pyinstaller时未找到PyWin32,会自动安装pypiwin32。
如果第一种方法安装失败,我们就需要找到第二种方法将工具下载到本地进行安装:
1、先下载 pyinstaller的安装文件,下载地址:http://www.pyinstaller.org/downloads.html
2、我安装的是3.4版本,直接下载:pyinstaller 3.4
3、下载到本地后,直接解压,然后通过管理员模式打开命令窗口,用 cd 命令切换至 pyinstaller的解压路径,然后运行 python setup.py install
4、安装的过程会花点时间,就耐心等待吧,出现下面的提示表明安装成功
---------------------------------------------------------------------------------------------------------------------
Best match: setuptools
40.8
.
0
Adding setuptools
40.8
.
0
to easy
-
install.pth
file
Installing easy_install
-
script.py script to C:Program FilesPython3Scripts
Installing easy_install.exe script to C:Program FilesPython3Scripts
Installing easy_install
-
3.6
-
script.py script to C:Program FilesPython3Scripts
Installing easy_install
-
3.6
.exe script to C:Program FilesPython3Scripts
Using c:program filespython3libsite
-
packages
Finished processing dependencies
for
PyInstaller
=
=
3.4
---------------------------------------------------------------------------------------------------------------------
PS C:Windowssystem32> pip show pyinstaller
Name: pyinstaller
Version:
3.4
Summary: PyInstaller bundles a Python application
and
all
its dependencies into a single package.
Home
-
page: http:
/
/
www.pyinstaller.org
Author: Giovanni Bajo, Hartmut Goebel, David Vierra, David Cortesi, Martin Zibricky
Author
-
email: pyinstaller@googlegroups.com
License: GPL license with a special exception which allows to use PyInstaller to build
and
distribute non
-
free programs (including commercial ones)
Location: c:program filespython3libsite
-
packagespyinstaller
-
3.4
-
py3.
6.egg
Requires: setuptools, pefile, macholib, altgraph, pywin32
-
ctypes
Required
-
by:
三.开始打包PY文件为EXE文件
cmd(或Power shell)进入py程序项目目录,执行命令:pyinstaller -F -w --icon=xxx.ico main.py --noconsole。其中,-F表示生成单exe可执行文件,-w表示窗体程序,
--icon是设置exe的显示图标,'main.py'是程序的入口,--noconsole 表示不展示cmd窗口,反过来想看cmd窗口就改成--console。
编译:pyinstaller -F -w game.py (-F表示打包单个文件,-w是为了打开exe时候不弹出黑框)
设置exe的图标:pyinstaller -F -w -i bitbug_favicon.ico game.py (-i用来设置编译成exe文件的图标,后面跟.ico格式的图片文件)
一阵刷屏之后,终于打出成功的提示:
程序目录下多了几个文件夹:一个spec文件,build文件夹,一个dist文件夹,其中的dist文件夹内就是我们生成的exe应用程序:
打开目录dist我们会看到我们想要的EXE程序文件,双击运行它。是不是我们的程序呢?
至此我们的 “Python脚本导出为exe程序” 成功结束
四、Pyinstaller打包多个.py文件
一、多文件打包为单一文件时,即pyinstaller 命令中加入了-F,也可能会导致错误。尽量不要使用-F。
二、尽量把打包后的文件放在英文目录下。
多个.py文件打包命令格式如下:
pyinstaller [主文件] -p [其他文件1] -p [其他文件2] --hidden-import [自建模块1] --hidden-import [自建模块2]
三、使用pyinstaller打包的时候,仅打包.py文件,其余依赖项只需在打包完成后,拷入打包生成的根目录即可。
四、举例说明:
我的文件构成
其中VIPCracker.py是主程序入口文件,其他.py文件是自建模块,需要在主文件中使用,zh_CN.qm和JygoxigmJ.db文件是程序中需要用到的额外文件(将它们放在打包后生成的.exe文件的同一个目录下即可)
以上文图中结构为例,在根目录打开命令窗口并进入根目录下,输入命令:
pyinstaller -F -i crack.ico -w VIPCracker.py -p CholenSql.py -p ImgICon.py -p VIPGUI.py
--hidden-import CholenSql --hidden-import ImgICon --hidden-import VIPGUI
拓展知识:pyinstaller 中的-i crack.ico 可以设置生成.exe文件的图标。
多文件打包:
命令格式如下,下命令为一条命令,为方便显示做了分行处理:
pyinstaller [主文件] -p [其他文件1] -p [其他文件2]
--hidden-import [自建模块1]
--hidden-import [自建模块2]
# 以上为一整条命令
pyinstaller main.py -p mysql.py -p other.py --hidden-import mysql --hidden-import other
在目录结构:“程序根目录distmain” 下可以找到生成的main.exe。将其他依赖文件拷贝进入“程序根目录distmain” 下,即可运行
项目XXX举例,main和ico文件要放一起 -p 文件夹,因为项目下我创建了case、autodriver、data、page文件夹,文件夹里面放的*.py文件通过--hiddent-import指向,代码如下:
pyinstaller -F -i t.ico -w main.py -p case -p autodriver -p data -p page -p page --hidden-import workday.py --hidden-import auto_driver.py --hidden-import login.csv --hidden-import base_page.py --hiddent-import sub_page.py
注意:--hiddent-import是连在一起的,dist文件夹里面要把需要的问卷copy进来,然后整个dist文件夹就可以任意移动到其他位置,到时候运行*.exe文件就可以执行程序了
参考文献:
1、如何把Python脚本导出为exe程序: https://www.cnblogs.com/robinunix/p/8426832.html
2、Python编译成exe: https://blog.csdn.net/hxy199421/article/details/86609219
3、Python学习笔记(15)-Python代码转换为exe可执行程序详解:https://blog.csdn.net/woshisangsang/article/details/73230433
4、python文件封装成*.exe文件(单文件和多文件): https://www.cnblogs.com/jackzz/p/9431923.html
5、Pyinstaller打包多个.py文件: https://blog.csdn.net/CholenMine/article/details/80964272