由于libllvmlite.dylib错误,在py2app构建时UMAP失败

时间:2018-12-10 03:19:20

标签: numba py2app

我正在冻结我们开发的软件AltAnalyze(https://github.com/nsalomonis/altanalyze)的GitHub发行版。 UMAP学习软件包取决于numba和llvmlite,它们可以从源代码正常运行,但是,当使用py2app构建发行版本时,UMAP失败,并出现以下错误:

File "umap/__init__.pyc", line 1, in <module>
File "umap/umap_.pyc", line 19, in <module>
File "numba/__init__.pyc", line 11, in <module>
File "numba/config.pyc", line 19, in <module>
File "llvmlite/binding/__init__.pyc", line 6, in <module>
File "llvmlite/binding/dylib.pyc", line 4, in <module>
File "llvmlite/binding/ffi.pyc", line 128, in <module>
OSError: dlopen(AltAnalyze.app/Contents/Resources/lib/python2.7/site-packages.zip/llvmlite/binding/libllvmlite.dylib, 6): no suitable image found. Did find:AltAnalyze.app/Contents/Resources/lib/python2.7/site-packages.zip/llvmlite/binding/libllvmlite.dylib: stat() failed with errno=20

我尝试重新安装numba和llvmlite并在加载UMAP的模块中调用各种相关函数:

import numba
import llvmlite; from llvmlite import binding
from llvmlite.binding import *
from llvmlite.binding import ffi
from llvmlite.binding import dylib

但是错误仍然存​​在。任何建议将不胜感激。

2 个答案:

答案 0 :(得分:1)

我们遇到了类似的问题。

https://req.thevirtualbrain.org/browse/TVB-2144?focusedCommentId=15056&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-15056

我们在项目中所做的事情,我们有一个 setup_mac.py ,在其中填充py2app的 includes,excludes 选项。 packages 列表中的每个条目都不是完整路径,而只是一个名称。在此列表中,我们添加了 llvmlite ,以完全解决此问题。

答案 1 :(得分:0)

因此,我们能够找到解决方法,但是效果并不理想。 首先,我们使用显式框架和程序包选项重新运行py2app设置脚本:

python build_scripts/setup_binary.py py2app --frameworks /Library/Python/2.7/site-packages/llvmlite/binding/libllvmlite.dylib --packages llvmlite,numba

这在运行UMAP时不再抛出llvmlite错误,但失败:

File "umap/__init__.pyc", line 9 in <module>
File "pkg_resources/__init__.pyc",line 480, in get_distribution
File "pkg_resources/__init__.pyc",line 356, in get_provider
File "pkg_resources/__init__.pyc",line 905, in require
File "pkg_resources/__init__.pyc",line 791, in resolve
DistributionNotFound: The 'umap-learn' distribution was not found and is required by the application

这特别奇怪,因为llvmlite是由numba从umap导入的,但是在这里,numba和llvmlite可以很好地导入...这是umap不会导入的。无法找到干净的修复程序,我们将umap库目录复制到了我们的软件中并直接调用它。

我们欢迎更清洁的解决方案。