从scikit learn导入时出现“ImportError:无法导入名称_remove_dead_weakref”

4

问题描述

在调用Python脚本时,出现以下错误:

Traceback (most recent call last):
  File "/path/t/file/file.py", line 61, in <module>
    from sklearn.externals import joblib
  File "/anaconda2/lib/python2.7/site-packages/sklearn/__init__.py", line 20, in <module>
    import logging
  File "/anaconda2/lib/python2.7/logging/__init__.py", line 26, in <module>
    import sys, os, time, cStringIO, traceback, warnings, weakref, collections
  File "/anaconda2/lib/python2.7/weakref.py", line 14, in <module>
    from _weakref import (
ImportError: cannot import name _remove_dead_weakref
Failed to load file

正如错误日志中所述,当我导入时会发生这种情况:
from sklearn.externals import joblib

注意事项

注意1: 仅调用import sklearn也会产生此错误。

注意2: 仅运行没有其他导入语句和文件中其余代码注释的情况下,也会产生错误。

注意3: Objective-C代码通过Python C API (https://docs.python.org/2/c-api/index.html) 调用此Python文件。 在另一台具有完全相同规格和操作系统的机器上运行正常(请参见以下详细信息)。

注意4: 如果我从终端调用Python然后调用import sklearnfrom sklearn.externals import joblib(不是从Objective-C调用),则没有错误。

注意5: 我不认为我安装了任何虚拟环境。我尝试在终端上调用pyenvpyvenvvirtualenv,总是得到-bash: pyvenv: command not found

详细信息

我尝试在两台配置相同、运行Mac OS 10.13的MacBook Pro上进行测试。(代码在其中一台机器上可以工作,在另一台机器上失败)

我已经在代码失败的机器上添加了以下行:

(a)可执行文件调用的脚本和(b)终端上的Python CLI:

print ">>>>>>>>>"+str(sys.executable)
print ">>>>>>>>>"+str(sys.version)
print "++++++++++++++++++++++++++++++++++++++++++++++++++++"
for p in sys.path: 
    print p

脚本执行失败的输出:
>>>>>>>>>/anaconda2/bin/python
>>>>>>>>>2.7.10 (default, Feb  6 2017, 23:53:20) 
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)]
++++++++++++++++++++++++++++++++++++++++++++++++++++
/anaconda2/lib/python27.zip
/anaconda2/lib/python2.7
/anaconda2/lib/python2.7/plat-darwin
/anaconda2/lib/python2.7/plat-mac
/anaconda2/lib/python2.7/plat-mac/lib-scriptpackages
/anaconda2/lib/python2.7/lib-tk
/anaconda2/lib/python2.7/lib-old
/anaconda2/lib/python2.7/lib-dynload
/anaconda2/lib/python2.7/site-packages
/anaconda2/lib/python2.7/site-packages/aeosa
~/Desktop/Test Software/Sources/*****/path/to/.py/file/*****/Classification

终端输出:

>>> sys.executable
'/anaconda2/bin/python'

>>> sys.version
'2.7.14 |Anaconda, Inc.| (default, Dec  7 2017, 11:07:58) \n[GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)]'

>>> for p in sys.path:
...     print p
... 

/anaconda2/lib/python27.zip
/anaconda2/lib/python2.7
/anaconda2/lib/python2.7/plat-darwin
/anaconda2/lib/python2.7/plat-mac
/anaconda2/lib/python2.7/plat-mac/lib-scriptpackages
/anaconda2/lib/python2.7/lib-tk
/anaconda2/lib/python2.7/lib-old
/anaconda2/lib/python2.7/lib-dynload
/anaconda2/lib/python2.7/site-packages
/anaconda2/lib/python2.7/site-packages/aeosa

基本上,我得到的东西是一样的,除了版本之外,而且(显然)我也看到了搜索路径中.py文件的路径。

你能发布 which python python3 的输出吗? - Abhi
2个回答

1
尝试卸载并重新安装您的软件包:

conda uninstall scikit-learn


0

尝试按照以下命令操作。我曾经遇到过类似的问题,使用以下命令解决:

  1. sudo pip uninstall scikit-learn
  2. sudo pip install -U scikit-learn

确保满足以下依赖项: Scikit-learn 需要:

Python (>= 2.7 或 >= 3.3) NumPy (>= 1.8.2), SciPy (>= 0.13.3)

另外请查看此 链接

对于 Note5: pyenv 命令在 Python 2 中不存在。 您可以改用 virtualenv


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接