Loading

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就没这么方便了。

 

posted @ 2023-03-06 14:18  上官飞鸿  阅读(318)  评论(0)    收藏  举报