Python脚本导出为exe程序

环境: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工具包里面的lddobjdump命令。

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 Files\Python3\Scripts
Installing easy_install.exe script to C:\Program Files\Python3\Scripts
Installing easy_install-3.6-script.py script to C:\Program Files\Python3\Scripts
Installing easy_install-3.6.exe script to C:\Program Files\Python3\Scripts
Using c:\program files\python3\lib\site-packages
Finished processing dependencies for PyInstaller==3.4
---------------------------------------------------------------------------------------------------------------------
 
5、通过 pip show pyinstaller查看详细信息进一步确认安装情况

---------------------------------------------------------------------------------------------------------------------

PS C:\Windows\system32> 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 files\python3\lib\site-packages\pyinstaller-3.4-py3.6.egg
Requires: setuptools, pefile, macholib, altgraph, pywin32-ctypes
Required-by:
---------------------------------------------------------------------------------------------------------------------
6、用命令“pip install pywin32”安装Pywin32,或者下载一个pywin32来安装,注意文件对应的Python版本。 https://pypi.org/project/pywin32/#files
安装命令 “pip install ./downloads/pywin32-224-cp37-cp37m-win_amd64.whl” 或参考:https://packaging.python.org/tutorials/installing-packages/
 
三、打包exe步骤:

三.开始打包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

在目录结构:“程序根目录\dist\main\” 下可以找到生成的main.exe。将其他依赖文件拷贝进入“程序根目录\dist\main\” 下,即可运行


项目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

posted @ 2019-04-14 00:01  FateTraveler  阅读(4269)  评论(0编辑  收藏  举报