[Python] Package - Practice
[Python] Package - Practice
강의정보 (인프런 - 프로그래밍 시작하기: 파이썬 입문(Inflearn Original))
- Chapter06-3
- Python Package
1. Directory
1
2
3
4
5
6
7
8
sub
├── __init__.py
├── sub1
│ ├── __init__.py
│ └── module1.py
└── sub2
├── __init__.py
└── module2.py
2. Python Files
1
# sub/__init__.py
1
2
3
# sub/sub1/__init__.py
__all__ = ['module1']
1
2
3
4
5
6
7
8
9
10
11
12
13
# 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()))
1
2
3
# sub/sub2/__init__.py
__all__ = ['module2']
1
2
3
4
5
6
7
8
9
10
11
12
# 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 ~
1
2
3
4
5
6
7
8
9
10
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()
1
2
3
4
5
6
7
8
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 ~
1
2
3
4
5
6
7
8
9
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()
1
2
3
4
5
6
7
8
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(*)는 웬만하면 쓰지말자
- 사용하지도 않을 파일/함수까지 모두 가져와서 파이썬이 실행될때 굳이 불필요한 작업을 할 필요가 없다. 메모리만 잡아먹는다
1
2
3
4
5
6
7
8
9
from sub.sub1 import *
from sub.sub2 import *
module1.mod1_test1()
module1.mod1_test2()
module2.mod2_test1()
module2.mod2_test2()
1
2
3
4
5
6
7
8
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
Reference
This post is licensed under CC BY 4.0 by the author.