(py_study_3110) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>pythonPython 3.11.0 | packaged by Anaconda, Inc. | (main, Mar 12023, 18:18:21) [MSC v.1916 64 bit (AMD64)] on win32Type "help", "copyright", "credits"or"license"for more information.>>>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'>>>
.study_python_3.11.0.TEST>pythonPython 3.11.0 | packaged by Anaconda, Inc. | (main, Mar 12023, 18:18:21) [MSC v.1916 64 bit (AMD64)] on win32Type "help", "copyright", "credits"or"license"for more information.>>>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 디렉터리의 __init__.py 에 정의 되어 있는 것만 참조할 수 있습니다.
echo_test 함수가 안되는 경우 #2
Python
>>>import game.sound.echo.echo_testTraceback (most recent call last): File "<stdin>", line 1, in<module>ModuleNotFoundError: No module named 'game.sound.echo.echo_test'; 'game.sound.echo'isnot a package>>>
도트 연산자(.)를 사용해서 import a.b.c 처럼 import 할 때 가장 마지막에 항목인 c 는 반드시 모듈 또는 패키지이어야만 합니다.
오늘은 이렇게 패키지 안의 함수 실행하는 방법에 대해 알아보았습니다. echo 모듈을 import 하여 실행하는 방법부터 echo_test 함수가 안되는 경우 두 가지에 대해서 공부 해봤습니다.
다음 포스팅에서는 __init__.py 는 어떤 용도로 쓰이는지에 대해 공부해 보도록 하겠습니다
이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.
지난 포스팅에서는 파이썬에서 모듈을 불러오는 다른 방법에 대해 공부해 봤습니다. 이제 파이썬 패키지에 대해 공부를 해 볼텐데요 먼저 패키지의 정의와 패키지 만드는 방법에 대해 공부해 보도록 하겠습니다.
파이썬 패키지
패키지의 정의
패키지의 정의에 대해 먼저 알아 보겠습니다. 패키지는 Packages 로 도트(.) 를 사용하여 파이썬의 모듈들을 계층적 디렉터리 구조 형태로 관리를 할 수 있게 끔 해줍니다. 예로 모듈 이름이 AAA.BBB 인 경우에 A 는 패키지 이름이 되며, BBB 는 A 패키지의 B 모듈이 되는 것 입니다. 여기에서 나오는 파이썬에서 모듈의 이전에 공부 했듯이 하나의 파이썬 파일(.py) 입니다
파이썬에서 패키지는 디렉터리와 파이썬 모듈로 이루어 집니다.
패키지의 구조
패키지의 구조를 살펴보면 아래 와 같습니다. 가상으로 game 이란 패키지의 예를 보겠습니다.
위의 패키지 예를 보게 되면 game, sound, graphic, play 는 디렉터리이고 확장자가 .py 인 파일들은 파이썬 모듈입니다. game 디렉터리가 이 패키지의 루트 디렉터리이고 sound, graphic, play 는 서브 디렉터리입니다.
간단한 파이썬 프로그램이라면 굳이 이렇게 패키지로 구조로 만들 필요가 없겠지만 이렇게 패키지 구조로 파이썬 프로그램을 만들게 되면 공동 작업이나 유지 보수 등을 할 때 여러가지 유리한 점들이 생깁니다. 그리고 패키지 구조로 모듈을 만들게 되면 다른 모듈과 이름이 겹치게 되더라도 안전하게 사용이 가능합니다.
패키지 만드는 방법
이제 위의 예와 비슷한 game 패키지를 만들어 보면서 패키지에 대해 더 공부해 보도록 하겠습니다.
패키기 기본 구성 요소
1. 디렉터리 생성과 파일 생성
game 디렉터리를 생성하고 game 디렉터리 밑에 서브 디렉터리까지 생성을 해보겠습니다. 그리고 파이썬 파일들을 만들어 보겠습니다.
game 디렉터리를 생성하고 하위 폴더인 graphic 과 sound 디렉터리도 생성했습니다. 그리고 각각 디렉터리에 비어 있는 __init__.py 파일을 생성해 주었습니다.
BAT
(py_study_3110) D:\Dropbox.My_Job.Study.Python
(py_study_3110) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\game>dir /s D 드라이브의 볼륨에는 이름이 없습니다. 볼륨 일련 번호: C4C6-D950 D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\game 디렉터리2023-04-28 오후 05:26 <DIR> .2023-04-28 오후 03:26 <DIR> ..2023-04-28 오후 05:26 <DIR> graphic2023-04-28 오후 05:26 <DIR> sound2023-04-28 오후 05:26 0 __init__.py 1개 파일 0 바이트 D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\game\graphic 디렉터리2023-04-28 오후 05:26 <DIR> .2023-04-28 오후 05:26 <DIR> ..2023-04-28 오후 05:26 0 __init__.py 1개 파일 0 바이트 D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\game\sound 디렉터리2023-04-28 오후 05:26 <DIR> .2023-04-28 오후 05:26 <DIR> ..2023-04-28 오후 05:26 0 __init__.py 1개 파일 0 바이트 전체 파일: 3개 파일 0 바이트 8개 디렉터리 549,653,786,624 바이트 남음
.study_python_3.11.0.TEST\game>dir /s D 드라이브의 볼륨에는 이름이 없습니다. 볼륨 일련 번호: C4C6-D950 D:\Dropbox.My_Job.Study.Python
(py_study_3110) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\game>dir /s D 드라이브의 볼륨에는 이름이 없습니다. 볼륨 일련 번호: C4C6-D950 D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\game 디렉터리2023-04-28 오후 05:26 <DIR> .2023-04-28 오후 03:26 <DIR> ..2023-04-28 오후 05:26 <DIR> graphic2023-04-28 오후 05:26 <DIR> sound2023-04-28 오후 05:26 0 __init__.py 1개 파일 0 바이트 D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\game\graphic 디렉터리2023-04-28 오후 05:26 <DIR> .2023-04-28 오후 05:26 <DIR> ..2023-04-28 오후 05:26 0 __init__.py 1개 파일 0 바이트 D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\game\sound 디렉터리2023-04-28 오후 05:26 <DIR> .2023-04-28 오후 05:26 <DIR> ..2023-04-28 오후 05:26 0 __init__.py 1개 파일 0 바이트 전체 파일: 3개 파일 0 바이트 8개 디렉터리 549,653,786,624 바이트 남음
.study_python_3.11.0.TEST\game 디렉터리2023-04-28 오후 05:26 <DIR> .2023-04-28 오후 03:26 <DIR> ..2023-04-28 오후 05:26 <DIR> graphic2023-04-28 오후 05:26 <DIR> sound2023-04-28 오후 05:26 0 __init__.py 1개 파일 0 바이트 D:\Dropbox.My_Job.Study.Python
(py_study_3110) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\game>dir /s D 드라이브의 볼륨에는 이름이 없습니다. 볼륨 일련 번호: C4C6-D950 D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\game 디렉터리2023-04-28 오후 05:26 <DIR> .2023-04-28 오후 03:26 <DIR> ..2023-04-28 오후 05:26 <DIR> graphic2023-04-28 오후 05:26 <DIR> sound2023-04-28 오후 05:26 0 __init__.py 1개 파일 0 바이트 D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\game\graphic 디렉터리2023-04-28 오후 05:26 <DIR> .2023-04-28 오후 05:26 <DIR> ..2023-04-28 오후 05:26 0 __init__.py 1개 파일 0 바이트 D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\game\sound 디렉터리2023-04-28 오후 05:26 <DIR> .2023-04-28 오후 05:26 <DIR> ..2023-04-28 오후 05:26 0 __init__.py 1개 파일 0 바이트 전체 파일: 3개 파일 0 바이트 8개 디렉터리 549,653,786,624 바이트 남음
.study_python_3.11.0.TEST\game\graphic 디렉터리2023-04-28 오후 05:26 <DIR> .2023-04-28 오후 05:26 <DIR> ..2023-04-28 오후 05:26 0 __init__.py 1개 파일 0 바이트 D:\Dropbox.My_Job.Study.Python
(py_study_3110) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\game>dir /s D 드라이브의 볼륨에는 이름이 없습니다. 볼륨 일련 번호: C4C6-D950 D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\game 디렉터리2023-04-28 오후 05:26 <DIR> .2023-04-28 오후 03:26 <DIR> ..2023-04-28 오후 05:26 <DIR> graphic2023-04-28 오후 05:26 <DIR> sound2023-04-28 오후 05:26 0 __init__.py 1개 파일 0 바이트 D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\game\graphic 디렉터리2023-04-28 오후 05:26 <DIR> .2023-04-28 오후 05:26 <DIR> ..2023-04-28 오후 05:26 0 __init__.py 1개 파일 0 바이트 D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\game\sound 디렉터리2023-04-28 오후 05:26 <DIR> .2023-04-28 오후 05:26 <DIR> ..2023-04-28 오후 05:26 0 __init__.py 1개 파일 0 바이트 전체 파일: 3개 파일 0 바이트 8개 디렉터리 549,653,786,624 바이트 남음
.study_python_3.11.0.TEST\game\sound 디렉터리2023-04-28 오후 05:26 <DIR> .2023-04-28 오후 05:26 <DIR> ..2023-04-28 오후 05:26 0 __init__.py 1개 파일 0 바이트 전체 파일: 3개 파일 0 바이트 8개 디렉터리 549,653,786,624 바이트 남음
2. echo.py 파일 생성
아래와 같이 echo.py 파일을 생성해 줍니다.
Python
# echo.pydefecho_test():print("echo")
3. render.py 파일 생성
아래와 같이 render.py 파일을 생성해 줍니다.
Python
# render.pydefrender_test():print("render")
4. 파이썬 환경변수 PYTHONPATH 에 디렉터리 추가하기
지금 진행하고 있는 game 패키지를 파이썬에서 참조할 수 있도록 명령 프롬프트 창에서 set 명령어를 통해 PYTHONAPTH 환경 변수에 현재 디렉토리를 추가해 줍니다. 그리고 파이썬 대화형 인터프리터(Interractive Shell) 을 실행을 해보겠습니다.
BAT
(py_study_3110) D:\Dropbox.My_Job.Study.Python
(py_study_3110) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\game>set PYTHONPATH=D:/Dropbox/02.My_Job/80.Study/01.Python/00.study_python_3.11.0/01.TEST(py_study_3110) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\game>pythonPython 3.11.0 | packaged by Anaconda, Inc. | (main, Mar 1 2023, 18:18:21) [MSC v.1916 64 bit (AMD64)] on win32Type"help", "copyright", "credits" or "license"formore information.>>>
(py_study_3110) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\game>set PYTHONPATH=D:/Dropbox/02.My_Job/80.Study/01.Python/00.study_python_3.11.0/01.TEST(py_study_3110) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\game>pythonPython 3.11.0 | packaged by Anaconda, Inc. | (main, Mar 1 2023, 18:18:21) [MSC v.1916 64 bit (AMD64)] on win32Type"help", "copyright", "credits" or "license"formore information.>>>
.study_python_3.11.0.TEST\game>pythonPython 3.11.0 | packaged by Anaconda, Inc. | (main, Mar 1 2023, 18:18:21) [MSC v.1916 64 bit (AMD64)] on win32Type"help", "copyright", "credits" or "license"formore information.>>>
여기까지 파이썬 패키지에 대해서 공부하기 위한 준비 작업을 마쳤습니다. 다음 포스팅에 이어서 패키지에 대한 공부를 이어가 보겠습니다.
이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.