TypeError:导入 sklearn 时需要一个整数(获取类型字节)

Sal*_*hur 8 python machine-learning scikit-learn

import pandas
from sklearn import tree
import pydotplus
from sklearn.tree import DecisionTreeClassifier
import matplotlib.pyplot as plt
import matplotlib.image as pltimg

dtree = DecisionTreeClassifier()
dtree = dtree.fit(X, y)
y_pred = dtree.predict(X)
y_pred
Run Code Online (Sandbox Code Playgroud)

错误 ::

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-33-745bbfa9769b> in <module>
      1 import pandas
----> 2 from sklearn import tree
      3 import pydotplus
      4 from sklearn.tree import DecisionTreeClassifier
      5 import matplotlib.pyplot as plt

~/opt/anaconda3/lib/python3.8/site-packages/sklearn/__init__.py in <module>
     62 else:
     63     from . import __check_build
---> 64     from .base import clone
     65     from .utils._show_versions import show_versions
     66 

~/opt/anaconda3/lib/python3.8/site-packages/sklearn/base.py in <module>
     12 from scipy import sparse
     13 from .externals import six
---> 14 from .utils.fixes import signature
     15 from .utils import _IS_32BIT
     16 from . import __version__

~/opt/anaconda3/lib/python3.8/site-packages/sklearn/utils/__init__.py in <module>
     12 from .murmurhash import murmurhash3_32
     13 from .class_weight import compute_class_weight, compute_sample_weight
---> 14 from . import _joblib
     15 from ..exceptions import DataConversionWarning
     16 from .fixes import _Sequence as Sequence

~/opt/anaconda3/lib/python3.8/site-packages/sklearn/utils/_joblib.py in <module>
     20         from joblib import parallel_backend, register_parallel_backend
     21 else:
---> 22     from ..externals import joblib
     23     from ..externals.joblib import logger
     24     from ..externals.joblib import dump, load

~/opt/anaconda3/lib/python3.8/site-packages/sklearn/externals/joblib/__init__.py in <module>
    117 from .numpy_pickle import load
    118 from .compressor import register_compressor
--> 119 from .parallel import Parallel
    120 from .parallel import delayed
    121 from .parallel import cpu_count

~/opt/anaconda3/lib/python3.8/site-packages/sklearn/externals/joblib/parallel.py in <module>
     26 from .my_exceptions import TransportableException
     27 from .disk import memstr_to_bytes
---> 28 from ._parallel_backends import (FallbackToBackend, MultiprocessingBackend,
     29                                  ThreadingBackend, SequentialBackend,
     30                                  LokyBackend)

~/opt/anaconda3/lib/python3.8/site-packages/sklearn/externals/joblib/_parallel_backends.py in <module>
     20     from .pool import MemmappingPool
     21     from multiprocessing.pool import ThreadPool
---> 22     from .executor import get_memmapping_executor
     23 
     24     # Compat between concurrent.futures and multiprocessing TimeoutError

~/opt/anaconda3/lib/python3.8/site-packages/sklearn/externals/joblib/executor.py in <module>
     12 from .disk import delete_folder
     13 from ._memmapping_reducer import get_memmapping_reducers
---> 14 from .externals.loky.reusable_executor import get_reusable_executor
     15 
     16 

~/opt/anaconda3/lib/python3.8/site-packages/sklearn/externals/joblib/externals/loky/__init__.py in <module>
     10 
     11 from .backend.context import cpu_count
---> 12 from .backend.reduction import set_loky_pickler
     13 from .reusable_executor import get_reusable_executor
     14 from .cloudpickle_wrapper import wrap_non_picklable_objects

~/opt/anaconda3/lib/python3.8/site-packages/sklearn/externals/joblib/externals/loky/backend/reduction.py in <module>
    123 # global variable to change the pickler behavior
    124 try:
--> 125     from sklearn.externals.joblib.externals import cloudpickle  # noqa: F401
    126     DEFAULT_ENV = "cloudpickle"
    127 except ImportError:

~/opt/anaconda3/lib/python3.8/site-packages/sklearn/externals/joblib/externals/cloudpickle/__init__.py in <module>
      1 from __future__ import absolute_import
      2 
----> 3 from .cloudpickle import *
      4 
      5 __version__ = '0.6.1'

~/opt/anaconda3/lib/python3.8/site-packages/sklearn/externals/joblib/externals/cloudpickle/cloudpickle.py in <module>
    165 
    166 
--> 167 _cell_set_template_code = _make_cell_set_template_code()
    168 
    169 

~/opt/anaconda3/lib/python3.8/site-packages/sklearn/externals/joblib/externals/cloudpickle/cloudpickle.py in _make_cell_set_template_code()
    146         )
    147     else:
--> 148         return types.CodeType(
    149             co.co_argcount,
    150             co.co_kwonlyargcount,

TypeError: an integer is required (got type bytes)
Run Code Online (Sandbox Code Playgroud)

所以我不断收到这种类型的错误,并且不知道该怎么做才能确定 sklearn 已安装。X 和 y 都是在创建要使用的训练集后预先定义的。我尝试过重新安装 scikit-learn、降级 python 并通过终端安装,但这些都没有帮助。只是无法弄清楚这里的问题是什么,非常感谢对此的一些帮助

Igu*_*aut 5

我能够通过运行在 conda 环境中重现该问题,但随后通过运行conda install python==3.8 scikit-learn手动降级,因为与 Python 3.8 不兼容。joblibpip install joblib<0.14joblib<0.14

我不太确定你是如何陷入这种情况的,但它应该修复它以首先卸载joblib可能错误安装的任何软件包:

$ pip uninstall joblib
Run Code Online (Sandbox Code Playgroud)

然后用 conda 强制重新安装/升级它:

$ conda update --force-reinstall joblib
Run Code Online (Sandbox Code Playgroud)

确认安装了正确的版本:

$ python -c 'import joblib; print(joblib.__version__)'
0.17.0
Run Code Online (Sandbox Code Playgroud)

如果所有其他方法均失败,请尝试创建全新的 Anaconda 安装。确保安装带有conda install和 不带 的软件包pip