.py
이어야 함import <모듈이름>
ex) import my_module<모듈이름>.<변수/함수/클래스>
ex) my_module.from <모듈이름> import <변수/함수/클래스>, ...
를 하면 모듈 이름을 붙이지 않고 바로 원하는 요소를 호출할 수 있음from <모듈이름> import *
: 해당 모듈의 모든 요소가 곧바로 importfrom <모듈이름> import <변수/함수/클래스> as <바꿀이름>
import <모듈이름> as <바꿀이름>
import pkg.mod1
from pkg.mod2 import func2
pkg.mod1.func2()
func2()
__init__
__init__
: 이 파일을 통해 package 초기 설정을 해줌__init__
이 파일이 있으면 package가 import 될때 __init__
파일의 코드들이 자동으로 실행__init__.py
의 역할위의 그림에서 pkg의 mod1의 func2라는 함수를 import하여 사용하기 위해서 아래와 같이 경로를 번거롭게 다 타입해줘야 함
import pkg.md1
pkg.mod1.func2()
이를 간단히 하는 방법은 원하는 요소를 __init__.py
에 먼저 한 번 import해주면 됨
#`__init__.py`
from .mod1 import func2
func2()
__all__
변수 : package를 통해 import 될 수 있는 요소들은 모두 __all__
변수를 통해 정의됨. dafault 값은 모든 함수/변수/클래스__all__
= string을 값으로 하는 요소를 가지고 있는 list#`__init__.py`
from .mod1 import func2
from .mod2 import func2
__all__ = ['func2', 'func3']
func2()
이렇게 하면 정의된 func2와 func3 함수만 import 될 수 있고 이 외의 모든 함수는 import 될 수 없음
pip install Django
ModuleNotFoundError
리턴└── my_app
├── main.py
├── package1
│ ├── module1.py
│ └── module2.py
└── package2
├── __init__.py
├── module3.py
├── module4.py
└── subpackage1
└── module5.py
예를 들어 🔴의 function2 함수를 import 하는 과정을 파이썬 형식으로 표현하면,
my_app.package2.subpackage1.module5.py
이고, 이미 my_app 프로젝트 안에 있기 때문에 이건 생략
package2.subpackage1.module5.py
from, import 키워드를 사용해서 정리하면
from package2.subpackage1.module5.py import function2
my_app 프로젝트 내에서는 어느 위치에서라도 function2를 import하기 위해서 위와 도일한 경로를 가지게 됨. absolute path는 current directory로부터 경로를 시작. local package를 import 할 때 사용. 경로가 길어질 수 있는 단점
└── my_app
├── main.py
├── package1
│ ├── module1.py
│ └── module2.py
└── package2
├── __init__.py
├── module3.py 🔵
├── module4.py
└── subpackage1
└── module5.py 🟢
현재 위치는 package2/module3.py 라고 가정
package2의 module3에서 같은 곳인 package2의 class1을 import
👉🏼 from . import class1
여기서 dot(.)은 import가 선언되는 파일의 현재 위치
package2의 subpackage1의 module5dml function2 함수를 import
👉🏼 from .subpackage1.module5 import function2
dot 2개(..)는 현재 위치에서 상위 디렉토리로 가는 경로
# subpackage1/module5.py
from ..module4 import class4
상대 경로는 길이는 줄여줄 수 있지만 파일 위치가 변경되면 그에 따라 경로 위치도 변경되어야 해서 혼란을 야기할 수 있으므로 절대 경로 사용 권장