zoukankan      html  css  js  c++  java
  • 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 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
    ---------------------------------------------------------------------------------------------------------------------
     
    5、通过 pip show pyinstaller查看详细信息进一步确认安装情况

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

    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:
    ---------------------------------------------------------------------------------------------------------------------
    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

    在目录结构:“程序根目录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

  • 相关阅读:
    Algorithm Gossip (48) 上三角、下三角、对称矩阵
    .Algorithm Gossip (47) 多维矩阵转一维矩阵
    Algorithm Gossip (46) 稀疏矩阵存储
    Algorithm Gossip (45) 费氏搜寻法
    Algorithm Gossip (44) 插补搜寻法
    Algorithm Gossip (43) 二分搜寻法
    Algorithm Gossip (42) 循序搜寻法(使用卫兵)
    Algorithm Gossip (41) 基数排序法
    Algorithm Gossip (40) 合并排序法
    AlgorithmGossip (39) 快速排序法 ( 三 )
  • 原文地址:https://www.cnblogs.com/SunnyStudy/p/10703670.html
Copyright © 2011-2022 走看看