当 pyinstaller 发现版本冲突时手动指定库

2024-02-01

使用 pyinstaller 时是否可以在 Mac OSX 上手动替换或指定 .dylib 的位置?

我在尝试打开已完成的 .app 时收到错误

Traceback (most recent call last):
  File "DeepMeerkat/main.py", line 3, in <module>
    import cv2
  File "/Library/Python/2.7/site-packages/PyInstaller/loader/pyimod03_importers.py", line 546, in load_module
    module = imp.load_module(fullname, fp, filename, ext_tuple)
ImportError: dlopen(/Users/ben/Documents/DeepMeerkat/Installer/dist/Lib/cv2.so, 2): Library not loaded: @loader_path/libpng16.16.dylib
  Referenced from: /Users/ben/Documents/DeepMeerkat/Installer/dist/Lib/libopencv_imgcodecs.3.3.dylib
  Reason: Incompatible library version: libopencv_imgcodecs.3.3.dylib requires version 48.0.0 or later, but libpng16.16.dylib provides version 45.0.0
Failed to execute script main

我在应用程序外部的 python 中加载 cv2 没有问题,或者使用自制程序安装的 open 没有任何其他问题。

环顾四周,我认为错误很可能来自 pyinstaller 从 X11 抓取 libpng (/opt/X11/include/libpng16)当需要从 Homebrew 的文件夹中抓取时(/usr/local/Cellar/libpng/1.6.32/)

如何使用钩子来指定我想要的 libpng?


我遇到了同样的问题,答案在于编辑 .spec 文件。在 = Analysis... 之后添加以下行:

a.binaries = a.binaries - TOC([('libpng16.16.dylib',None,None)])

这可以从相关 TOC 文件中删除有问题的 dylib,从而解决冲突。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当 pyinstaller 发现版本冲突时手动指定库 的相关文章

随机推荐