用pyinstaller 将python项目 build成exe

1.安装pyinstaller

在cmd窗口 输入命令  pip install pyinstaller

2.pyInstaller原理简介

 pyInstaller其实就是把python解析器和你自己的脚本打包成一个可执行的文件,好处就是在运行者的机器上不用安装python和你的脚本

依赖的库。

 pyInstaller输入你指定的的脚本,首先分析脚本所依赖的其他脚本,然后去查找,复制,把所有相关的脚本收集起来,包括Python解析

器,然后把这些文件放在一个目录下,或者打包进一个可执行文件里面。

可以直接发布输出的整个文件夹里面的文件,或者生成的可执行文件。你只需要告诉用户,你的应用App是自我包含的,不需要安装其

他包,或某个版本的Python,就可以直接运行了。

3.pyinstaller 打包 直接使用命令  pyinstaller [-F/-D] [-w/-c] [-i xxx.ico] hello.py   

 最简单的打包:切换到hello.py所在目录 打开cmd ,执行命令  pyinstaller hello.py,就打包完成。在当前目录下会生成build文件夹和 dist文件夹 和 hello.spec文件。

  • hello.spec 文件 pyinstaller 就是根据这个文件种的配置来生成hello.exe的
  • dist文件夹内的hello文件夹内 有可执行文件hello.exe。因为默认的-D,如果要在别的电脑运行,需要把这个hello文件夹整个复制过去。
  • build文件夹的作用相当于PyInstaller的工作空间,PyInstaller运行相关的文件和日志都在这个文件夹中,打包完成后可以直接删除。

 option解释

  • -d :生成一个文件目录包含可执行文件和相关动态链接库和资源文件等,默认选项
  • -f : 仅生成一个可执行文件,不暴露其他信息
  • -w:表示程序运行后隐藏命令行窗口,当你不需要使用命令行窗口作为程序的I/O时,比如GUI程序,可以使用这个参数选项。
  • -c:  默认选项,与-w相反,提供一个命令行窗口进行I/O。
  • -i/--icon:指定exe程序图标
  • --add-data SRC;DEST:指定需要添加非二进制文件路径或者文件夹路径,比如图片和pdf文件等,这个选项可以使用多次。这个命令其实就是将需要的文件或者文件夹拷贝到指定的路径下,在-D模式下,可以看情况在程序打包完成后自己手动拷贝过去。一条-add-data命令 就是往 .spec文件种添加 一条datas

例如   pyinstaller  --add-data C:\test\data;data hello.py  命令。就会生成如下的hello.spec文件

a = Analysis(['hello.py'],
             pathex=['C:\\test'],
             binaries=[],
             datas=[('C:\\test\\data', 'data')])

 

4.pyinstaller 打包 使用.spec 文件自定义打包  

参考 Pyinstaller 打包发布经验总结 , Python中的图片打包与pyinstaller中的spec文件简介, Python三方库:PyInstaller(exe程序打包)

如果一个多文件和目录的Python项目包含 1.Python源代码文件;2.图标资源文件;3.其它资源文件

项目根目录C:\test , Python源代码文件在多个目录下:bin, lib\app, lib\models, lib\views;图标资源文件在lib\icon目录下;其它资源文件在data目录下,包括文本文件,视频文件。直接用命令行 比较复杂,可以用.spec文件 来自定义打包

1.生成.spec文件

执行命令 pyinstaller hello.py 就可以生成hello.spec文件

PS:执行这条命令 也会生成dist文件夹和build文件夹,直接删掉即可,因为这里只需要hello.spec。等会执行hello.spec才是最后build exe

2.修改.spec文件

# -*- mode: python ; coding: utf-8 -*-

block_cipher = None


a = Analysis(['hello.py'],
             pathex=['C:\\test'],
             binaries=[],
             datas=[('C:\\test\\data','data')],
             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)
exe = EXE(pyz,
          a.scripts,
          [],
          exclude_binaries=True,
          name='hello',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          console=True )
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas,
               strip=False,
               upx=True,
               upx_exclude=[],
               name='hello')

spec文件分为Analysis, pyz, exe, coll四个部分

  • Analysis:首先是需要打包的py文件,通过一个字符串列表储存;然后是py文件的路径;datas是需要引用的文件(图片等)
  • exe:要生成exe文件时,name是exe文件的名字, console是是否在打开exe文件时打开命令框
  • coll:收集前三个部分的内容进行整合
     

3.执行 .spec文件 打包

执行命令  pyinstaller -D hello.spec 完成build exe

 

 

 

 

 

 

 

 

pyinstaller打包后的exe运行怎么去掉弹出的命令行提示窗口?

1.如果使用.spec文件的话, 在该文件中找到console=True修改为console=False

2.如果是直接指定python文件进行pyinstaller打包的话,需要添加 --noconsole :   pyinstaller hello.py--noconsole

      

 

posted on 2020-06-10 10:03  dreamstar  阅读(619)  评论(0编辑  收藏  举报