Как импортировать scikit-learn в виртуальную среду Python?

Эта проблема

Я пытаюсь использовать scikit-learn в виртуальной среде и не могу запустить его.

Итак, например, я захожу в папку проекта и устанавливаю NumPy, SciPy и scikit-learn.

virtualenv venv source venv/bin/activate pip install numpy pip install scipy pip install scikit-learn

Затем я открываю python и пытаюсь импортировать каждый из них.

import numpy import scipy import sklearn

NumPy и SciPy импортируются нормально, но когда я пытаюсь импортировать, я получаю сообщение об ошибке Library not loaded: @rpath/./libgfortran.3.dylib.

Я что-то упустил в установке?

Полное сообщение об ошибке: Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/Users/Peter/git/dataSandbox/flaskApps/sfSalary/venv/lib/python2.7/site-packages/sklearn/__init__.py", line 57, in <module> from .base import clone File "/Users/Peter/git/dataSandbox/flaskApps/sfSalary/venv/lib/python2.7/site-packages/sklearn/base.py", line 11, in <module> from .utils.fixes import signature File "/Users/Peter/git/dataSandbox/flaskApps/sfSalary/venv/lib/python2.7/site-packages/sklearn/utils/__init__.py", line 11, in <module> from .validation import (as_float_array, File "/Users/Peter/git/dataSandbox/flaskApps/sfSalary/venv/lib/python2.7/site-packages/sklearn/utils/validation.py", line 16, in <module> from ..utils.fixes import signature File "/Users/Peter/git/dataSandbox/flaskApps/sfSalary/venv/lib/python2.7/site-packages/sklearn/utils/fixes.py", line 324, in <module> from scipy.sparse.linalg import lsqr as sparse_lsqr File "/Users/Peter/git/dataSandbox/flaskApps/sfSalary/venv/lib/python2.7/site-packages/scipy/sparse/linalg/__init__.py", line 109, in <module> from .isolve import * File "/Users/Peter/git/dataSandbox/flaskApps/sfSalary/venv/lib/python2.7/site-packages/scipy/sparse/linalg/isolve/__init__.py", line 6, in <module> from .iterative import * File "/Users/Peter/git/dataSandbox/flaskApps/sfSalary/venv/lib/python2.7/site-packages/scipy/sparse/linalg/isolve/iterative.py", line 7, in <module> from . import _iterative ImportError: dlopen(/Users/Peter/git/dataSandbox/flaskApps/sfSalary/venv/lib/python2.7/site-packages/scipy/sparse/linalg/isolve/_iterative.so, 2): Library not loaded: @rpath/./libgfortran.3.dylib Referenced from: /Users/Peter/git/dataSandbox/flaskApps/sfSalary/venv/lib/python2.7/site-packages/scipy/sparse/linalg/isolve/_iterative.so Reason: image not found

РЕДАКТИРОВАТЬ: это было устранение неполадок при размещении приложения Heroku с использованием sklearn.


person plfrick    schedule 18.11.2015    source источник


Ответы (1)


Я бы настоятельно рекомендовал против использовать виртуальные среды для NumPy/SciPy/Scikit-learn и других пакетов, которые включают скомпилированный код. Виртуальные среды достаточно хорошо справляются с чистыми зависимостями Python, но для скомпилированных расширений с зависимостями вне Python они могут неожиданно дать сбой (как вы видели).

Если вы хотите управлять несколькими средами с разными версиями пакетов Python, включая скомпилированные расширения, лучшим инструментом, вероятно, является conda и, в частности, среды conda.

С его помощью вы можете запустить следующее:

$ conda create -n myenv python=3.4 numpy scipy scikit-learn
$ source activate myenv
(myenv) $ python
Python 3.4.3
>>> import sklearn

и вы будете хорошо идти.

person jakevdp    schedule 19.11.2015
comment
Спасибо @jakevdp! Ожидается голосование... Да, переход на среду conda был ключевым моментом. Для всех, кому это может быть интересно, это было сделано для использования sklearn в приложении Heroku. Оказывается, еще одним требованием было обновление LD_LIBRARY_PATH. Перейдите по этой ссылке, и все будет хорошо. - person plfrick; 21.11.2015
comment
Хороший ответ, но что, если я хочу остаться в виртуальной среде и не переключаться на conda? - person desmond13; 29.04.2020
comment
Затем вам нужно вручную управлять взаимодействием вашей виртуальной среды с системными зависимостями, отличными от Python. - person jakevdp; 29.04.2020