components
라는 동일한 디렉토리의 모듈을 import하는 과정에서 수시로 경고와 에러를 만나고 있다. import 관련 문서를 참고 및 일부 번역하면서 정리해보고자 한다.
import location_getter
위와 같이 모듈을 import한다고 가정했을 때, Python은 아래의 순서대로 모듈을 찾는다.
1. sys.modules
: sys.module
은 이전에 import된 모든 모듈들을 캐싱한 객체이다.
2. built-in 모듈 리스트: 사전에 설치된 Python 모듈의 리스트를 검색한다.
3. sys.path
: 현재 디렉토리를 포함하는 리스트 객체이며 현재 디렉토리를 가장 먼저 검색한다.
[
'/Users/yoon/workspace/better-than-yesterday/components',
'/Library/Frameworks/Python.framework/Versions/3.7/lib/python37.zip',
'/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7',
'/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload',
'/Users/yoon/workspace/better-than-yesterday/venv/lib/python3.7/site-packages'
]
모듈을 잘 찾았다면 로컬 스코프에 바인딩할 것이고, 찾지 못했다면 ModuleNotFound
에러를 뱉을 것이다.
import 구문은 크게 두 방법이 있다.
abc
는 패키지일 수도, 모듈일 수도 있다.import abc
abc
는 특정 패키지 또는 모듈로부터 xyz
라는 서브 패키지, 모듈 또는 객체를 import한다.from abc import xyz
import 구문은 일반적으로 맨 위에 작성한다. PEP 8
에 따르면 규칙이 하나 있는데 무엇을 import하느냐에 따라 총 세 유형으로 구분하고 있다.
아래 코드처럼 각 유형별 import 구문 사이에 한 줄씩 띄어쓰는 것을 권장하고 있다.
# 표준 라이브러리 모듈 import
import datetime
import os
# 써드 파티 모듈 import
from django.contrib.sitemaps import sitemap
from flask_restful import Api
# 로컬 모듈 import
from location_getter import latitude, longitude
from weather_getter import temparature