Python - 모듈 import

yvvyoon·2020년 3월 1일
1

components라는 동일한 디렉토리의 모듈을 import하는 과정에서 수시로 경고와 에러를 만나고 있다. 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 구문

import 구문은 크게 두 방법이 있다.

  1. 직접 import하는 방법으로서 abc는 패키지일 수도, 모듈일 수도 있다.
import abc
  1. abc는 특정 패키지 또는 모듈로부터 xyz라는 서브 패키지, 모듈 또는 객체를 import한다.
from abc import xyz

import 개행 관련

import 구문은 일반적으로 맨 위에 작성한다. PEP 8에 따르면 규칙이 하나 있는데 무엇을 import하느냐에 따라 총 세 유형으로 구분하고 있다.

  • 표준 라이브러리 모듈 (built-in 모듈)
  • 써드 파티 모듈
  • 로컬 모듈

아래 코드처럼 각 유형별 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

https://realpython.com/absolute-vs-relative-python-imports/

profile
개발자로 크는 중

0개의 댓글