반응형

Jupyter Notebook에서 Python 모듈을 임포트하려고 할 때 ModuleNotFoundError: No module named 'common.functions' 오류가 발생하는 경우가 있습니다. 이 문제는 주로 작업 디렉토리와 모듈 경로가 일치하지 않거나, 경로 설정이 잘못된 경우에 발생합니다. 이번 포스팅에서는 이 문제의 원인과 해결 방법을 단계별로 정리합니다.


문제의 원인

  1. 모듈 경로 불일치
    • common/functions.py가 Jupyter Notebook에서 실행 중인 파일(notebook.ipynb)과 서로 다른 디렉토리에 위치해 있으면 Python이 모듈을 찾을 수 없습니다.
  2. Jupyter Notebook 작업 디렉토리(CWD) 문제
    • Jupyter Notebook은 **현재 작업 디렉토리(CWD)**를 기준으로 파일을 찾습니다.
    • 그러나 Jupyter Notebook을 실행하는 서버의 디렉토리가 기본 디렉토리로 설정될 수 있어, common/functions.py가 있는 경로와 일치하지 않을 수 있습니다.
  3. 경로 설정 오류
    • 상대 경로(os.pardir)를 사용할 때 Jupyter Notebook 환경에서 경로가 올바르게 설정되지 않을 수 있습니다.

해결 방법

다음은 Jupyter Notebook에서 ModuleNotFoundError를 해결하기 위한 구체적인 방법입니다.

1. 현재 작업 디렉토리 확인 및 설정

작업 디렉토리를 확인하고, 필요한 경우 올바른 디렉토리로 변경합니다.

import os

# 현재 작업 디렉토리 확인
print("현재 작업 디렉토리:", os.getcwd())

# 필요한 경우 작업 디렉토리를 변경
os.chdir('/absolute/path/to/project_directory')  # common 디렉토리의 부모 디렉토리로 변경
print("변경된 작업 디렉토리:", os.getcwd())​

2. Python 경로에 common 디렉토리 추가

Jupyter Notebook이 common/functions.py를 찾을 수 있도록 Python 경로에 common 디렉토리를 추가합니다.

import sys

# common 디렉토리의 부모 디렉토리를 Python 경로에 추가
sys.path.append('/absolute/path/to/project_directory')​

3. 프로젝트 디렉토리 구조 확인

Python 모듈이 있는 디렉토리와 Jupyter Notebook 파일의 위치가 아래와 같이 구성되어 있어야 합니다.

project_directory/
├── common/
│   ├── functions.py
│   ├── gradient.py
├── notebook.ipynb  # Jupyter Notebook 파일​

여기서 notebook.ipynb는 common 디렉토리와 같은 부모 디렉토리에 위치해야 합니다.


4. 모듈 임포트

경로를 제대로 설정한 뒤, 원하는 모듈을 임포트합니다.

from common.functions import softmax, cross_entropy_error
from common.gradient import numerical_gradient​

5. 절대 경로를 사용하여 경로 설정

상대 경로(os.pardir) 대신 절대 경로를 사용하여 Python 경로를 명확히 설정합니다.

import os
import sys

# 절대 경로로 설정
project_path = '/absolute/path/to/project_directory'
sys.path.append(project_path)

# 모듈 임포트
from common.functions import softmax, cross_entropy_error
from common.gradient import numerical_gradient​

전체 코드 예시

아래는 모든 단계를 적용한 전체 코드입니다.

import os
import sys

# 현재 작업 디렉토리 확인 및 변경
print("현재 작업 디렉토리:", os.getcwd())
os.chdir('/absolute/path/to/project_directory')  # 필요한 경우 절대 경로로 변경
print("변경된 작업 디렉토리:", os.getcwd())

# Python 경로에 프로젝트 디렉토리 추가
sys.path.append(os.getcwd())

# 모듈 임포트
from common.functions import softmax, cross_entropy_error
from common.gradient import numerical_gradient​

추가 팁

Jupyter Notebook 실행 시 경로 문제 확인

  • os.getcwd()와 sys.path를 출력하여 현재 디렉토리와 Python 경로가 올바른지 확인하세요.
print("현재 작업 디렉토리:", os.getcwd())
print("Python 경로:", sys.path)​

내가 노트북에서 만든 모듈을 사용하려는 경우  .py 파일로 변환하여 실행

Jupyter Notebook의 경로 문제가 지속될 경우, 노트북을 .py 스크립트로 변환하여 실행하면 경로 문제를 해결할 수 있습니다.

jupyter nbconvert --to script functions.ipynb​

결론

  • **ModuleNotFoundError**는 Jupyter Notebook의 작업 디렉토리와 모듈 경로가 일치하지 않을 때 발생합니다.
  • 경로 문제를 해결하려면:
    1. 작업 디렉토리를 올바르게 설정합니다.
    2. Python 경로에 필요한 디렉토리를 추가합니다.
    3. 상대 경로 대신 절대 경로를 사용하는 것이 가장 안전합니다.
    4. 직접만든 파일의 경우 .py 파일로 변환하여 실행

위 단계를 따라 Jupyter Notebook에서 모듈을 성공적으로 임포트하고 프로젝트 작업을 원활히 진행하세요!

728x90
반응형
반응형

 

data = {'A': [1, 2], 'B': [3, 4]}  # 딕셔너리 형태의 데이터 정의
df = pd.DataFrame(data=data)       # DataFrame 생성

 

이 코드는 딕셔너리 data를 pandas.DataFrame으로 변환하여 df라는 데이터프레임을 생성하는 간단한 작업입니다.

  • data:
    • 딕셔너리의 키 'A'와 'B'는 각각 DataFrame의 열 이름으로 사용됩니다.
    • 각 키에 해당하는 리스트 [1, 2], [3, 4]는 각 열의 값으로 사용됩니다.
  • pd.DataFrame(data=data):
    • pandas는 딕셔너리 형식의 데이터를 직접 DataFrame으로 변환할 수 있습니다.

생성된 df

코드 실행 결과는 다음과 같습니다

print(df)


#출력

   A  B
0  1  3
1  2  4

설명:

  1. 열 이름:
    • A와 B는 딕셔너리의 키로, DataFrame의 열 이름으로 설정됩니다.
  2. 행 인덱스:
    • pandas는 자동으로 정수형 인덱스 [0, 1, ...]를 생성합니다.
  3. :
    • 각 키에 연결된 리스트 [1, 2]와 [3, 4]는 열 값으로 매핑됩니다.

요약

  • 이 코드는 딕셔너리를 pandas.DataFrame으로 변환하는 기본적인 작업입니다.
  • 열 이름은 딕셔너리의 키에서 가져오고, 각 키에 연결된 리스트는 열 데이터로 사용됩니다.
  • 자동으로 행 인덱스가 생성됩니다. 필요하다면 index 매개변수를 사용하여 커스텀 인덱스를 지정할 수도 있습니다.
728x90
반응형

+ Recent posts