zoukankan      html  css  js  c++  java
  • Python如何将py文件打包成exe

    安装pyinstaller

    打开cmd窗口,输入pip install pyinstaller,命令行输出successfully表示成功。

    生成exe文件

    一、单个py文件

    在py文件目录下,打开cmd窗口,输入pyinstall -F XXX.py,执行成功的话,会在当前目录生成一个dist文件夹,XXX.exe文件在此文件夹下。

    如果是图形窗口,不想要控制台出现的话,可以pyinstall -F XXX.py --noconsole

    添加版本信息

    安装好pyinstaller后,我们会得到两个辅助工具,pyi-grab_version和pyi-set_version。

    1. 使用pyi-grab_version创建版本信息模板文件,首先找到一个有版本信息的XXX.exe工具,在此目录下打开cmd窗口,输入pyi-grab_version XXX.exe,执行成功后,会在此目录下获得一个file_version_info.txt文件,这个就是我们要的文件版本信息模板文件。

    2. 有了模板文件后,我们需要修改里面的内容,换成我们自己想要的版本内容,最好用nopad++打开。

    3. 在打包时加入版本信息。

    方法一、还没有打包成exe的py文件

    pyinstaller -F --version--file file_version_info.txt XXX.py

    方法二、已经打包好的exe

    pyi-set_version file_version_info.txt XXX.exe

    二、多个py文件

    1、尽量将所有要执行的py文件放在一个大文件夹下(里面允许有多个文件夹)

    2、命令行输入pyi-makespec main.py 或者 pyi-makespec -F main.py(main.py为Python程序的入口py文件)。

      pyi-makespec main.py --> 打包之后会生成一个目录

      pyi-makespec -F main.py --> 打包之后只会生成一个exe

      选择一个命令即可。

    3、现在文件夹下生成了一个main.spec文件和两个文件夹

    4、编辑main.spec文件,找到a = Analysis(),先修改第一个参数,这里面的列表都必须是py文件

    a = Analysis(['pin.py'],
                 pathex=['F:\python_work\pytest\pin'],
                 binaries=[],
                 datas=[],
                 hiddenimports=[],
                 hookspath=[],
                 runtime_hooks=[],
                 excludes=[],
                 win_no_prefer_redirects=False,
                 win_private_assemblies=False,
                 cipher=block_cipher,
                 noarchive=False)
    pyz = PYZ(a.pure, a.zipped_data,
                 cipher=block_cipher)

    如果用到了其他的py文件,就在第一个列表里面加入相应py文件的路径,如果是同级目录下,直接写文件名,如果不在同一个文件下,写完整路径。

    a = Analysis(['pin.py', 'cursor_control.py'],
                 pathex=['F:\python_work\pytest\pin'],
                 binaries=[],
                 datas=[],
                 hiddenimports=[],
                 hookspath=[],
                 runtime_hooks=[],
                 excludes=[],
                 win_no_prefer_redirects=False,
                 win_private_assemblies=False,
                 cipher=block_cipher,
                 noarchive=False)
    pyz = PYZ(a.pure, a.zipped_data,
                 cipher=block_cipher)

    如果用到了非py文件需要打包,那么找到datas列表,将非py文件的路径与文件夹名写在元组里。

    例如:

    datas = [('C:\project\test\images','images'),('C:\project\test\EventLogs','EventLogs')]

    datas:

    1. 第一个参数是Python中的非py类型文件的路径
    2. 第二个参数是非py文件保存此资源的文件夹名称,要和路径中的文件夹名称相同。

    5、保存文件,在.spec文件路径下打开命令行,输入pyinstaller -D main.spec 或者 pyinstaller main.spec

      如果在第2条中选择了pyi-makespec -F main.py ,那么此处只需要执行pyinstaller main.spec即可

    6、生成的exe程序在dist文件夹中,dist文件夹里包含了整个项目所需环境,可在其他电脑中进行使用。

    特别注意: 如果写了关于pyqt5界面的程序的话,在其主函数里面导入PYQT5之前需要加上如下代码

    import os
    if hasattr(sys, 'frozen'):
        os.environ['PATH'] = sys._MEIPASS + ";" + os.environ['PATH']
    
    from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog
    from PyQt5 import QtCore, QtGui, QtWidgets

    参考链接:http://www.yunweishare.com/?p=726

    ok.

  • 相关阅读:
    常用控件的学习
    C# NOSQL 开源项目
    Js生成Guid
    通过sql语句附加数据库与启用sa账户
    Js 键值对实现
    sqlServer2000 安装备忘
    System.Reflection.ReflectionTypeLoadException: 无法加载一个或多个请求的类型。有关更多信息,请检索 LoaderExceptions 属性。
    关于ado.net连接池的一些分享(2)(原文出自:http://www.cnblogs.com/b42259626/articles/968460.html)
    关于ado.net连接池的一些分享(原文出自:http://www.cnblogs.com/rickie/archive/2004/10/02/48546.aspx)
    删除迅雷文件夹
  • 原文地址:https://www.cnblogs.com/smart-zihan/p/11881172.html
Copyright © 2011-2022 走看看