天天看点

Ubuntu 16.04 python3.5安装llvm 3.9.1、llvmlite 0.16.0、numba 0.30.0

由于项目需要使用到python进行大规模的计算,所以使用numba进行加速。numba需要先安装llvmlite所以本篇博客记录安装llvm、llvmlite和numba的部分安装过程。过程主要参考http://www.cnblogs.com/goingmyway/p/4493204.html。但是由于环境和版本的不同,所以遇到了很多问题,予以记录

LLVM

需要下载的文件如下,下载地址http://llvm.org/releases/download.html#3.9.1

LLVM source code

Clang source code

Clang Tools Extra source code

Compiler RT source code

LibC++ source code

然后分别解压,重命名,移动等按如下操作进行:

mv cfe-.src clang
mv clang/ llvm-.src/tools/

mv clang-tools-extra-.src extra
mv extra/ llvm-.src/tools/clang/

mv compiler-rt-.src compiler-rt
mv compiler-rt llvm-.src/projects/
           

然后在

llvm-3.9.1.src

的同级目录创建文件夹

build-3.9.1

,并进入

此时按照http://www.cnblogs.com/goingmyway/p/4493204.html博文的方法无法继续进行,提示需要使用cmake system,所以执行命令

等待命令执行完毕

然后执行命令

然后执行命令

sudo make install
           

该命令执行完后,完成llvm3.9.1的安装,执行如下命令进行检测:

[email protected]-Aspire-E5-G:~$ clang++ -v
clang version  (tags/RELEASE_391/final)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/local/bin
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/
Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/
Candidate multilib: .;@m64
Selected multilib: .;@m64
Found CUDA installation: /usr/local/cuda, version unknown
           

LLVMLITE

该部分的安装过程与之前提到的博文方法不同,主要是因为版本与环境的原因,安装过程中也有一些问题没有解决。

设置环境变量

LLVM_CONFIG

,值为安装的LLVM中llvm-config目录,即运行

whereis llvm-config

的结果

首先根据numba的git主页https://github.com/numba/numba/blob/master/requirements.txt的环境要求,llvmlite >= 0.16,在llvmlite官网上只更新到0.15,所以采用从llvmlite的git下载源码安装的方法,如下:

从github下载llvmlite源码

然后进入到llvmlite目录

cd ~/llvmlite
           

由于我们在编译llvm时使用clang,所以直接运行命令

python setup.py build

会报错,错误类型参看https://github.com/numba/llvmlite/issues/54,解决方法也在下面给出,执行命令:

如果没有在前面设置LLVM_CONFIG的环境变量的值,可能会出错提示找不到

executable llvm-config

,指定即可

然后运行测试程序:

此时出现fail

unexpected dependenty 'libtinfo' in {...}

我的解决方法是直接修改了源码,将libtinfo添加到allowed dependency中,如下:

vim ~/llvmlite/llvmlite/tests/test_binding.py
#vim命令行模式输入
:/allowed
 allowed = set(['librt', 'libdl', 'libpthread', 'libz', 'libm',
                       'libgcc_s', 'libc', 'ld-linux'])
        for dep in deps:
            if not dep.startswith('ld-linux-') and dep not in allowed:
                self.fail("unexpected dependency %r in %r" % (dep, deps))
#将libtinfo添加到allowed集合中,修改后
 allowed = set(['librt', 'libdl', 'libpthread', 'libz', 'libm',
                       'libgcc_s', 'libc', 'ld-linux', 'libtinfo'])
        for dep in deps:
            if not dep.startswith('ld-linux-') and dep not in allowed:
                self.fail("unexpected dependency %r in %r" % (dep, deps))
           

然后重新运行

python runtest.py

,提示OK

执行安装命令

sudo python setup.py install
           

完成llvmlite安装

NUMBA

具体安装方法,根据numba的git主页https://github.com/numba/numba,首先从git下载numba,命令如下:

进入到numba目录

cd ~/numba
           

执行

sudo pip3 install -r requirement.txt

将所需要的其他依赖安装好

此时可能提示没有找到满足的llvmlite>=0.16,这是pip3在软件库中没有找到016版本的llvmlite,所以我们才需要从github源码下载最新版本。我们在之前已经安装过llvmlite0.16,可以到/usr/local/lib/python3.5/dist-packages下看到llvmlite和llvmlite0.16…等文件。

执行命令:

完成numba的安装,简单测试:

from numba import jit

@jit
def sum(a, b):
    return a+b

if __name__ == '__main__':
    print(sum(a+b))
           

若提示

‘TargetData' object has no attribute 'add_pass'

根据llvm文档是由于llvm3.9.x已经移除了属性add_pass,所以猜测是llvmlite或者numba版本安装错误,请仔细核对

由于个人机器环境、配置不同等原因,有些命令需要使用sudo,请注意尝试,此次安装花费了一整天的时间,每一个部分安装过多次才最终能够使用,配环境,装软件真是一件费事费力费心打事情。

以上。