PyInstaller打包动态插件命令参数设置

如果工程中有动态加载库,要添加两个选项:–hidden-import 和 --add-binary

–hidden-import <动态插件名字>
–add-binary <src;DEST>
src是动态库的路径,DEST是打包后希望存放的路径,中间的分号是在Windows中使用,Linux中用冒号

例如目录结构

|-main.py
|-plugins/
|-plugins/__init__.py
|-plugins/_01plugin.py
|-plugins/_02plugin.py
|-plugins/_98plugin.py
|-plugins/_99plugin.py

命令行

pyinstaller --hidden-import plugin--hidden-import plugins._01plugin --hidden-import plugins._01plugin --hidden-import plugins._02plugin --hidden-import plugins._98plugin --hidden-import plugins._99plugin --add-binary ./plugins/__init__.py;plugins --add-binary ./plugins/_01plugin.py;plugins --add-binary ./plugins/_02plugin.py;plugins --add-binary ./plugins/_98plugin.py;plugins --add-binary ./plugins/_99plugin.py;plugins -F main.py

-F参数是将工程打包成一个exe文件

两个参数都使用之后也可能会报错说找不到动态插件
从pyinstaller打包后的exe的运行机制将,打包得到的exe文件是一个可自解压的程序,它会把这个exe文件中包含的文件打包到一个名为_MEIxxxxxx的临时目录下面,这个目录在系统的临时文件夹下面(Linux下是/tmp),当程序退出时,会自动清空删除这个临时目录_MEIxxxxxx。
最终的exe文件有可能放在认可目录执行,其当前目录下不会有bin目录下面的资源文件,而是被解压到了临时目录下面,所以程序报错找不到相关文件。
解决方法
要在程序中指定资源文件的路径,使得它在非打包模式和打包模式下运行时都能找到相关资源文件。

base_path = getattr(sys, '_METPASS', os.path.dirname(os.path.abspath(__file__)))

pluginspath = os.path.join(base_path, 'plugins')

把资源的相对路径转换为绝对路径。如果找到_MEIPASS路径就以此为资源的基准路径,否则以当前路径为基准路径。

只使用–hidden-import
会报错,还是上面说的exe运行机制,虽然把动态库添加了进来,但是没有添加动态插件的文件资源,在程序中修改了绝对路径也会显示找不到这个文件。

只使用–add-binary
运行时会报错找不到动态插件中用import引入的包。因为使用这个选项只是把文件打入exe中,并没有识别其中的内容

参考:
https://www.yuanrenxue.com/tricks/pyinstaller-spec.html
https://blog.csdn.net/shixinwenwu/article/details/89879608

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值