PyInstaller运行原理及常用操作详解

所属分类: 脚本专栏 / python 阅读数: 982
收藏 0 赞 0 分享

pyinstaller 属于Python第三方库,使用前需先安装

# 首先安装pyinstaller
pip install pyinstaller

PyInstaller生成可执行程序

# PyInstaller 工具的命令语法如下:

# 1、第一种
pyinstaller options ~/myproject/source/myscript.py

# 2、第一种
pyinstaller "C:\Documents and Settings\project\myscript.spec"

PyInstaller 支持的常用选项

-h,--help 查看该模块的帮助信息
-F,-onefile

dist中产生单个的可执行文件   

eg:pyinstaller -F demo.py

-D,--onedir

产生一个目录(包含多个文件)作为可执行程序   

eg:pyinstaller -D demo.py

-a,--ascii 不包含 Unicode 字符集支持
-d,--debug 产生 debug 版本的可执行文件
-w,--windowed,--noconsolc

指定程序运行时不显示命令行窗口(仅对 Windows 有效)   

eg:pyinstaller -w demo.py

-c,--nowindowed,--console

指定使用命令行窗口运行程序(仅对 Windows 有效)    

eg:pyinstaller -c demo.py

-o DIR,--out=DIR 指定 spec 文件的生成目录。如果没有指定,则默认使用当前目录来生成 spec 文件
-p DIR,--path=DIR

设置 Python 导入模块的路径(和设置 PYTHONPATH 环境变量的作用相似)。也可使用路径分隔符(Windows 使用分号,Linux 使用冒号)来分隔多个路径

eg:pyinstaller -p E:\python\Lib\site-packages demo.py

-n NAME,--name=NAME 指定项目(产生的 spec)名字。如果省略该选项,那么第一个脚本的主文件名将作为 spec 的名字

1、创建一个 app 目录,在该目录下创建一个 入口app.py 文件

# 进入该app目录内,执行以下语法
pyinstaller -F app.py

当生成完成后,将会在此 app 目录下看到多了一个 dist 目录,并在该目录下看到有一个 app.exe 文件,这就是使用 PyInstaller 工具生成的 exe 程序。

在命令行窗口中进入 dist 目录下,在该目录执行 app.exe ,将会看到该程序执行结果。

注:若程序没有可视化界面,不能双击执行程序

2、创建一个 app 目录,在该目录下创建一个 入口app.py 文件

# 进入该app目录内,执行以下语法
pyinstaller -D app.py

执行上面命令,将看到详细的生成过程。当生成完成后,将会在 app 目录下看到多了一个 dist 目录,并在该目录下看到有一个 app 子目录,在该子目录下包含了大量 .dll 文件和 .pyz 文件,它们都是 app.exe 程序的支撑文件。在命令行窗口中运行该 app.exe 程序,同样可以看到与前一个 app.exe 程序相同的输出结果。

3、高级用法

当有特殊需求,比如打包图片资源文件时,就必须用到它的高级用法。

首先得了解spec文件,简而言之,spec文件就是一份告诉pyinstaller如何打包的配置文件。
可以通过pyi-makespec demo.py来生成demo.spec文件。其内容如下:

# -*- mode: python -*-

block_cipher = None

resources = (("inspurer.db", "."), ("dlib_face_recognition_resnet_model_v1.dat", "."),
 ("shape_predictor_68_face_landmarks.dat", "."), ("close_logcat.png", ".")
 , ("open_logcat.png", "."), ("finish_register.png", "."), ("new_register.png", ".")
 , ("start_punchcard.png", "."), ("end_puncard.png", "."), ("index.png", "."))

a = Analysis(['workAttendanceSystem.py'],
       pathex=['C:\\Users\\lenovo\\Desktop\\test\\python'],
       binaries=[],
       datas=resources,
       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='workAttendanceSystem',
     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,
        name='workAttendanceSystem')

对于上面这个文件,需要注意两点:

除了resources配置是我添加修改之外,其余全是自动生成,这个配置是用来添加资源文件的。

pathex是工程的根目录。

生成并配置好spec文件后,我们可以通过pyinstaller demo.spec来执行打包任务。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

pandas的qcut()方法详解

这篇文章主要介绍了pandas的qcut()方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

从列表或字典创建Pandas的DataFrame对象的方法

这篇文章主要介绍了从列表或字典创建Pandas的DataFrame对象的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

pandas.DataFrame的pivot()和unstack()实现行转列

这篇文章主要介绍了pandas.DataFrame的pivot()和unstack()实现行转列,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

pandas中的series数据类型详解

这篇文章主要介绍了pandas中的series数据类型详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

pandas 时间格式转换的实现

这篇文章主要介绍了pandas 时间格式转换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

python中时间、日期、时间戳的转换的实现方法

这篇文章主要介绍了python中时间、日期、时间戳的转换的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

pandas进行时间数据的转换和计算时间差并提取年月日

这篇文章主要介绍了pandas进行时间数据的转换和计算时间差并提取年月日,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

详解将Pandas中的DataFrame类型转换成Numpy中array类型的三种方法

这篇文章主要介绍了详解将Pandas中的DataFrame类型转换成Numpy中array类型的三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

python和c语言的主要区别总结

在本篇文章里小编给各位整理了关于python和c语言的主要区别的相关知识帖内容,有需要的朋友们学习阅读下。
收藏 0 赞 0 分享

选择Python写网络爬虫的优势和理由

在本篇文章里小编给各位整理了一篇关于选择Python写网络爬虫的优势和理由以及相关代码实例,有兴趣的朋友们阅读下吧。
收藏 0 赞 0 分享
查看更多