zoukankan      html  css  js  c++  java
  • 打包成可执行文件

    简介

    把项目打包成exe文件,有几种方法:cx_Freeze     PyInstaller        py2exe

    这篇文章主要介绍关于PyInstaller的用法。

    优势:

    1.可以只是生成单独的可执行程序

    2.支持python版本2.3-2.7

    3.可以自定义图标

    4.支持在windows环境下打包成exe文件,在linux环境下打包成可执行文件

    一、安装

    pip install PyInstaller

    二、工作原理

    PyInstaller读取你写好的python脚本,它分析你的代码去发现你脚本执行的时候所需要的每一个其他模块和库,然后它收集所有这些文件的拷贝信息包括python解释器,然后和你的脚本一起放到单独的文件夹中,或者一个单独的可执行文件中。

    pyinstaller myscript.py  
    
    pyinstaller --onefile --windowed myscript.py     #windows系统单独的可执行文件

    你的脚本需要的其他模块和库被称为依赖包

    pyinstaller会找出你的脚本中所有import语句,它找出被导入的模块并根据import语句访问这些模块,直到完成脚本中所有用到的模块们

    Pyinstaller知道egg格式经常被用做python包,如果你的脚本从egg中import一个模块,pyinstaller添加egg并且把它的依赖包添加到需要的文件集合中。

    pyinstaller也知道关于python的主要包,包括GUI包wxpython,django等等。

    一些python脚本导入模块pyinstaller无法识别,例如__import__()方法,手动更改sys.path路径,如果你的脚本需要的文件pyinstaller无法识别,你必须帮助他:

    1.在pyinstaller命令行添加额外的文件

    2.在pyinstaller明航中添加额外的导入路径

    3.编辑用pyinstaller命令为你的脚本第一次运行时产生的myscript.spec文件,在这个文件中可以告诉pyinstaller关于代码模块

    4.写hook文件生成pyinstaller隐藏导入,如果为一个包创建一个hook,其他用户也可以会用

    如果程序依赖一部分数据文件,可以告诉pyinstaller把他们包括进来

    三、执行

    cmd进入到项目主目录下,进入main.py主程序所在目录下

    执行pyinstaller --clean --i favicon-cisco.ico -c --onefile collector.py会把所有本地python环境所用到的包和自己手写的库和包都给添加到exe中。

    之后会在dist目录下找到该exe文件,其他文件均可以删除掉了。

    以下为该命令的参数:

    -distpath=path_to_executable // 该参数指定生成的可执行文件存放的目录,也就是生成的exe文件所在的目录,如果不指定,就默认存放在你的C盘用户文档目录下,也就是Administrator目录下dist文件夹下。

    -workpath=path_to_work_files // 该参数指定编译中临时文件存放的目录,默认存放在Administrator目录 build文件夹下。

    -clean // 清理编译时临时文件,也就是build文件夹下的临时文件。

    -D(简写),-onedir(全称) // 创建一个目录包含exe执行文件,里面还有很多依赖的文件(默认的选项)。

    -F(简写),-onefile(全称) // 生成单独的exe文件,而不是文件夹。解释: 就是一个单独的exe执行程序。不带其他任何文件信息。

    -c(简写),-console,-nowindowed // 使用控制台,就是dos窗口的形式,无界面(默认)

    -w(简写),-windowed,-noconsole // 使用窗口,无控制台,如: 图形化窗口程序,如果不指定-w,运行的话就会带dos窗口,如果带的话,就只有和正常的软件打开方式一样。

    -i(简写),--icon=图标路径 // 如你的程序需要带好看的ico格式的图标,那么就带需要准备好图标,ico格式,然后加上该参数,指定图标路径。

    -p(简写),-path //一些你的程序所依赖的包,模块的路径,需要指定。

    -d(简写),-debug(全称) // 编译为debug模式,主要是获取运行中的日志信息,查看编译错误。

    -version-file=version_text_file // 该参数为exe文件添加版本信息,版本信息可以通过运行pyi-grab_version加上要获取版本信息的exe文件的路径来生成,生成后的版本信息文件可以按需求修改并作为--version-file的参数添加到 要生成的exe文件中去

    pyinstaller -h 来查看参数

    四、出错

    打包的时候有时候会报ImportError:No module named Queue

    解决方法: 打包的时候加上-F --hidden-import-queue  

    原因:不明

  • 相关阅读:
    这个 bug 让我更加理解 Spring 单例了
    SpringBoot
    codeblocks笔记
    https://docs.platformio.org/en/latest/boards/index.html
    外部存储的烧写
    嵌入式AI
    python的一些库
    语音芯片及解决方案
    神奇的调试值“DEADBEEF”
    【12月】+我与rt_thread的“江湖恩怨”
  • 原文地址:https://www.cnblogs.com/zz27zz/p/8072580.html
Copyright © 2011-2022 走看看