모듈을 불러오기 위해 사용하는 키워드
이 때 파이썬 파일의 import 모듈이름.py과 같이 사용하면 안됨
예시) module 이름 --> math / 포함된 함수 이름 --> sqrt()
import math
print (math.sqrt(9))
# 3.0
모듈 내에서 사용 할 몇 개의 함수/클래스/변수만 import 하기위해 사용하는 키워드
모듈에 있는 모든 요소가 import됨
아래와 같이 사용
from math import *
print (sqrt(9))
# 3.0
local scope를 가지고 있는 다른 요소들과 이름 충돌이 발생할 수 있으므로 권장하지는 않음
모듈또는 모듈의 요소에 새로운 이름을 주어서 사용하는 것
모듈/요소의 이름이 너무 길거나 동일한 이름의 함수가 있을시 유용함
import my_module as m1
m1.my_module_func()
from module import my_func as f1
from module2 import my_func as f2
from module3 import function_with_name_too_long as f3
f1()
f2()
f3()
위의 이미지에서 pkg가 디렉토리 mod1, mod2가 모듈
import pkg.mod1
from pkg.mod2 import func3
pkg.mod1.func2()
func3()
패키지 안에 아래의 이미지와 같이 __init__.py
파일이 있는 경우 패키지 초기설정이 가능
패키지가 import될 때 __init__.py
파일의 코드가 자동으로 실행됨
1. import 할 때 경로 길이 줄이기
예시 ) pkg에서 mod1의 func2 라는 함수를 import 하기
__init__.py
을 사용하지 않은 경우# new_python_file.py
import pkg.mod1
pkg.mod1.func2() # 함수 사용시 긴 경로를 입력해야함
위의 예시와 같이 함수를 입력할 때 긴 경로를 입력해야 함
__init__.py
을 사용한 경우__init__.py
파일에 아래의 내용 입력
# __init__.py
from .mod1 import func # from .모듈 import 함수/클래스
패키지를 실행하면 위의 내용이 자동으로 실행됨
# new_python_file.py
from pkg import func2 # from 패키지 import 모듈
func2()
위의 예시와 같이 함수 사용시 경로를 줄일 수 있음
2. Package에서 import 할 수 있는 변수/함수/클래스 제한
package 외부에서 import되는 함수를 제한할 수 있음
(package의 내부에서만 사용 되어야하는 함수 등의 사용을 제한 가능)
이는 __all__
변수를 이용하여 정의가능
__all__
변수 default 값 : 모든 함수/ 변수/ 클래스 등
__all__
변수를 따로 정의해주어서 import될 수 있는 요소 제한하기
예시 )
__init__.py
파일에 아래의 내용 입력
# __init__.py
from .mod1 import func2
from .mod2 import func3
__all__ = ['func2', 'func3']
패키지를 실행하면 위의 내용이 자동으로 실행됨
# new_python_file.py
from pkg import *
func2()
func3()
func4() ## <== Error. func4 함수는 __all__ 에 정의되지 않았으므로 import 될 수 없음
3. package가 import될 때 먼저 실행되어야 하는 코드 설정 등
다른 사람이 만든 package를 import하려면 먼저 package를 설치 해야함
터미널에서 pip install package명
import 모듈/패키지를 실행했을 때 python은 해당 디렉토리를 search 함
import시 아래의 장소를 순서대로 찾음
sys는 파이썬의 built-in modules
아래과 같이 사용할 수 있음
import sys
print(sys.modules) # dictionary로 반환
print(sys.path) # list로 반환
print(sys.modules)의 결과
print(sys.path)의 결과
위의 세 곳에서 원하는 모듈/패키지를 찾지 못하면 ModuleNotFoundError 에러를 리턴
절대 경로 - import를 하는 파일이나 경로에 상관없이 경로가 동일
최상위 디렉토리부터 시작해 하위 디렉토리를 탐색하는 방식
단점 - 경로가 길어질 수 있음
상대 경로 - import 하는 위치를 기준으로 경로를 정의 (현재 작업 위치에 대한 상대 경로)
dot(.)은 파일의 현재 위치를 의미
dot 2개(..) 는 현재위치에서 상위 디렉토리로 가는 경로
예시)
from . import class1
from .subpackage1.module5 import function2
from ..module4 import class4
장점 - 경로의 길이를 줄여줌
단점 - 헷갈리기 쉽고 파일 위치가 변경되면 경로 위치도 변경되어야 함
형광펜 효과 괜찮네요