注:pyinstaller不属于python执行的包,需要在cmd命令行下使用。
1.安装与python版本相适应的pyinstaller
目前python都在使用3.x版本,相对于python2来说python3里边许多包名字大小写有改动,并且有包合并的现象,以至于有些python2编写的代码中,不能直接安装pyinstaller来打包文件,因为直接conda install pyinstaller
会选择最新版本的pyinstaller来安装。而pyinstaller只有3.6版本以下的支持python2。目前已经更新到4.1版本了。
所以我们应该在cmd中先用conda 建立一个python2的新环境,详见我的另一篇文章conda新建环境相关
新环境的话安装的python包比较少,打包生成的exe文件不会太大。建好环境后使用activate 环境名
来激活环境,之后安装3.6版本及以下的pyinstaller如下:
conda install pyinstaller==3.6
装好之后使用cd 要打包的.py文件路径
命令转换到该文件夹下,再使用cd 要打包的.py文件路径 dir
显示该文件夹下所有内容帮助我们转换。
之后进行打包
pyinstaller打包语句
F:\>cd python\Anaconda\PycharmProjects\hello-master
F:\python\Anaconda\PycharmProjects\hello-master>dir
F:\python\Anaconda\PycharmProjects\hello-master>pyinstaller -i hello-logo.ico -w hello.py -n nihao
这里pyinstaller的-i
后边跟的是软件图标名字,必须是ico格式的图片,可以到网上自己转换格式。
而-w
为不显示cmd操作框直接运行软件
如果使用-F
会完全打包到一个exe中不会有多余的东西,但是一些隐性的包可能会漏掉,我找了一天解决方案也没解决。在这之间我才发现必须使用与python2相适应的pyinstalller才能尽可能多的把第三方包打包进去,原因同样是名字有变化。
2.打包后的闪退与warn文件中许多missing module 的解决
在使用以上语句打包之后会在原路径下生成新文件夹,里边有exe文件。如果运行就闪退并且warn文件中许多missing module 记录,则可以吧exe拖进cmd中运行,会看到哪里在报错,这也算是一个小技巧,比其他人说的使用录屏软件录下来看方便多了。
如果在cmd中正常运行,而双击exe无法运行,则只需要把被打包的.py文件原目录下的文件都复制到exe所在的文件夹中就可以运行了。
我的第一个exe文件也终于勉强可以用了。