Установка по умолчанию в Dask дает "ImportError: No module named toolz"

Я установил Dask, используя пипс следующим образом:

pip install dask

и когда я пытаюсь сделать import dask.dataframe as dd я получаю следующее сообщение об ошибке:

>>> import dask.dataframe as dd
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/path/to/venv/lib/python2.7/site-packages/dask/__init__.py", line 5, in <module>
    from .async import get_sync as get
  File "/path/to/venv/lib/python2.7/site-packages/dask/async.py", line 120, in <module>
    from toolz import identity
ImportError: No module named toolz
No module named toolz

Я заметил, что в документации указано

pip install dask: Установить только dask, который зависит только от стандартной библиотеки. Это необходимо, если вам нужны только планировщики задач.

поэтому я смущен, почему это не сработало.

Ответы

Ответ 1

Чтобы использовать распараллеленные кадры данных Dask (построенные поверх панд), вы должны указать pip установить некоторые "дополнения" (ссылка), как указано в документации по установке Dask:

pip install "dask[dataframe]"

Или ты можешь просто сделать

pip install "dask[complete]"

чтобы получить всю сумку трюков. NB. Двойные кавычки могут или не могут потребоваться в вашей оболочке.

Обоснование этого (или было) упомянуто в документации Dask:

Мы делаем это так, чтобы пользователям облегченного основного планировщика даска не приходилось загружать более экзотические зависимости коллекций (numpy, pandas и т.д.)

Как упоминалось в ответе Обинны, вы можете захотеть сделать это внутри virtualenv или использовать pip install --user, чтобы поместить библиотеки в ваш домашний каталог, если, скажем, у вас нет прав администратора на хост ОС.

Дополнительные детали

В Dask 0.13.0 и ниже существовало требование для функции toolz'identity в dask/async.py. Существует открытый закрытый запрос на извлечение, связанный с GitHub , проблема # 1849, чтобы удалить эту зависимость. А пока Если по какой-то причине вы застряли на старой версии dask, вы можете обойти эту конкретную проблему, просто выполнив pip install toolz.

Но это не (полностью) не решит вашу проблему с import dask.dataframe as dd в любом случае. Потому что вы все равно получите эту ошибку:

>>> import dask.dataframe as dd
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/data/staff_agbio/PhyloWeb/data/dask-test/venv/local/lib/python2.7/site-packages/dask/dataframe/__init__.py", line 3, in <module>
    from .core import (DataFrame, Series, Index, _Frame, map_partitions,
  File "/data/staff_agbio/PhyloWeb/data/dask-test/venv/local/lib/python2.7/site-packages/dask/dataframe/core.py", line 12, in <module>
    import pandas as pd
ImportError: No module named pandas

или если у вас уже установлены панды, вы получите ImportError: No module named cloudpickle. Таким образом, pip install "dask[dataframe]", кажется, является подходящим вариантом, если вы находитесь в такой ситуации.

Ответ 2

У меня была та же самая проблема, и это было то, что исправило это для меня.

  1. Создайте виртуальную среду для вашего проекта
  2. Cd каталог вашего проекта (не требуется, если вы хорошо разбираетесь в каталогах)
  3. Активируйте вашу виртуальную среду
  4. pip install "dask[complete]": Это установит все. Возможно, вы захотите установить только данный компонент, такой как dataframe, затем используйте pip install "dask[dataframe]"

Суть в том, что я должен был находиться в моей виртуальной среде; это установит Dask только для этого env.

Ответ 3

Requeriment.txt работает:

awscli==1.16.69
botocore=1.13.0
boto3==1.9.79
numpy==1.16.2
dask[complete]

Ответ 4

conda install dask
conda install dask-core

Решил проблему для меня.