2017-02-03 3 views
4

создать новую Конду средупипа не устанавливая 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 
# 

, а затем активировать его и попытаться использовать специально пип (не Конду), чтобы установить 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 каналу не удается «просто работать».

В моем случае использования я прихожу к проекту, в котором содержится файл требований .txt, и мне нужно создать среды conda из этого файла. Некоторые разработчики проекта будут использовать venv + pip, некоторые будут использовать conda, а некоторые пакеты, которые он содержит, не найдены ни в каких каналах anaconda, поэтому установка pip обязательна. Мы не хотим поддерживать отдельный envrionment.yaml в дополнение к требованию.txt, поэтому установка из требования. Txt внутри conda envrionment является частью моих ограничений.

Все кажется ОК, за исключением установки pipba numba/llvmlite, которая ожидает системную зависимость от llvm 3.8+. Однако я хочу удовлетворить это как часть среды конды.

Как я могу обеспечить из среды conda только то, что существует правильный llvmdev для установки numba и llvmlite?

+0

Я не могу воспроизвести вашу ошибку на виртуальной машине Ubuntu, но вы можете попытаться вытащить ее из конвейерного канала el вместо канала numba dev и посмотреть, поможет ли это. – 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.txt. Вы должны предположить, что я не могу поддерживать спутник environment.yml для использования рядом с ним из-за ограничений проекта. – ely

+0

Кроме того, что касается вашего первого пункта о местоположении CONDA_PREFIX для общего объекта llvm, посмотрите на первую часть сообщений об ошибках в моем вопросе. Они показывают, что общий объект '/ home/user/anaconda2/envs/test-env/lib/python3.5/site-packages/llvmlite/binding/libllvmlite.so' действительно существует (я могу легко увидеть его в файле система). Тем не менее, прекомпилированный двоичный файл, установленный conda через 'llvmdev', имеет недостающую ошибку символа, и неясно, почему проблема с установленной кондрой зависимостью может иметь эту проблему. – 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 

ПОМОЩЬ: Я клонировали соответствующие файлы из их источников GitHub и сделал

python setup.py install 

для более без Конда использования ПУМ

sudo pip install -U llvmlite 
sudo pip install -U numba 
Смежные вопросы