일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- JAVA #JDK #1.8 #JAVA 환경변수 # CLASS_PATH #시스템 변수 # 사용자 변수
- 파이썬 패키지
- 정보통신용어 #Agent #
- Mybatis#조건
- 오라클 환경 변수
- Java
- maVen
- Spring Context
- Java #객체 #클래스 #인스턴스
- 파이썬 모듈
- 따라해보세요
- 파이썬 예외처리
- 웅스주니어개발자 #MySQL # Window10 # CMD # 초보자 #환경변수
- 향상된 for문
- 오라클 #Oracle #DB #database #12C
- 정보통신용어 #Proxy #Proxy Server
- 추상화란? # 결론은 객체들의 공통적인 개념
- Spring Core
- MySQL설치 # DB # 초보자 #Oracle친구
- Library
- SpringFramework
- window10
- Today
- Total
IT흔적
[파이썬]3.패키지 - 생성, __init__.py, __all__, relative 본문
[파이썬]3.패키지 - 생성, __init__.py, __all__, relative
흔적남기는 개발자 2018. 12. 27. 13:58Packages - 도트(.)를 이용하여 파이썬 모듈을 계층적(디렉터리 구조)으로 관리
ex). 모듈명이 A.B인 경우 A는 패키지명, B는 A 패키지의 B 모듈
ex)가상게임
game/ # 루트 디렉터리
__init__.py
sound/ # 서브 디렉터리
__init__.py
echo.py
wav.py
graphic/ # 서브 디렉터리
__init__.py
screen.py
render.py
play/ # 서브 디렉터리
__init__.py
run.py
test.py
(1) game, sound, graphic, play는 디렉터리명, (.py) 확장자를 가지는 파일은 파이썬 모듈이다.
game 디렉터리가 이 패키지의 루트 디렉터리,
sound, graphic, play는 서브 디렉터리
* 간단한 파이썬 프로그램이 아니리라면 패키지구조가 공동작업이나 유지 보수 등에서 유리,
* 패기지 구조로 모듈을 만들면 다른 모듈과 이름이 겹치더라도 안전!!
패키지 만들기
1.패키지 기본 구성 요소 준비하기
C:/Python/game/__init__.py
C:/Python/game/sound/__init__.py
C:/Python/game/sound/echo.py
C:/Python/game/graphic/__init__.py
C:/Python/game/graphic/render.py
2.각 디렉터리에 __init__.py 파일을 만들어 놓기만 하고 내용을 비워 둔다.
3.echo.py 파일
#echo.py
def echo_test():
print(“echo”)
4.render.py 파일
#render.py
def render_test():
print(“render”)
5.(중요) 수행하기 전에 우리가 만든 game 패키지를 참조할 수 있도록 도스창에 입력
C:\>set PYTHONPATH=C:/Python # PYTHONPATH 환경변수에 C:/Python 디렉터리 추가
C:\> Python
>>>
6.패키지 안의 함수 실행하기
-실행 방법은 3가지 # 예제를 실행하고 다음예제를 실행할때는 반드시 인터프리터 종료!!
(1) echo 모듈을 import하여 실행
>>> import game.sound.echo
>>> game.sound.echo.echo_test()
echo
(2) echo 모듈이 있는 디렉터리 까지 from ~ import하여 실행
>>> from game.sound import echo
>>> echo.echo_test()
echo
(3) echo 모듈의 echo_test 함수를 직접 import하여 실행
>>> from game.sound.echo import echo_test
>>> echo_test()
echo
(4) 중요!! echo_test 함수를 사용하는 것을 불가능
>>> import game
>>> game.sound.echo.echo_test()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module 'game' has no attribute 'sound'
* import game을 수행하면 game 디렉터리의 모듈 or game 디렉터리의 __init__.py에 정의된 것만 참조 가능!!!!
__init__.py의 용도
:해당 디렉터리가 패키지의 일부임을 알려주는 역할을 한다. 만약 game, sound, graphic 등 패키지안에 __init__.py가 없으면 패키지로 인식x //3.3버전부터는 없어도 가능!!
__all__의 용도
>>>FROM game.sound import*
>>>echo.echo_test()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'echo' is not defined
특정 디렉터리의 모듈을 *을 이용하여 import 할때에는 해당 디렉터리(C:/Python/game/sound/_init.py)파일에 __all__이라는 변수를 설정하고 import할수 있는 모듈을 정의해주어야 한다.
# C:/Python/game/sound/_init.py
__all__ = [‘echo’] // __all__이 의미하는 것은 sound 디렉터리에서 *기호를 이용하여 import할 경우 이곳에 정의된 echo모듈만 import된다는 의미
!주의!
from game.sound.echo import * __all__과 상관없이 무조건 import된다.
ex) from a.b.c import *에서 from의 마지막 항목인 c가 모듈인 경우이다.
relative 패키지
Q.graphic 디렉터리의 render.py 모듈이 sound 디렉터리의 echo,py 모듈을 사용하고 싶다 면 어떻게 해야할까?
# render.py
from game.sound.echo import echo_test
def render_test():
print(“render”)
echo.echo_test()
1.
>>> from game.graphic.render import render_test
>>> render_test()
render
echo
2.
#render.py
from ..sound.echo import echo_test
def render_test():
print(“render”)
echo.echo_test() //
.. 부모디렉터리
. 현재디렉터리
'DO it! Python > 05.파이썬 날개 달기' 카테고리의 다른 글
[파이썬] 1.클래스의 개념, 생성, 활용 (0) | 2019.01.19 |
---|---|
[파이썬] 4.예외처리 - try, except문 (0) | 2018.12.29 |
[파이썬]2.모듈 (0) | 2018.12.23 |