Dask 的默认 pip 安装给出“ImportError: No module named toolz”

Posted

技术标签:

【中文标题】Dask 的默认 pip 安装给出“ImportError: No module named toolz”【英文标题】:Default pip installation of Dask gives "ImportError: No module named toolz" 【发布时间】:2017-05-18 03:12:00 【问题描述】:

我使用 pip 安装了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

我注意到the documentation 状态

pip install dask:只安装dask,只依赖标准库。如果您只需要任务调度程序,这是合适的。

所以我很困惑为什么这不起作用。

【问题讨论】:

【参考方案1】:

为了使用 Dask 的并行数据帧(建立在 pandas 之上),您必须告诉 pip 安装一些“附加”(reference),如Dask installation documentation 中所述:

pip install "dask[dataframe]"

或者你可以这样做

pip install "dask[complete]"

获得全部技巧。 注意:你的 shell 中可能需要也可能不需要双引号。

Dask 文档中提到了(或曾经)这样做的理由:

我们这样做是为了让轻量级核心 dask 调度程序的用户无需下载集合(numpy、pandas 等)的更奇特的依赖项

如Obinna's answer 中所述,您可能希望在 virtualenv 中执行此操作,或者使用pip install --user 将库放在您的主目录中,例如,如果您没有主机操作系统的管理员权限.

额外细节

在 Dask 0.13.0 及更低版本中,dask/async.py 中的 toolz'identity 函数有一个要求。 一个打开的一个与 GitHub issue #1849 关联的关闭的拉取请求以删除此依赖项。 与此同时如果由于某种原因,您被旧版本的 dask 卡住了,您可以通过简单地执行 pip install toolz 来解决那个特定问题。

但是无论如何,这不会(完全)解决您的import dask.dataframe as dd 问题。因为你仍然会得到 this 错误:

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

或者如果你已经安装了 pandas,你会得到ImportError: No module named cloudpickle。因此,如果您处于这种情况,pip install "dask[dataframe]" 似乎是您的最佳选择。

【讨论】:

我认为应该是 pip install "dask[complete]"。如果没有双引号,它可能会抛出错误>>找不到匹配项。 @ObinnaNnenanya 这可能取决于您的外壳(适用于我,没有双引号)。但是双引号不会受到伤害,所以我还是更新了答案。 :)【参考方案2】:

我遇到了同样的问题,这就是为我解决的问题。

    为您的项目创建一个虚拟环境 CD 你的项目目录(如果你擅长目录导航,则不需要) 激活你的虚拟环境 pip install "dask[complete]" :这将安装所有内容。你可能希望只安装一个给定的组件,比如数据框,然后使用pip install "dask[dataframe]"

底线是我必须在我的虚拟环境中;这只会为这个环境安装 dask。

【讨论】:

【参考方案3】:

就我而言,在 Windows 机器上使用 anaconda,以下是解决此问题的步骤:

    conda install dask conda 安装 dask-core 安装此基于 github评论!pip install tornado==5.0.0 distributed==2.15 dask-ml[complete] 重新启动我的 anaconda。

【讨论】:

嗨,哈桑,感谢您的意见。不过,这个问题被标记为pip。或许如果 Anaconda 的类似问题尚不存在,您可以创建您自己版本的这个问题(和answer it yourself)?【参考方案4】:

使用下面的命令。

pip install "dask[dataframe]"

【讨论】:

欢迎来到 ***。虽然此代码可能会解决问题,但包括解释如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请编辑您的答案以添加解释并说明适用的限制和假设。看看这里→How do I write a good answer?【参考方案5】:

requeriments.txt 工作:

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

【讨论】:

如果你有dask[complete],你既不需要单独的特定 numpy 也不需要特定的 pandas 版本来让 dask 工作。您能否详细说明为什么要使用这些特定版本?

以上是关于Dask 的默认 pip 安装给出“ImportError: No module named toolz”的主要内容,如果未能解决你的问题,请参考以下文章

在vue中使用jquery

使用默认调度程序进行Dask内存管理

我可以在 Dask/Distributed 中使用从 .py 文件导入的函数吗?

python Dask分布式安装

与 Dask 共享内存

在 dask 或 Dramatiq 中带有 (bind=True) 的芹菜?