pyinstaller 使用注意事项
简介:
经常做一些python脚本给同事用,安装环境,敲命令,安装IDE,就不要想了。
python是脚本型语言,也就不存在编译这个选项了。有个打包工具:pyinstaller,记得是带er的,不带er的我也没用过。
一:安装
这个是要安装在你的虚拟环境的,不要装在系统环境下,否则扫描不到虚拟环境的包,会执行失败。
二:使用
pyinstaller ***.py
把你的项目打包到一个dist目录的一个文件夹
pyinstaller -F ***.py
把你的项目打包到一个dist目录的一个文件
一般我配置为pycharm的扩展,鼠标右键点文件就可以了。


三:spec
打包以后,你就会发现多了一个同名spec文件,这个是pyinstaller打包用的文件。
只有一个py,没有引用其他文件的时候,怎么打包都行的,有引用其他文件的时候,有额外打包的时候,就会出问题了。
Spec 本质上是一个 Python 脚本,其基本结构是大体固定的,但根据生成模式的不同,在最后的步骤上会有所差别。具体的说,当使用单目录模式时,对应的 spec 文件总体格式如下:
a = Analysis(...)
pyz = PYZ(...)
exe = EXE(...)
coll = COLLECT(...)
若使用单文件(onefile)模式的话,则结构是这样的:
a = Analysis(...)
pyz = PYZ(...)
exe = EXE(...)
四:ModuleNotFoundError
虽然很多的包pyinstaller都可以自动处理,但是还是有各种包是pyinstaller无法自动处理的,就需要手动处理,如下,我这里有个pymssql的包是无法自动处理的,
ModuleNotFoundError: No module named 'pymssql'
需要手动告诉pyinstaller将这个包打包进去。
命令行模式:
--hidden-import Modulename 可以多次使用
例:--hidden-import docx --hidden-import Pillow
修改spec模式:
hiddenimports=['pymssql'],
例:hiddenimports=['docx', 'Pillow'],
五:问题
现在pyinstaller已经不让在spec文件上使用-F 参数了。
解决方法是打包两次。
先-F打包,修改spec文件hiddenimports,再在spec文件上不用-F打包。
或者 直接打包,修改spec文件hiddenimports,删除coll相关内容,再在spec文件上打包
估计vscode就没这么方便了。

浙公网安备 33010602011771号