PyCall import( "numpy" ) 产生 MKL 致命错误



背景:

使用mac10.15,我刚刚安装了python、conda和julia。

然后,我使用conda安装numpy,并安装julia PyCall,将ENV["PYTHON"]指向conda可执行文件(PYTHON中sys.executable的输出和所需的conda环境(。

我有一个python库"mylib";使用numpy

问题

当我尝试时

pyimport("mylib")

我有

Intel MKL FATAL ERROR: Cannot load libmkl_intel_thread.dylib.

我发现这是由于julia使用的64位MKL库和python使用的32位MKL图书馆之间的冲突:

https://www.reddit.com/r/Julia/comments/jj7ubh/pycall_intel_mkl_error/

https://github.com/JuliaPy/PyCall.jl/issues/443

julia形式中给出的解决方案建议使用已更改的标志重新编译julia。这似乎是不必要的痛苦,还有其他选择吗?

我找到的最好的解决方案是创建一个单独的conda环境,它不使用MKL,并使用python二进制文件来处理julia。

由于这个解决方案的部分分散在各处,组装起来让我头疼,我想我会在这里收集所有东西:

创建没有MKL的Conda环境

如何在没有mkl 的情况下安装scipy

我特别建议:

conda create -n pynomkl python nomkl

然后像往常一样安装软件包

conda install -n pynomkl numpy pandas scipy scikit-learn ...

这样做将创建一个特殊的conda环境和python二进制文件,您可以将其与julia的PyCall一起使用。这样,您就可以继续将MKL用于其他仅用于python的工作。

找出你的python二进制文件在哪里:

> conda activate pynomkl                          (base) 
> python                                       (pynomkl)
>>> import sys
>>> sys.executable
'pathtopython/../python'

没有修复julia:中的PyCall:

ENV["PYTHON"]="pathtopython/../python"
using Pkg ; Pkg.build("PyCall")

之后一切都会好起来的。如果您的julia-pyimport代码需要任何库,请确保立即将它们安装在pynomkl环境中。

最新更新