2017-02-03 110 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 
相關問題