import my_module # .py는 생략
my_module.func1()
*
(별표) 사용하면 모든 요소 사용가능from my_module import func1, func2, variable # 쉼표로 구분
func1()
from my_module import *
func1()
from my_module import my_func as f1
f1()
from pkg.my_module import func1
func1()
import pkg.mod1
pkg.mod1.func2()
# 위처럼 매번 모듈을 import해야하는 번거로움이 있음
# ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
# __init__.py
from mod1 import func2
# __init__.py
from mod1 import func2
from mod2 import func3
__all__ = ['func2', 'func3']
# main.py
from pkg import *
func2()
func3()
func4() # Error. func4 함수는 __all__ 에 정의되지 않았으므로 import 될 수 없음
파이썬은 아래와 같은 순서로 module/package를 찾는다.
sys.path에서도 못 찾으면 ModuleNotFoundError를 리턴
sys.modules → built-in modules → sys.path
1. sys.modules
이미 import된 module과 package를 모아놓은 dictionary
2. built-in modules
python에서 제공하는 공식 라이브러리
3. sys.path
• string형으로 되어 있는 경로들을 모아놓은 list(파이썬 라이브러리들이 설치되어 있는 디렉토리를 보여줌)
• 순차적으로 모듈, 패키지를 찾음. 때문에 같은 네임을 가진 함수가 2개의 모듈에 있다고 한다면 list안의 순서에 맞춰 먼저 import되는 모듈의 함수가 실행됨
sys 모듈
sys는 파이썬에 기본으로 제공하는 모듈로서, sys도 import해야하는 모듈임
import sys
print(sys.path)
print(sys.modules)
# 추가하고 싶다면
sys.path.append(모듈을 저장한 디렉토리 경로)
absolute path / relative path
absolute path는 경로가 길어질 수 있는 단점이 있다. relative path가 그 점을 보완해줄 수 있지만 relative path는 경로가 헷갈리기 쉽고 파일 위치가 변경되면 경로도 변경해줘야하는 번거로움이 생길 수 있어 웬만하면 absolute path를 사용하는 것을 추천한다.
absolute path 절대경로
항상 최상위 디렉토리부터 시작하여 경로를 정의
relative path 상대경로
import하는 위치를 기준으로 경로를 정의
dot(.)은 현재 위치 / dot 2개(..)는 부모위치
# absolute path
from package2.subpackage1.module5 import function2
# relative path
from .subpackage1.module5 import function2
from ..module4 import class4