背景:
使用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环境中。