[Python] Package - Practice
강의정보 (인프런 - 프로그래밍 시작하기: 파이썬 입문(Inflearn Original))
- Chapter06-3
- Python Package
1. Directory
sub
├── __init__.py
├── sub1
│ ├── __init__.py
│ └── module1.py
└── sub2
├── __init__.py
└── module2.py
2. Python Files
# sub/__init__.py
# sub/sub1/__init__.py
__all__ = ['module1']
# sub/sub1/module1.py
import sys
import inspect
def mod1_test1():
print ("Module1 -> Test1")
print("Path : ", inspect.getfile(inspect.currentframe())) # 현재 실행파일의 파일 위치 출력
def mod1_test2():
print ("Module1 -> Test2")
print("Path : ", inspect.getfile(inspect.currentframe()))
# sub/sub2/__init__.py
__all__ = ['module2']
# sub/sub2/module2.py
import sys
import inspect
def mod2_test1():
print ("Module2 -> Test1")
print("Path : ", inspect.getfile(inspect.currentframe()))
def mod2_test2():
print ("Module2 -> Test2")
print("Path : ", inspect.getfile(inspect.currentframe()))
3. __init__.py
용도
__init__.py
파일: 해당 directory가 패키지의 일부임을 알려주는 역할- Python3.3 버전부터는
__init__.py
파일이 없어도 패키지로 인식한다 - 하지만 하위 버전과의 호환을 위해
__init__.py
파일을 생성하는 것이 안전한 방법! __all__
__all__
변수에 정의된 모듈만 import 가능- 따라서, import를 하지 않아야 하는 즉, 외부에서 접근하면 안되는 (ex. 버그를 발생시키는 모듈) 모듈은
__all__
변수에서 제외시킨다!
4. Examples
Example 1: import ~
import sub.sub1.module1
import sub.sub2.module2
# 사용
sub.sub1.module1.mod1_test1()
sub.sub1.module1.mod1_test2()
sub.sub2.module2.mod2_test1()
sub.sub2.module2.mod2_test2()
--------------------------------------------------
Module1 -> Test1
Path : /Users/jinsolkim/Desktop/practice/sub/sub1/module1.py
Module1 -> Test2
Path : /Users/jinsolkim/Desktop/practice/sub/sub1/module1.py
Module2 -> Test1
Path : /Users/jinsolkim/Desktop/practice/sub/sub2/module2.py
Module2 -> Test2
Path : /Users/jinsolkim/Desktop/practice/sub/sub2/module2.py
Example 2: from ~ import ~
from sub.sub1 import module1
from sub.sub2 import module2 as m2 # alias
module1.mod1_test1()
module1.mod1_test2()
m2.mod2_test1()
m2.mod2_test2()
--------------------------------------------------
Module1 -> Test1
Path : /Users/jinsolkim/Desktop/practice/sub/sub1/module1.py
Module1 -> Test2
Path : /Users/jinsolkim/Desktop/practice/sub/sub1/module1.py
Module2 -> Test1
Path : /Users/jinsolkim/Desktop/practice/sub/sub2/module2.py
Module2 -> Test2
Path : /Users/jinsolkim/Desktop/practice/sub/sub2/module2.py
Example 3: from ~ import *
- asterisk(*)는 웬만하면 쓰지말자
- 사용하지도 않을 파일/함수까지 모두 가져와서 파이썬이 실행될때 굳이 불필요한 작업을 할 필요가 없다. 메모리만 잡아먹는다
from sub.sub1 import *
from sub.sub2 import *
module1.mod1_test1()
module1.mod1_test2()
module2.mod2_test1()
module2.mod2_test2()
--------------------------------------------------
Module1 -> Test1
Path : /Users/jinsolkim/Desktop/practice/sub/sub1/module1.py
Module1 -> Test2
Path : /Users/jinsolkim/Desktop/practice/sub/sub1/module1.py
Module2 -> Test1
Path : /Users/jinsolkim/Desktop/practice/sub/sub2/module2.py
Module2 -> Test2
Path : /Users/jinsolkim/Desktop/practice/sub/sub2/module2.py
Leave a comment