파이썬 모듈 위치 찾지 못하는 에러 사례 처리 방법

  • 파이썬 모듈 위치 찾지 못하는 에러 사례 처리 방법을 알아봤습니다.
  • 예를 들면 현재 소스 파일을 실행할 때 일부러 쪼개 놓은 하위 모듈 위치를 찾지 못하는 경험이 있을 겁니다.
  • 파이썬은 기본적으로 실행하는 현재 스크립트의 위치를 기준으로 모듈 경로를 탐색하는데 모듈 경로를 찾지 못해서 오류가 발생하는 경우가 많습니다.
  • 해결 방법을 3가지 사례로 정리해봤습니다. 개인적으로는 3번째 방법을 선호합니다. 그냥 개별 함수 테스트 해보는게 주 목적인 경우가 많아서....
    1. PYTHONPATH 설정: 모듈을 찾는 경로를 환경 변수로 설정.
    2. sys.path 수정: 코드 상단에서 실행 중에 경로를 추가.
    3. 패키지 실행: python -m을 사용해 모듈을 패키지로 실행.

    방법 1: PYTHONPATH 설정

    파이썬이 모듈을 찾을 수 있도록 프로젝트의 루트 디렉토리를 PYTHONPATH에 추가할 수 있습니다.

    export PYTHONPATH="${PYTHONPATH}:/path/to/your/project_root"

    이 명령을 실행하여 환경 변수에 프로젝트의 루트 디렉토리를 추가하면, 모듈을 찾을 수 있게 됩니다. 한 번만 설정되므로 이를 영구적으로 설정하려면, .bash_profile, .bashrc, .zshrc 등에 추가해야 합니다.

    예를 들어:

    export PYTHONPATH="${PYTHONPATH}:/Users/jaehojoo/devel/pydantic/gen/supa_upadate/root"

    이후에 다시 실행해 보면 문제가 해결될 수 있습니다:

    python module_a/a_script.py

    방법 2: sys.path를 수정하여 런타임에 경로 추가

    sys.path는 파이썬이 모듈을 찾기 위해 사용하는 경로 목록입니다. 파일 내에서 sys.path에 루트 디렉토리를 추가하면, 파이썬이 해당 경로를 참조할 수 있게 됩니다. 이를 위해 module_a/a_script.py의 상단에 다음 코드를 추가합니다:

    import sys
    import os
    # 루트 디렉토리를 sys.path에 추가
    sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
    from utils.helper import helper_function
    def some_function_from_a():
        print("This is a function from module A.")
        helper_function()
    if __name__ == "__main__":
        print("Module A is being run directly.")
        some_function_from_a()

    예를 들어:

    • sys.path.append(): sys.path에 루트 디렉토리를 추가합니다. os.path.dirname(os.path.dirname(os.path.abspath(__file__)))는 현재 파일의 경로에서 상위 두 단계로 올라가서 프로젝트 루트 디렉토리의 경로를 가져옵니다. 이 경로를 sys.path에 추가하면, utils 모듈을 정상적으로 찾을 수 있게 됩니다.

    방법 3: 패키지 형태로 실행

    파이썬 3.6 이상에서는 모듈을 패키지로 실행할 수 있습니다. 이를 위해 -m 플래그를 사용하여 모듈을 패키지로 실행합니다. 루트 디렉터리에서 아래 명령어를 실행합니다:

    python -m module_a.a_script

    이 방법을 사용하면 module_a.a_script가 패키지로 인식되어, utils 모듈을 정상적으로 찾을 수 있게 됩니다.

    Leave a Comment