为啥我不能从 Spyder 导入 scikit-learn,但我可以从命令行导入?

Posted

技术标签:

【中文标题】为啥我不能从 Spyder 导入 scikit-learn,但我可以从命令行导入?【英文标题】:Why can't I import scikit-learn from Spyder, but I can import it from the command line?为什么我不能从 Spyder 导入 scikit-learn,但我可以从命令行导入? 【发布时间】:2021-07-21 23:40:20 【问题描述】:

我使用 Spyder 网站上的独立安装程序为 MacOS Big Sur 安装了 Spyder 5(即不需要 Anaconda)。我一直在使用 Spyder 4.2.1 并成功导入了 scikit-learn。但是,在我安装了 Spyder 5 后,我无法导入 scikit-learn,并且出现 ModuleNotFound 错误。所以我从放置它的“Library/Python/2.7/lib/python/site-packages”目录中删除了“sklearn”目录,并重新安装了scikit-learn与

pip install -U scikit-learn 

正如 scikit-learn 网站上所说的那样。我现在可以从我的 Mac 终端命令行导入模块,但是当我尝试使用 Spyder 时,我收到一条长消息,其中包括

ImportError: dlopen(/Users/my_user_name/Library/Python/2.7/lib/python/site-packages/sklearn/__check_build/_check_build.so, 2): Symbol not found: __PyThreadState_Current 引用自:/Users/my_user_name/Library/Python/2.7/lib/python/site-packages/sklearn/__check_build/_check_build.so 预期在:平面命名空间 在 /Users/my_username/Library/Python/2.7/lib/python/site-packages/sklearn/__check_build/_check_build.so

还有

scikit-learn 好像没有正确构建。

如果你已经从源代码安装了 scikit-learn,请不要忘记 在使用之前构建包:运行python setup.py installmake 在源目录中。

如果您使用过安装程序,请检查它是否适合您的 Python 版本、您的操作系统和您的平台。

此时我能做什么?

【问题讨论】:

ImportError 引用 python-2.7pip3 会发生这种情况吗? @AlexanderL.Hayes,一点关系都没有。这看起来不像是 Spyder 问题,而是安装问题。 (这里是 Spyder 维护者) 如果您想使用我们安装程序未附带的其他模块,请安装Miniconda,然后创建一个conda environment使用您要使用的软件包和spyder-kernels,最后是connect Spyder 到那个环境。 谢谢你,卡洛斯。我尝试了您的建议,但它在我的机器上不太有效。不过,我会再试一次。 【参考方案1】:

你需要安装依赖: scikit-learn 需要:

Python (>= 3.6)

NumPy (>= 1.13.3)

SciPy (>= 0.19.1)

joblib (>= 0.11)

threadpoolctl (>= 2.0.0)

为了好结果requirements.txt

注意:Scikit-learn 0.20 是支持 Python 2.7 和 Python 3.4 的最后一个版本。 scikit-learn 0.23 及更高版本需要 Python 3.6 或更高版本。

pip install scikit-learn==0.20.4

了解更多请转到this

【讨论】:

以上是关于为啥我不能从 Spyder 导入 scikit-learn,但我可以从命令行导入?的主要内容,如果未能解决你的问题,请参考以下文章

为啥当我使用 Pygame 时 Spyder 不能在任何地方显示我的图形输出?

为啥要导入 pdb; pdb.set_trace 在 Spyder 中以不同方式调用时会触发两种不同的调试场景?

Spyder 未从 Anaconda 环境之一启动

如何将 conda 库导入单独的 Spyder 发行版?

为啥 Python 不能从 PIL 导入图像?

scikit-learn.impute 没有使用机器学习 A-Z 教程中的代码通过 Spyder 从 Imputer 导入