sourcetip

가져오기 오류: 'sklearn.externals'에서 'joblib' 이름을 가져올 수 없습니다.

fileupload 2023. 5. 18. 21:25
반응형

가져오기 오류: 'sklearn.externals'에서 'joblib' 이름을 가져올 수 없습니다.

저장된 모델을 로드하려고 합니다.s3사용.joblib

import pandas as pd 
import numpy as np
import json
import subprocess
import sqlalchemy
from sklearn.externals import joblib

ENV = 'dev'
model_d2v = load_d2v('model_d2v_version_002', ENV)

def load_d2v(fname, env):
    model_name = fname
    if env == 'dev':
        try: 
            model=joblib.load(model_name)
        except:
            s3_base_path='s3://sd-flikku/datalake/doc2vec_model'
            path = s3_base_path+'/'+model_name
            command = "aws s3 cp {} {}".format(path,model_name).split()
            print('loading...'+model_name)
            subprocess.call(command)
            model=joblib.load(model_name)
    else:
        s3_base_path='s3://sd-flikku/datalake/doc2vec_model'
        path = s3_base_path+'/'+model_name
        command = "aws s3 cp {} {}".format(path,model_name).split()
        print('loading...'+model_name)
        subprocess.call(command)
        model=joblib.load(model_name)
    return model

하지만 다음과 같은 오류가 발생합니다.

    from sklearn.externals import joblib
ImportError: cannot import name 'joblib' from 'sklearn.externals' (C:\Users\prane\AppData\Local\Programs\Python\Python37\lib\site-packages\sklearn\externals\__init__.py)

그런 다음 설치를 시도했습니다.joblib직접 함으로써

import joblib

하지만 그것은 나에게 이 오류를 주었습니다.

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 8, in load_d2v_from_s3
  File "/home/ec2-user/.local/lib/python3.7/site-packages/joblib/numpy_pickle.py", line 585, in load
    obj = _unpickle(fobj, filename, mmap_mode)
  File "/home/ec2-user/.local/lib/python3.7/site-packages/joblib/numpy_pickle.py", line 504, in _unpickle
    obj = unpickler.load()
  File "/usr/lib64/python3.7/pickle.py", line 1088, in load
    dispatch[key[0]](self)
  File "/usr/lib64/python3.7/pickle.py", line 1376, in load_global
    klass = self.find_class(module, name)
  File "/usr/lib64/python3.7/pickle.py", line 1426, in find_class
    __import__(module, level=0)
ModuleNotFoundError: No module named 'sklearn.externals.joblib'

이것을 어떻게 해결해야 하는지 알려주실 수 있나요?

직접 사용해야 합니다.

import joblib

대신에

from sklearn.externals import joblib

기존 피클 저장 파일처럼 보입니다.model_d2v_version_002) 비표준 위치에서 기준 모듈을 인코딩합니다. – ajoblib에 있는sklearn.externals.joblib최고 수준이라기 보다는.

해류scikit-learn문서는 최상위 수준에 대해서만 설명합니다.joblib를 들어 3.4.1 지속성 예제 - 그러나 나는 다른 사람의 이전 호에서 권장되지 않는 경고에 대한 언급을 봅니다.scikit-learn버전 0.21 이전 버전 정보scikit.external.joblib변형 제거:

Python37\lib\site-packages\sklearn\externals\joblib_init_.py:15: 사용 중지 경고: sklearn.externals.joblib는 0.21에서 사용되지 않으며 0.23에서 제거됩니다.이 기능은 다음과 같이 설치할 수 있는 joblib에서 직접 가져오십시오. pip install joblib.절임 모델을 로드할 때 이 경고가 발생하면 skikit-learn 0.21+로 해당 모델을 다시 직렬화해야 할 수 있습니다.

'권장'은 미래의 릴리스에서 중단될 가능성이 높기 때문에 의존하기에 바람직하지 않은 것으로 표시하는 것을 의미합니다(항상 그렇지는 않지만 권장되는 새로운 방법으로 동일한 작업을 수행할 수 있습니다).

당신이 의심되는군요.model_d2v_version_002의 이전 버전에서 파일이 저장되었습니다.scikit-learn그리고 당신은 지금 사용하고 있습니다.scikit-learn(일명)sklearn) 버전 0.23+가 완전히 제거되었습니다.sklearn.external.joblib변화.따라서 파일을 현재 환경에 직접 또는 쉽게 로드할 수 없습니다.

하지만, 그에 따라DeprecationWarning당신은 아마도 일시적으로 오래된 것을 사용할 수 있습니다.scikit-learn이전 방식으로 파일을 한 번 로드한 다음 현재 방식으로 다시 저장합니다.경고 정보를 고려할 때, 이것은 아마도 필요할 것입니다.scikit-learn버전 0.21.x 또는 0.22.x. 하지만 정확히 어떤 버전인지 알고 있다면model_d2v_version_002파일이 저장되었습니다. 사용해 보겠습니다.단계는 대략 다음과 같습니다.

  • 이전 사용자와 함께 임시 작업 환경 만들기(또는 현재 작업 환경 롤백)sklearn

  • 다음과 같은 것을 가져옵니다.

import sklearn.external.joblib as extjoblib
import joblib
  • extjoblib.load()이전 파일을 계획대로 사용할 수 있지만, 즉시 다시 사용할 수 있습니다.joblib.dump()최상위 레벨을 사용하는 파일joblib(만약을 위해 이전 파일을 보관하기 위해 고유한 이름을 사용하는 것이 좋습니다.)

  • 으로 이동/할 수 , 유일하게 사용할 수 있습니다.import joblib 레벨)을합니다.joblib.load()코드 또는 저장된 피클 파일에서 'sklearn.external.joblib'에 대한 참조가 더 이상 없습니다.

가올수다니있을 가져올 수 .joblib하고 종성으로사직용접여하를 사용하여 import joblib,

설명서.

코드가 오래된 것일 수 있습니다.사용을 목표로 하는 모든 사용자에게fetch_mldata손으로 쓴 숫자 프로젝트에서, 당신은 해야 합니다.fetch_openml대신.(링크)

이전 버전의 sklearn:

from sklearn.externals import joblib
mnist = fetch_mldata('MNIST original')

Insklearn 0.23(안정적 릴리스):

import sklearn.externals
import joblib
    
dataset = datasets.fetch_openml("mnist_784")

features = np.array(dataset.data, 'int16')
labels = np.array(dataset.target, 'int')

사용 중지에 대한 자세한 내용은 다음과 같습니다.fetch_mldata스크킷 학습 문서 참조

아래 답변 중 저에게 맞는 것은 없습니다. 약간의 변경 사항이 있으면 이 수정 사항은 괜찮았습니다.

import sklearn.externals as extjoblib
import joblib

이 오류에 대해, 저는 다음을 직접 사용해야 했고 그것은 매력적으로 작동했습니다.

import joblib

간단하죠.

joblib에 대한 실행/호출이 자신의 프로그램이 아닌 다른 .py 프로그램 내에 있는 경우(그런 경우에도 joblib을 설치한 경우에도 코드를 변경하지 않는 한 호출 파이썬 프로그램 내에서 오류가 발생합니다.) 하드 링크를 만들려고 했습니다.

(윈도우즈 버전)

Python > 가져오기 joblib

그러면 sklearn 경로 내부 >......\Lib\site-packages\sklearn\externals

mklink /J . /joblib ...\Lib\site-packages\joblib

(Python juptyter 노트북에 있는 ! 또는 %, !mklink...... 또는 %mklink......를 사용하여 위의 문제를 해결하거나 python OS 명령을 사용할 수 있습니다.)

이렇게 하면 "외부" 폴더 내에 작업lib의 가상 폴더를 효과적으로 생성할 수 있습니다.

비고: 물론 버전 복원력을 높이기 위해서는 코드가 사전에 sklearn 버전이 >= 0.23인지 다시 확인해야 합니다.

이는 sklearn 버전을 변경하는 대신 사용할 수 있습니다.

joblib의 가상 폴더에 대한 하드 링크

오류가 발생할 때:

sklearn.externals import joblib에서 이전 버전을 사용하지 않습니다.

새 버전의 경우 다음을 수행합니다.

  1. 콘다 설치 - canaconda sikit-learn ("아나콘다 프롬"을 사용하여 설치)
  2. joblib 가져오기(Jupter Notebook)

저도 같은 문제가 있었습니다.

제가 미처 깨닫지 못한 것은 joblib이 이미 설치되어 있다는 것입니다!

그래서 당신이 해야 할 일은 대체하는 것입니다.

from sklearn.externals import joblib

와 함께

import joblib

이상입니다

오랜 시간 조사한 결과, 컴퓨터 설정을 고려했을 때 데이터 세트를 다운로드하려면 SSL 인증서가 필요했기 때문입니다.

언급URL : https://stackoverflow.com/questions/61893719/importerror-cannot-import-name-joblib-from-sklearn-externals

반응형

'sourcetip' 카테고리의 다른 글

Xcode 변수  (0) 2023.05.18
WPF 텍스트 상자의 수직 정렬  (0) 2023.05.18
Xcode로 코드를 포맷하는 방법은?  (0) 2023.05.18
오른쪽에서 왼쪽으로?  (0) 2023.05.18
Node.js 모범 사례 예외 처리  (0) 2023.05.18