2017-02-03 418 views
4

我创建了一个新的畅达环境PIP不安装numba/llvmlite内畅达环境中正常

[email protected]:~/project$ conda create -n test-env -c numba python=3.5.2 llvmdev=3.8 
Fetching package metadata ........... 
Solving package specifications: . 

Package plan for installation in environment /home/user/anaconda2/envs/test-env: 

The following NEW packages will be INSTALLED: 

    llvmdev: 3.8.1-7  numba 
    openssl: 1.0.2k-0   
    pip:  9.0.1-py35_1  
    python:  3.5.2-0    
    readline: 6.2-2    
    setuptools: 27.2.0-py35_0  
    sqlite:  3.13.0-0   
    system:  5.8-2   numba 
    tk:   8.5.18-0   
    wheel:  0.29.0-py35_0  
    xz:   5.2.2-1    
    zlib:  1.2.8-3    

Proceed ([y]/n)? y 

# 
# To activate this environment, use: 
# > source activate test-env 
# 
# To deactivate this environment, use: 
# > source deactivate test-env 
# 

,然后激活它,并尝试使用专门PIP(不畅达)安装llvmlite和numba,这似乎成功。 (注:我也试过--no-cache-dir,它不会改变任何东西)

[email protected]:~/project$ source activate test-env 
(test-env) [email protected]:~/project$ pip install llvmlite==0.15 numba==0.30.1 
Collecting llvmlite==0.15 
Collecting numba==0.30.1 
Collecting numpy (from numba==0.30.1) 
    Using cached numpy-1.12.0-cp35-cp35m-manylinux1_x86_64.whl 
Installing collected packages: llvmlite, numpy, numba 
Successfully installed llvmlite-0.15.0 numba-0.30.1 numpy-1.12.0 

但库安装不正确,

(test-env) [email protected]:~/project$ python 
Python 3.5.2 |Continuum Analytics, Inc.| (default, Jul 2 2016, 17:53:06) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import numba 
Traceback (most recent call last): 
    File "/home/user/anaconda2/envs/test-env/lib/python3.5/site-packages/llvmlite/binding/ffi.py", line 42, in <module> 
    lib = ctypes.CDLL(os.path.join(_lib_dir, _lib_name)) 
    File "/home/user/anaconda2/envs/test-env/lib/python3.5/ctypes/__init__.py", line 347, in __init__ 
    self._handle = _dlopen(self._name, mode) 
OSError: /home/user/anaconda2/envs/test-env/lib/python3.5/site-packages/llvmlite/binding/libllvmlite.so: undefined symbol: _ZNKSt14error_category23default_error_conditionEi 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/home/user/anaconda2/envs/test-env/lib/python3.5/site-packages/numba/__init__.py", line 9, in <module> 
    from . import config, errors, runtests, types 
    File "/home/user/anaconda2/envs/test-env/lib/python3.5/site-packages/numba/config.py", line 11, in <module> 
    import llvmlite.binding as ll 
    File "/home/user/anaconda2/envs/test-env/lib/python3.5/site-packages/llvmlite/binding/__init__.py", line 6, in <module> 
    from .dylib import * 
    File "/home/user/anaconda2/envs/test-env/lib/python3.5/site-packages/llvmlite/binding/dylib.py", line 4, in <module> 
    from . import ffi 
    File "/home/user/anaconda2/envs/test-env/lib/python3.5/site-packages/llvmlite/binding/ffi.py", line 47, in <module> 
    lib = ctypes.CDLL(_lib_name) 
    File "/home/user/anaconda2/envs/test-env/lib/python3.5/ctypes/__init__.py", line 347, in __init__ 
    self._handle = _dlopen(self._name, mode) 
OSError: libllvmlite.so: cannot open shared object file: No such file or directory 

为什么的llvmdev的畅达安装从numba通道不能“正常工作”。

在我的使用案例中,我来到一个有pip风格的requirements.txt文件的项目,我需要从该文件创建conda环境。有些项目开发人员会使用venv + pip,有些会使用conda,并且它包含的某些软件包在任何anaconda频道中都找不到,因此必须安装pip。除了requirements.txt之外,我们不想维护一个单独的envrionment.yaml,因此从conda环境中的requirements.txt进行安装是我约束的一部分。

除了numba/llvmlite的pip安装,它预计系统依赖llvm 3.8+以外,一切看起来都不错。尽管如此,我仍希望将其作为conda环境的一部分。

我怎样才能确保从conda环境只有正确的llvmdev存在安装numba和llvmlite?

+0

我无法在Ubuntu VM上重现您的错误,但您可以尝试从conda-forge chann el而不是numba开发者频道,看看是否有帮助。 – JoshAdel

+0

我可以在Ubuntu 16.10机器上本地复制它,也可以在远程Centos7机器上复制它。尚未尝试其他人。 – ely

+0

您使用哪种版本的conda? “conda config -a”是你从开源渠道还是内部镜像? – Kelvin

回答

0

在理想情况下,在安装llvmlite之后,所需的共享库应该存在。

(test-env) ~/condaexpts$ conda create -n test-env -c numba python=3.5.2 llvmdev=3.8 
(test-env) ~/condaexpts$ source activate test-env 
(test-env) ~/condaexpts$ pip install numpy==1.12.0 llvmlite==0.15 numba==0.30.1 
(test-env) ~/condaexpts$ find $CONDA_PREFIX | grep libllvmlite 
/home/ubuntu/condaexpts/m3/envs/test-env/lib/python3.5/site-packages/llvmlite/binding/libllvmlite.so 

如果这个文件不在test-env中,那么在安装llvmlite的时候出了点问题。

另外,反过来思考这种方法。您不需要将要求文件与conda环境文件分开。您可以在畅达环境都依赖文件本身:

(test-env) ~/condaexpts$ conda env export    
name: test-env 
channels: 
- !!python/unicode 
    'numba' 
- !!python/unicode 
    'defaults' 
dependencies: 
- !!python/unicode 
    'openssl=1.0.2k=0' 
- !!python/unicode 
    'pip=9.0.1=py35_1' 
- !!python/unicode 
    'python=3.5.2=0' 
- !!python/unicode 
    'readline=6.2=2' 
- !!python/unicode 
    'setuptools=27.2.0=py35_0' 
- !!python/unicode 
    'sqlite=3.13.0=0' 
- !!python/unicode 
    'tk=8.5.18=0' 
- !!python/unicode 
    'wheel=0.29.0=py35_0' 
- !!python/unicode 
    'xz=5.2.2=1' 
- !!python/unicode 
    'zlib=1.2.8=3' 
- !!python/unicode 
    'llvmdev=3.8.1=7' 
- !!python/unicode 
    'system=5.8=2' 
- pip: 
    - llvmlite==0.15.0 
    - numba==0.30.1 
    - numpy==1.12.0 
prefix: !!python/unicode '/home/ubuntu/condaexpts/m3/envs/test-env' 

在第二个音符,您可以安装从“numba”畅达通道本身所需的预构建的二进制文件。附:

(root) ~/condaexpts$ ./Miniconda3-latest-Linux-x86_64.sh -b -p m3 
(root) ~/condaexpts$ source ./m3/bin/activate 
(root) ~/condaexpts$ conda create -n test-env -c numba python=3.5.2 llvmdev=3.8 numba=0.30.1 llvmlite=0.15.0 
(root) ~/condaexpts$ source activate test-env 
(test-env) ~/condaexpts$ python 
Python 3.5.2 |Continuum Analytics, Inc.| (default, Jul 2 2016, 17:53:06) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import numba 
>>> numba.__version__ 
'0.30.1' 
+0

感谢您的回复。不幸的是,这些选项在我的方案中不起作用。通常我喜欢使用anaconda通道来获得预编译的二进制文件,特别是对于像llvmlite这样的复杂依赖项。但是,在当前的这个项目中,它已经基于一个pip requirements.txt文件。您应该假设由于项目限制,我无法支持随附的environment.yml文件。 – ely

+0

另外,关于您关于LLVM共享对象的CONDA_PREFIX位置的第一点,请查看我的问题中错误消息的第一部分。它们显示共享对象'/ home/user/anaconda2/envs/test-env/lib/python3.5/site-packages/llvmlite/binding/libllvmlite.so'确实存在(我可以很容易地在文件中看到它系统)。然而,由conda通过'llvmdev'安装的预编译二进制文件有缺失的符号错误,并且不清楚conda安装的依赖关系为什么会出现这个问题。 – ely

0

安装llvmdev: 从康达锻通道安装llvmdev可以通过添加实现畅达,开拓您的频道:

conda config --add channels conda-forge 

一旦conda-forge通道已启用,llvmdev可以安装:

conda install llvmdev 

有可能l IST所有可用的版本llvmdev的平台上的:

conda search llvmdev --channel conda-forge 

HELP:我从他们的GitHub源克隆相关的文件,做

python setup.py install 

更多的不畅达使用PIP

sudo pip install -U llvmlite 
sudo pip install -U numba