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

  • 相关阅读:
    oracle基本语句
    SVM入门(六)线性分类器的求解——问题的转化,直观角度
    深入浅出KMeans算法
    SVM入门(三)线性分类器Part 2
    SVM入门(一)SVM的八股简介
    Hadoop源代码分析(五)
    用HTML5 Audio API开发游戏音乐
    Hadoop源代码分析(六)
    SVM入门(四)线性分类器的求解——问题的描述Part1
    SVM入门(二)线性分类器Part 1
  • 原文地址:https://www.cnblogs.com/SunnyStudy/p/10703670.html
Copyright © 2011-2022 走看看