2017-02-03 5 views
4

ich eine neue Conda Umgebungpip nicht Installation numba/llvmlite richtig in Conda Umgebung

[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 
# 

und dann aktivieren Sie es schaffen und versuchen, speziell pip (nicht Conda) zu verwenden llvmlite und numba zu installieren, die erfolgreich zu sein scheint . (Anmerkung:. Ich habe auch --no-cache-dir versucht, und es ändert nichts)

[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 

Aber die Bibliothek nicht richtig installiert ist,

(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 

Warum funktioniert die Conda Installation von llvmdev vom numba Kanal "funktioniert nicht".

In meinem Anwendungsfall komme ich zu einem Projekt mit einer pip-styled requirements.txt-Datei, und ich muss Conda-Umgebungen aus dieser Datei erstellen. Einige Projektentwickler werden venv + pip verwenden, einige werden conda verwenden, und einige Pakete, die es enthält, werden nicht in Anaconda-Kanälen gefunden, daher ist eine Pip-Installation obligatorisch. Wir möchten keine separate envrionment.yaml zusätzlich zu der requirements.txt pflegen, daher ist die Installation von der requirements.txt innerhalb einer conda-Umgebung Teil meiner Constraints.

Alles scheint in Ordnung, außer für die Pip-Installation von numba/llvmlite, die eine Systemabhängigkeit von llvm 3.8+ erwartet. Das will ich aber als Teil der Conda-Umgebung erfüllen.

Wie kann ich von einer Conda-Umgebung nur sicherstellen, dass das richtige llvmdev für die Installation von numba und llvmlite existiert?

+0

Ich kann Ihren Fehler nicht auf einer Ubuntu-VM reproduzieren, aber Sie könnten versuchen, aus dem Conda-Schmiede-Kanal zu ziehen el statt der numba dev channel und sehen, ob das hilft. – JoshAdel

+0

Ich kann es lokal auf einer Ubuntu 16.10-Maschine reproduzieren, und auch auf einer entfernten Centos7-Maschine. Habe noch keine anderen ausprobiert. – ely

+0

Welche Version von Conda verwenden Sie? "conda config -a" ziehst du von Opensource-Kanälen oder einem internen Spiegel? – Kelvin

Antwort

0

In einem idealen Szenario sollte die erforderliche gemeinsam genutzte Bibliothek nach der Installation von llvmlite vorhanden sein.

(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 

Wenn diese Datei nicht im test-env vorhanden ist, ist beim Installieren von llvmlite etwas schief gelaufen.

Denken Sie auch über diesen Ansatz anders herum nach. Sie müssen keine Anforderungsdatei separat von der Conda-Umgebungsdatei haben. Sie können haben beide Abhängigkeiten in der Conda Umgebung selbst file:

(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' 

Auf den zweiten Note, können Sie die vorgefertigten Binärdateien aus dem ‚numba‘ Conda Kanal selbst erforderlich installieren können.Mit:

(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

Danke für die Antwort. Leider funktionieren diese Optionen in meinem Szenario nicht. Normalerweise verwende ich die Anaconda-Kanäle, um vorkompilierte Binaries zu bekommen, besonders für komplexe Abhängigkeiten wie llvmlite. In diesem aktuellen Projekt basiert es jedoch bereits auf einer Datei pip requirements.txt. Sie sollten davon ausgehen, dass ich eine Begleitumgebung.yml wegen Projektbeschränkungen nicht gleichzeitig verwenden kann. – ely

+0

In Bezug auf Ihren ersten Punkt über den Speicherort von CONDA_PREFIX für das gemeinsame Objekt llvm, schauen Sie sich auch den ersten Teil der Fehlermeldungen in meiner Frage an. Sie zeigen, dass das gemeinsame Objekt,/home/user/anaconda2/envs/test-env/lib/python3.5/site-packages/llvmlite/binding/libllvmlite.so existiert (ich kann es leicht in der Datei sehen System). Die vorkompilierte Binärdatei, die von conda über 'llvmdev' installiert wurde, weist jedoch den fehlenden Symbolfehler auf, und es ist unklar, warum eine von Conda installierte Abhängigkeit dieses Problem haben könnte. – ely

0

Installation llvmdev: Installation llvmdev vom Conda-Schmiede Kanal kann durch Zugabe erreicht werden Conda-Schmiede auf Ihre Kanäle mit:

conda config --add channels conda-forge 

Sobald der conda-forge Kanal aktiviert wurde , llvmdev mit installiert werden kann:

conda install llvmdev 

Es ist möglich, l ist alle Versionen von llvmdev auf Ihrer Plattform mit:

conda search llvmdev --channel conda-forge 

HELP: geklonten ich die entsprechenden Dateien von ihren Quellen GitHub und tat

python setup.py install 

für mehr ohne Conda Verwendung pip

Verwandte Themen