다른 언어와 마찬가지로 특정 기능을 하는 파일들끼리 모아놓은 것을 패키지라고 합니다. (ex. video, sound, network, motor, ETC)
1. Package 생성
프로젝트 우 클릭 -> New -> Python Package
저는 tistory라는 package를 생성하고 그 아래 post package, user package를 추가로 생성하였습니다.
그리고 각각 아래와 같이 파일을 생성하였습니다.
tistory/post/getpost.py
def getpost():
return '1', 'hello'
tistory/user/getuser.py
def getuser():
return 'kim'
2. Package 사용
main.py
import tistory.user.getuser
import tistory.post.getpost as get_post #get_post 는 alias
print(tistory.user.getuser.getuser())
print(get_post.getpost())
main.py 를 실행하면 결과를 얻을 수 있습니다.
아래와 같이 import하여 사용할 수도 있습니다.
from tistory.user.getuser import *
from tistory.post.getpost import *
print(getuser())
print(getpost())
3. 기타
패키지 생성 시 __init__.py 파일이 생성되는 것을 볼 수 있습니다.
이 파일은 해당 디렉토리가 패키지의 일부임을 알려주는 역할을 합니다. PEP 420으로 인해 Python 3.3 버전 이후에는 __init__.py 파일이 없어도 패키지로 인식하지만 개발에 있어서 언제나 레거시를 무시할 수 없고 하위 호환을 위해 __init__.py 파일을 작성하는 것이 원칙이라고 합니다.
위의 예제를 조금 바꾸어 main.py 를 수정해 보겠습니다. 이렇게 수정하면 패키지를 import하여 동작이 될 것 같기도 한데 되지 않습니다.
from tistory.user import *
from tistory.post import *
print(getuser.getuser())
print(getpost.getpost())
이 때, 각 패키지 내의 __init__.py 파일에 각각 아래와 같이 내용을 추가해주면 됩니다.
패키지를 import * 할 때, __init__.py 파일 내의 __all__ 속성이 어떤 모듈들을 포함할지 선택한다는 의미입니다.
즉, import * 시, from이 모듈을 가리키는 경우 모든 함수를 import하지만 from이 패키지를 가리키는 경우 모든 모듈을 import하지는 않는다는 것입니다.
# tistory/post/__init__.py
__all__ = ['getpost']
# tistory/user/__init__.py
__all__ = ['getuser']
'프로그래밍 언어 > Python' 카테고리의 다른 글
PyCharm의 Python console(파이썬 콘솔) 한글 깨짐 문제 해결 (0) | 2021.03.01 |
---|---|
Python 표준 라이브러리 (파일 -file-) (0) | 2021.03.01 |
Python 모듈, 라이브러리, 프레임워크 (module, library, framework) (0) | 2021.02.28 |
Python 함수 (function) -def- (0) | 2021.02.27 |
Python 반복문 (for, while) (0) | 2021.02.27 |