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

Posted

技术标签:

【中文标题】PyCall import("numpy") 产生 MKL 致命错误【英文标题】:PyCall import("numpy") produces MKL FATAL ERROR 【发布时间】:2021-01-12 12:06:07 【问题描述】:

背景:

使用mac 10.15,我刚刚安装了python、conda和julia。

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

我有一个使用 numpy 的 python 库“mylib”

问题

当我尝试时

pyimport("mylib")

我明白了

Intel MKL FATAL ERROR: Cannot load libmkl_intel_thread.dylib.

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

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

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

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

【问题讨论】:

我的猜测是您尝试使用 32 位 anaconda。通常 MKL 有 64 位版本anaconda.org/anaconda/mkl 【参考方案1】:

我找到的最佳解决方案是创建一个单独的 conda 环境,它不使用 MKL,并使用该 python 二进制文件与 julia 一起工作。

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

在没有 MKL 的情况下创建 Conda 环境

How to install scipy without mkl

我特别建议:

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'

没有修复 PyCall:在朱莉娅中:

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

之后一切都应该正常工作。如果您的 julia pyimport 代码需要任何库,请确保立即将它们安装在 pynomkl 环境中。

【讨论】:

以上是关于PyCall import("numpy") 产生 MKL 致命错误的主要内容,如果未能解决你的问题,请参考以下文章

markdown pyenvでpycallしたらPyCall :: PythonNotFound

markdown Pycallで蟒蛇を动かす

python怎么将numpy类转为string类

使用Julia PyCall,在Julia模块中使用matplotlib.pyplot

markdown Elastic Beanstalkでpython3.xのpycallを动かしたかった

markdown macOS High Sierraでpycallを使ってたら“__ NSPlaceholderDictionary initialize”エラー