python使用pyinstaller打包程序

最近发现了一个挺厉害的人工智能学习网站,内容通俗易懂,风趣幽默,感兴趣的可以点击此链接进行查看:床长人工智能教程

 废话不多说,请看正文!

一、使用虚拟环境

使用pyinstaller 打包程序,如果直接在原来的环境中打包,出来的软件包会出现没有调用的库,增大了软件包,可能几K的程序打包出来软件却是几百MB.

使用: pip install pipenv  安装pipenv 虚拟环境.

在终端进入一个自己建立的文件夹例如:cd try

使用命令: 

pipenv install  #建立虚拟环境.
pipenv shell  #进入虚拟环境

使用 pip install ××× (你的程序里面调用的库)

然后 pip install pyinstaller  安装打包库.

输入 pyinstaller  -w -D  test.py  开始打包程序.

要想打包成功这样是远远不够的.

二、配置.spec 文件.

1、.spec 文件主要配置三个变量.

hiddenimports 这里需要把你的程序的所有库填写进去例如:

hiddenimports=['PyQt5.QtWidgets','subprocess','numpy',
'cv2','pkg_resources.py2_warn']
  • 在调用PyQt 时在代码中尽可能写清楚调用那个模块,如from PyQt5.QtWidgets  import *,而不要直接import PyQt5 因为这样会直接打包整个PyQt5,这样软件包的体积就会增大.
  • 如果你的代码中并没有直接调用numpy,但是你调用的某个库中调用了numpy,那么你就要在hiddenimports增加这个库.
  • 如果你打包后,运行软件提示你没有某一个库,那么你就要使用pip 安装这个库,同时在hiddenimports增加这个库的名称.当然如果提示是没有'pkg_resources.py2_warn'这个库,直接添加在hiddenimports就好,不用安装.

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文件复制到你打包好的软件包中.

你可能感兴趣的:(python,软件打包,python)