最近发现了一个挺厉害的人工智能学习网站,内容通俗易懂,风趣幽默,感兴趣的可以点击此链接进行查看:床长人工智能教程
废话不多说,请看正文!
使用pyinstaller 打包程序,如果直接在原来的环境中打包,出来的软件包会出现没有调用的库,增大了软件包,可能几K的程序打包出来软件却是几百MB.
使用: pip install pipenv 安装pipenv 虚拟环境.
在终端进入一个自己建立的文件夹例如:cd try
使用命令:
pipenv install #建立虚拟环境.
pipenv shell #进入虚拟环境
使用 pip install ××× (你的程序里面调用的库)
然后 pip install pyinstaller 安装打包库.
输入 pyinstaller -w -D test.py 开始打包程序.
要想打包成功这样是远远不够的.
1、.spec 文件主要配置三个变量.
hiddenimports 这里需要把你的程序的所有库填写进去例如:
hiddenimports=['PyQt5.QtWidgets','subprocess','numpy',
'cv2','pkg_resources.py2_warn']
2、datas 这里是把你的程序的数据增加进入
例如:
datas=[('/home/zhong/.local/share/virtualenvs/try2-33v9VvEI/lib/python3.5/site-packages/tr/char_table.txt','tr'),
('/home/zhong/.local/share/virtualenvs/try2-33v9VvEI/lib/python3.5/site-packages/tr/crnn.bin','tr'),
('/home/zhong/.local/share/virtualenvs/try2-33v9VvEI/lib/python3.5/site-packages/tr/ctpn.bin','tr'),],
增加的时候要具体到那个文件,不然数据不会复制到软件包中.第一个参数是文件位置,第二个参数是软件包中存放的位置.
3、binaries 这个是用来增加.dll/.so文件的,有时候打包是自己配置的.dll/.so文件,那么就需要这个变量了.
char_so=[('/home/zhong/.local/share/virtualenvs/try2-33v9VvEI/lib/python3.5/site-packages/tr/libtr.so','.'),
('/home/zhong/.local/share/virtualenvs/try2-33v9VvEI/lib/python3.5/site-packages/libtorch/lib/libc10.so','.')]
binaries=char_so,
你可能不知道自己少了什么.dll/.so文件,但是运行软件时会提示:PyInstallerImportError: Failed to load dynlib/dll 'C:\Users\evyin\AppData\Local\Temp\_MEI18~1\pyzbar\libiconv.dll'. Most probably this dynlib/dll was not found when the application was frozen.
少了什么.dll/.so,找到位置增加进binaries就好了.或者你也可以直接将.dll/.so文件复制到你打包好的软件包中.