Python #21 l 파이썬 날개달기_패키지(Package)
List
- 파이썬 날개달기
- 클래스(class)
- 모듈(module)
- 패키지(package)
- 예외처리(exception)
- 내장함수
- 라이브러리(library)
- 연습문제
파이썬 날개달기_패키지(Package)
패키지(Packages)란 무엇인가?
패키지
도트
(.
) 를 사용하여 파이썬 모듈을 계층적(디렉터리 구조)로 관리 할 수 있게 해준다.
- A.B라는 모듈이 있다면 패키지 이름은
A
모듈 이름 B
가상의 game 패키지
game/ # 디렉터리 이름 (루트 디렉터리)
__init__.py # 파이썬 모듈(확장자가 .py인 파일)
sound/ # 디렉터리 이름(서브 디렉터리)
__init__.py # 파이썬 모듈(확장자가 .py인 파일)
echo.py # 파이썬 모듈(확장자가 .py인 파일)
wav.py # 파이썬 모듈(확장자가 .py인 파일)
graphic/ # 디렉터리 이름(서브 디렉터리)
__init__.py # 파이썬 모듈(확장자가 .py인 파일)
screen.py # 파이썬 모듈(확장자가 .py인 파일)
render.py # 파이썬 모듈(확장자가 .py인 파일)
play/ # 디렉터리 이름(서브 디렉터리)
__init__.py # 파이썬 모듈(확장자가 .py인 파일)
run.py # 파이썬 모듈(확장자가 .py인 파일)
test.py # 파이썬 모듈(확장자가 .py인 파일)
※ init.py 파일의 용도
패키지 만들기
패키지 기본 구성 요소 준비
.py
파일 생성
# echo.py
def echo_test():
print ("echo")
# render.py
def render_test():
print ("render")
- 아래보이는 것과 같이 디렉터리(루트 디렉터리, 서브 디렉터리) 생성 후 파일추가
/Users/SEUNGHOSHIN/Documents/doit/game/__init__.py
/Users/SEUNGHOSHIN/Documents/doit/game/sound/__init__.py
/Users/SEUNGHOSHIN/Documents/doit/game/sound/echo.py
/Users/SEUNGHOSHIN/Documents/doit/game/graphic/__init__.py
/Users/SEUNGHOSHIN/Documents/doit/game/graphic/render.py
- 명령 프롬프트 창에서 set 명령어로 PYTHONPATH 환경 변수에
C:/doit
디렉터리를 추가한다. 그리고 파이썬 인터프리터(Interactive shell)를 실행
C:\> set PYTHONPATH=C:/doit
C:\> python
Type "help", "copyright", "credits" or "license" for more information.
반드시 명령 프롬프트에서 파이썬 인터프리터를 실행하여 진행해야함 (IDLE셸, 비쥬얼 스튜디오 에선 오류 생김
패키지 안의 함수 실행하기
패키지 안의 함수를 실행하기 위한 3가지 방법
- 도트 연산자
.
를 사용해서 import a.b.c
를 할 때 마지막 항목(c
)는 반드시 모듈 또는 패키지여야만 한다.
echo 모듈
을 import
하여 실행하는 방법
from
디렉터리1. 디렉터리2. 모듈이름
>>> import game.sound.echo
>>> game.sound.echo.echo_test()
echo
echo 모듈
이 있는 디렉터리까지를 from ... import하여 실행하는 방법
from
디렉터리1. 디렉터리2
import
모듈이름
>>> from game.sound import echo
>>> echo.echo_test()
echo
- echo 모듈의 echo_test 함수를 직접 import하여 실행하는 방법
from
디렉터리1. 디렉터리2. 모듈이름
import
함수
>>> from game.sound.echo import echo_test
>>> echo_test()
echo
실행 불가
import 디렉터리1
+ 디렉터리2.디렉터리3.모듈.함수()
>> import game
>> game.sound.echo.echo_test()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'sound'
import 디렉터리1.디렉터리2.디렉터리3.모듈.함수()
>> import game.sound.echo.echo_test
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named echo_test
import game
을 수행하면 game디렉터리의 모듈(.py 파일)
들과 __init__.py
에 정의한 것만 참조할 수 있다.
init.py
init.py 용도
-
__init__.py
파일은 해당 디렉터리가 패키지의 일부분임을 알려줌
- 만약
game
, sound
, graphic
이 패키지에 포함된 디렉터리에 __init__.py
가 없으면 패키지로 인식 자체가 안됨
Relative 패키지
다른 디렉터리 안에있는 모듈을 사용하기
- 만약
graphic 디렉터리
의 render.py(모듈)
이 sound 디렉터리
의 echo.py(모듈)
을 사용하고싶다면?
- render 모듈에서
from … import …
사용해서 진행
# render.py
from game.sound.echo import echo_test
def render_test():
print ("render")
echo_test()
- 부모 디렉터리 사용
# render.py
from ..sound.echo import echo_test # from 뒤 .. 은 부모 디렉터리를 의미
def render_test():
print ("render")
echo_test()
graphic
과 sound
의 부모 디렉터리는 game
이며,
graphic
과 sound
는 동일한 깊이(depth)
이므로 부모 디렉터리를 가르키는 ..
을 사용하여 import가 가능하다
relative한 접근자
에는 다음과 같은 것이 있다.
. .
– 부모 디렉터리
.
– 현재 디렉터리
**모듈안에서만 사용 가능 / 파이썬 인터프리터에서 사용 불가
Author And Source
이 문제에 관하여(Python #21 l 파이썬 날개달기_패키지(Package)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@shinisgood/python-21
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
도트
(.
) 를 사용하여 파이썬 모듈을 계층적(디렉터리 구조)로 관리 할 수 있게 해준다.A
모듈 이름 B
game/ # 디렉터리 이름 (루트 디렉터리)
__init__.py # 파이썬 모듈(확장자가 .py인 파일)
sound/ # 디렉터리 이름(서브 디렉터리)
__init__.py # 파이썬 모듈(확장자가 .py인 파일)
echo.py # 파이썬 모듈(확장자가 .py인 파일)
wav.py # 파이썬 모듈(확장자가 .py인 파일)
graphic/ # 디렉터리 이름(서브 디렉터리)
__init__.py # 파이썬 모듈(확장자가 .py인 파일)
screen.py # 파이썬 모듈(확장자가 .py인 파일)
render.py # 파이썬 모듈(확장자가 .py인 파일)
play/ # 디렉터리 이름(서브 디렉터리)
__init__.py # 파이썬 모듈(확장자가 .py인 파일)
run.py # 파이썬 모듈(확장자가 .py인 파일)
test.py # 파이썬 모듈(확장자가 .py인 파일)
※ init.py 파일의 용도
.py
파일 생성# echo.py
def echo_test():
print ("echo")
# render.py
def render_test():
print ("render")
/Users/SEUNGHOSHIN/Documents/doit/game/__init__.py
/Users/SEUNGHOSHIN/Documents/doit/game/sound/__init__.py
/Users/SEUNGHOSHIN/Documents/doit/game/sound/echo.py
/Users/SEUNGHOSHIN/Documents/doit/game/graphic/__init__.py
/Users/SEUNGHOSHIN/Documents/doit/game/graphic/render.py
C:/doit
디렉터리를 추가한다. 그리고 파이썬 인터프리터(Interactive shell)를 실행C:\> set PYTHONPATH=C:/doit
C:\> python
Type "help", "copyright", "credits" or "license" for more information.
반드시 명령 프롬프트에서 파이썬 인터프리터를 실행하여 진행해야함 (IDLE셸, 비쥬얼 스튜디오 에선 오류 생김
- 도트 연산자
.
를 사용해서import a.b.c
를 할 때 마지막 항목(c
)는 반드시 모듈 또는 패키지여야만 한다.
echo 모듈
을 import
하여 실행하는 방법from
디렉터리1. 디렉터리2. 모듈이름
>>> import game.sound.echo
>>> game.sound.echo.echo_test()
echo
echo 모듈
이 있는 디렉터리까지를 from ... import하여 실행하는 방법from
디렉터리1. 디렉터리2
import
모듈이름
>>> from game.sound import echo
>>> echo.echo_test()
echo
from
디렉터리1. 디렉터리2. 모듈이름
import
함수
>>> from game.sound.echo import echo_test
>>> echo_test()
echo
실행 불가
import 디렉터리1
+디렉터리2.디렉터리3.모듈.함수()
>> import game
>> game.sound.echo.echo_test()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'sound'
import 디렉터리1.디렉터리2.디렉터리3.모듈.함수()
>> import game.sound.echo.echo_test
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named echo_test
import game
을 수행하면 game디렉터리의모듈(.py 파일)
들과__init__.py
에 정의한 것만 참조할 수 있다.
__init__.py
파일은 해당 디렉터리가 패키지의 일부분임을 알려줌
- 만약
game
,sound
,graphic
이 패키지에 포함된 디렉터리에__init__.py
가 없으면 패키지로 인식 자체가 안됨
graphic 디렉터리
의 render.py(모듈)
이 sound 디렉터리
의 echo.py(모듈)
을 사용하고싶다면?from … import …
사용해서 진행# render.py
from game.sound.echo import echo_test
def render_test():
print ("render")
echo_test()
# render.py
from ..sound.echo import echo_test # from 뒤 .. 은 부모 디렉터리를 의미
def render_test():
print ("render")
echo_test()
graphic
과sound
의 부모 디렉터리는game
이며,graphic
과sound
는동일한 깊이(depth)
이므로 부모 디렉터리를 가르키는..
을 사용하여 import가 가능하다
relative한 접근자
에는 다음과 같은 것이 있다.
. .
– 부모 디렉터리.
– 현재 디렉터리
**모듈안에서만 사용 가능 / 파이썬 인터프리터에서 사용 불가
Author And Source
이 문제에 관하여(Python #21 l 파이썬 날개달기_패키지(Package)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@shinisgood/python-21저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)