目前手上有一个python+pyqt的项目需要打包,所以查了一下打包的方法。下面介绍一下具体步骤:
python打包有很多方法,py2exe,pyinstaller等等(其实我也就知道这两种)。py2exe要自己写setup.py,
太麻烦。用了pyinstaller。
1.用命令行安装pyinstaller:(要在工程所在的环境里安装)
pip install pyinstaller
如何进入自己工程所在的环境,我使用anaconda3的tensorflow-cpu。而F:\python\label_tensorflow_cpu
就是我的工程所在目录。接着输入pip install pyinstaller,我安装过了,就不安装了。
2.然后用pyinstaller打包,就是运行以下命令。(pyinstaller的命令看这篇https://blog.csdn.net/jirryzhang/article/details/78881512)
pyinstaller -D -i ./icons/AutoLabel1.ico labelImg.py
这时成功的话会显示successfully。
3.工程的根目录(F:\python\label_tensorflow_cpu)下面会多出两个文件夹:build & dist。
4.点开dist找到.exe,双击运行会发现报错或者闪退。这是缺少运行时所需的包。
5.找到python的包,全部复制到根目录底下(F:\python\label_tensorflow_cpu\dist\labelImg)。
我的python包是在anaconda3下自己创建的tensorflow-cpu环境,所以去目录(D:\Anaconda3\envs\
tensorflow-cpu\Lib\site-packages\)下找。
6.然后双击dist中的exe(F:\python\label_tensorflow_cpu\dist\labelImg\labelImg.exe),即可运行。
此外我在看别人教程的时候,都要求安装pywin32(https://blog.csdn.net/qq_35203425/article/details/78568141
教程)。注意一点,pywin32有32位和64位之分,这个对应的是python的版本。
对于自定义dll的打包,有很多坑,下面一一介绍:
坑一:自定义的dll,导入时用ctypes.windll.LoadLibrary(trackDllPath),这里的是我dll所在的位置。这里原本
放的是相对路径,结果自己的电脑运行没有问题,在别人电脑上如何都不能运行。最后我将其放在根
目录底下,即可运行。
坑二:如果你的dll生成txt文本等数据。这时根据你cmd的路径不同,它生成的位置也不同。如下面两张图,
生成的txt就在不同的路径底下,就是由于在不同路径的cmd下打开。这个坑很隐蔽,我就是之前已经
打包好可以使用了,突然发现找不到dll生成的txt了。
坑三:打包好的软件在其他电脑上运行,需要安装vs2015的库。这个坑了我很长时间。
最后,最好把exe拉进cmd中运行,这样程序出错,可以在cmd中看到,不会闪退。还有其他新的错误
可以根据报错修改。