55. 파이썬 – 패키지. relative 패키지와 예외 처리

55. 파이썬 – 패키지. relative 패키지와 예외 처리

지난 포스팅에서 __INIT__.PY 의 용도와 __init__.py 파일 변경 후 실행하는 방법에 대해 공부 해봤습니다
이번 포스팅에서는 relative 패키지 가 어떤 건지와 예외 처리에 대해 공부해 보도록 하겠습니다

54. 파이썬 – 패키지 __init__.py 의 용도
53. 파이썬 – 패키지 안의 함수 실행해 보기
52. 파이썬 – 패키지의 정의와 만드는 방법

파이썬 패키지

relative 패키지

지난 시간까지 진행했던 파이썬 패키지에서 만일 graphic 디렉터리의 있는 render.py 모듈이 sound 디렉터리의 echo.py 모듈을 사용하려 한다면 어떻게 하는게 좋을까요?
아래 수정한 render.py 를 살펴 보겠습니다

Python
# render.py
from game.sound.echo import echo_test
def render_test():
    print("render")
    echo_test()

위 코드 에서와 같이 from game.sound.echo import echo_test 문장을 추가해서 echo_test 함수를 사용할 수가 있도록 수정을 했습니다.
이제 이렇게 수정한 결과를 살펴보도록 하겠습니다.

Python
>>> from game.graphic.render import render_test
>>> render_test()
render
echo
>>>

위에서 수정한 render.py 의 내용만 잘 수정하셨다면 방금 실행한 코드는 이상없이 잘 수행이 될것입니다.

이처럼 from game.sound.echo import echo_test 문장을 입력해서 전체 경로를 사용하여 import 할 수도 있지만 아래 코드처럼 \이 from ..sound.echo import echo_test 로 relative 하게 import 하는 것도 가능합니다.

from game.sound.echo import echo_test 문장이 from ..sound.echo import echo_test 로 변경이 되었습니다.
여기서 .. 은 render.py 파일의 부모인 디렉터리를 의미하게 됩니다.
결국 reder.py 파일의 부모 디렉터리는 game 이므로 위처럼 import ㄱ 가능하게 되는 것입니다.

render.py 파일의 현재 디렉터리는 graphic 이며 부모 디렉터리는 game 입니다

relative 한 접근자에게는 아래와 같은 것이 있습니다.

.. - 부모 디렉터리
. - 현재 디렉터리

위 내용은 윈도우에서 사용하는 명령프롬프트에서도 동일하게 사용하는 것을 볼 수 있습니다.

예외 처리 #1

예외 처리의 정의

프로그래밍을 하다 보면 정말 알 수 없는 수많은 오류를 만나게 됩니다.
이렇게 오류를 만나는 것은 프로그램이 잘 못 되는 것을 막기 위한 프로그래밍 언어들의 배려 라고 볼 수 있습니다.
이렇게 프로그램이 잘못되는 것을 막기 위해 처리하는 것을 예외 처리라고 합니다.

오류가 발생하는 경우

우선 오류가 발생하는 경우에 처리하는 방법에 대해서 공부하기 전에 어떤 상황에서 오류가 발생하는지 알아 보겠습니다.

오타에 대한 오류

제일 흔하게 발생하는 오류는 오타에 대한 오류 입니다.
이런 오타에 대한 오류는 보통 구문 오류 라고 하는데 간단하게 얘기해 보면 print 명령을 해야 하는데 prtint 라고 해서 나오는 오류 들이 이런 구문 오류 입니다.

FileNotFoundError 오류

FileNotFoundError 오류는 존재 하지 않는 파일을 사용하려고 시도하다 보면 발생하는 오류 입니다

Python
>>> f = open("메인없는 파일",'r')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: '메인없는 파일'
>>>

위 코드처럼 open 명령을 통해 파일을 열려고 하는데 실제로는 존재하지 않는 파일이기 때문에 FileNotFoundError 가 발생 하게 됩니다

  • 이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.
55. 파이썬 - 패키지. relative 패키지

54. 파이썬 – 패키지 __init__.py 의 용도

54. 파이썬 – 패키지 __init__.py 의 용도

지난 포스팅에서는 echo 모듈을 import 하여 실행하는 방법부터 echo_test 함수가 안되는 경우 두 가지에 대해서 공부 해봤습니다.

이번 포스팅에서는 __init__.py 는 어떤 용도로 쓰이는 지 __init__.py 의 용도에 대해 공부해 보도록 하겠습니다

파이썬 패키지

__init__.py 의 용도

__init__.py 파일은 해당하는 디렉터리가 패키지의 일부 임을 알려주는 역할을 하게 됩니다
만약에 game.sound.graphic 등의 패키지가 포함되어 있는 디렉터리에 __init__.py 파일이 존재하지 않는다면 패키지로 인식 될 수가 없습니다.

python 3.3 버전부터는 __init__.py 파일이 없어도 패키지로 인식할 수 있게 끔 변경이 되었습니다.
그러나 하위 버전 호환을 위해서 __init__.py 파일을 생성하는 것이 안전한 방법일 수 있습니다.

Python
(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>python
Python 3.11.0 | packaged by Anaconda, Inc. | (main, Mar  1 2023, 18:18:21) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from game.sound import *
>>> echo.echo_test()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'echo' is not defined
>>>
.study_python_3.11.0.TEST>python
Python 3.11.0 | packaged by Anaconda, Inc. | (main, Mar 1 2023, 18:18:21) [MSC v.1916 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> from game.sound import * >>> echo.echo_test() Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'echo' is not defined >>>

위 코드를 실행을 해보겠습니다.
Traceback (most recent call last):
File “”, line 1, in
NameError: name ‘echo’ is not defined 오류가 발생하게 됩니다.
우리는 분명 game.sound 패키지 안에서 모든 것(*)을 import 하였으니 echo 모듈을 사용 하는게 당연한 것처럼 생각이 들지만 echo 라는 이름이 정의 되지 않았다고 오류를 출력하게 됩니다.(NameError)

__all__ 변수

이런 식으로 특정 디렉터리의 모듈을 * 를 사용하여 import 할 때에는 아래처럼 해당하는 디렉터리의 __init__.py 파일에 __all__ 변수를 설정하고 import 할 수 있게 끔 모듈을 정의해 주면 됩니다.

Python
# D:/Dropbox/02.My_Job/80.Study/01.Python/00.study_python_3.11.0/01.TEST/game/sound/__init__.py
__all__ = ['echo']

위 코드에서 __all__ 은 sound 디렉터리에서 * 기호를 사용하여 import 할 경우에 여기에 정의되어 있는 echo 모듈 만을 import 한다는 의미로 해석하시면 됩니다.

여기서 혼동하기 쉬운 부분이 from game.sound.echo import * 는 __all__ 과는 관계없이 무조건 import 를 하게 됩니다.
이런 식으로 __all__ 과 상관 없이 무조건 import 되는 경우는 from a.b.c import * 에서 from 의 마지막 항목인 c 가 모듈인 경우 입니다.

__init__.py 파일 변경 후 실행

Python
(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>python
Python 3.11.0 | packaged by Anaconda, Inc. | (main, Mar  1 2023, 18:18:21) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from game.sound import *
>>> echo.echo_test()
echo
>>>
.study_python_3.11.0.TEST>python
Python 3.11.0 | packaged by Anaconda, Inc. | (main, Mar 1 2023, 18:18:21) [MSC v.1916 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> from game.sound import * >>> echo.echo_test() echo >>>

이제 위 코드처럼 __init__.py 파일을 변경 한 후 대화형 인터프리터를 재실행한 뒤에 다시 실행을 해 보면 우리가 원한던 결과가 정상적으로 출력됨을 알 수가 있습니다.~

이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.

54. 파이썬 – 패키지 __init__.py 의 용도

53. 파이썬 – 패키지 안의 함수 실행해 보기

53. 파이썬 – 패키지 안의 함수 실행해 보기

지난번 포스팅에 이어서 파이썬 패키지에 대해 공부를 해 볼 텐데요
지난 시간에는 패키지의 정의와 패키지 만드는 방법에 대해 알아보았고
이번 시간에는 패키지 안의 함수 실행해 보기에 대해 알아보겠습니다.

파이썬 패키지

패키지 안의 함수 실행

일단 이번 패키지 안의 함수 실행에 있어서 주의 해야 할 사항은 명령프롬프트에서 파이썬 인터프리터를 실행해서 진행해야 합니다.
IDLE 이나 비주얼스튜디어코드 에서 실행을 하게되면 아래에 진행 할 예제들에서 오류가 발생 할 수 있습니다

첫 번째 echo 모듈

echo 모듈은 echo.py 입니다.

Python
>>> import game.sound.echo
>>> game.sound.echo.echo_test()
echo
>>>

두 번째 echo 모듈이 있는 디렉터리까지 from…import 실행

Python
>>> from game.sound import echo
>>> echo.echo_test()
echo
>>>

세 번째 echo 모듈의 echo_test 함수를 직접 import 하여 실행

Python
>>> from game.sound.echo import echo_test
>>> echo_test()
echo
>>>

echo_test 함수가 안되는 경우 #1

아래와 같은 코드는 반드시 파이썬 인터프리터를 종료하고 다시 실행해야 합니다

Python
(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>python
Python 3.11.0 | packaged by Anaconda, Inc. | (main, Mar  1 2023, 18:18:21) [MSC v.1916 64 bit (AMD64)] on win32
Type "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>python
Python 3.11.0 | packaged by Anaconda, Inc. | (main, Mar 1 2023, 18:18:21) [MSC v.1916 64 bit (AMD64)] on win32 Type "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_test
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'game.sound.echo.echo_test'; 'game.sound.echo' is not a package
>>>

도트 연산자(.)를 사용해서 import a.b.c 처럼 import 할 때 가장 마지막에 항목인 c 는 반드시 모듈 또는 패키지이어야만 합니다.

오늘은 이렇게 패키지 안의 함수 실행하는 방법에 대해 알아보았습니다.
echo 모듈을 import 하여 실행하는 방법부터 echo_test 함수가 안되는 경우 두 가지에 대해서 공부 해봤습니다.

다음 포스팅에서는 __init__.py 는 어떤 용도로 쓰이는지에 대해 공부해 보도록 하겠습니다

이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.

53. 파이썬 – 패키지 안의 함수 실행해 보기

명령 프롬프트 #2 cmd 응용프로그램 실행

명령 프롬프트 #2 cmd 응용프로그램 실행

이전에 cmd 명령 프롬프트가 어떤 것인지 그리고 윈도우 파일 탐색기와 살짝 비교를 해봤고
cmd 명령 프롬프트에서 cd 와 dir 명령을 사용도 해보고 C 드라이브 에서 D 드라이브로 이동도 해봤습니다.
이번에는 cmd 응용프로그램 실행하는 것을 해보겠습니다.

Cmd 윈도우 명령 프롬프트

cmd 응용프로그램 실행

cmd 응용프로그램 실행 단계

cmd 에서 응용프로그램을 실행하는 과정을 살펴 보겠습니다.
먼저 실행할 응용프로그램이 있는 디렉터리로 이동을 합니다.
그다음 이동한 디렉터리에서 실행파일(.exe) 파일의 이름을 입력한 후 엔터를 칩니다.

계산기 응용프로그램 실행

윈도우의 기본 프로그램인 계산기를 실행 해 보겠습니다.
계산기는 calc.exe 파일이고 C:\Windows\System32 디렉터리에 있습니다
윈도우 기본 프로그램들은 대부분 C:\Windows\System32 에 있다고 생각하시면 됩니다.

아래 실행 예를 보겠습니다.
이전에 해봤던 cd 명령을 사용해 C:\Windows\System32 로 이동을 합니다.
그리고 dir 명령을 사용해 파일을 확인 해봤습니다.
System32 에는 워낙 많은 파일과 폴더들이 존재하기에 calc.exe 가 정확하게 나올 수 있도록 dir calc*.exe 라고 명령을 해봤습니다.

그리고 나온 파일 목록에서 정확한 파일명인 calc.exe 를 실행 시켜 봤습니다.

BAT
Microsoft Windows [Version 10.0.22621.1555]
(c) Microsoft Corporation. All rights reserved.

C:\Users\donnr>cd \Windows\System32

C:\Windows\System32>dir calc*.exe
 C 드라이브의 볼륨에는 이름이 없습니다.
 볼륨 일련 번호: 6ACD-4F35

 C:\Windows\System32 디렉터리

2022-05-07  오후 02:20            45,056 calc.exe
               1개 파일              45,056 바이트
               0개 디렉터리  78,679,220,224 바이트 남음

C:\Windows\System32>calc.exe

C:\Windows\System32>

exe 실행파일을 실행시킬 때에는 확장자인 .exe 를 생략하고 실행을 해도 실행이 됩니다.

BAT
C:\Windows\System32>calc

명령 프롬프트 #2 Cmd 응용프로그램 실행

메모장 응용프로그램 실행

이번에는 윈도우 기본 메모장을 실행시켜 보겠습니다.
메모장 프로그램은 notepad.exe 입니다.
이번에는 위에서 테스트 해본대로 확장자 없이 실행을 해보겠습니다.

BAT
C:\Windows\System32>notepad

아무 이상없이 잘 실행되는 것을 확인 할 수 있습니다.

C:\Windows\System32>notepad

앞서 말씀 드린대로 cmd 명령 프롬프트 에서는 .exe의 확장자를 가지고 있는 실행 파일을 실행 시킬때에는 확장자를 생략해도 실행이 가능합니다.

작업디렉토리

만약에 디렉토리를 해당 파일이 있는 곳까지 이동하지 않고 실행파일을 실행하면 어떻게 될까요?
원래 있던 디렉토리로 이동을 해서 notepad 를 실행시켜 봤습니다.
어? 정상 실행이 되네요?

BAT
C:\Windows\System32>cd \users\donnr

C:\Users\donnr>notepad

C:\Users\donnr>

이유는 System32 디렉터리의 경우 윈도우의 시스템 변수인 환경 변수에 이미 등록이 되어 있기 때문에
다른 위치에서도 정상적으로 실행이 가능한 것입니다.

시스템 환경 변수 확인

그럼 환경 변수에 어떻게 등록이 되어 있는지 확인을 해보겠습니다.

명령 프롬프트 #2 Cmd 응용프로그램 실행 (2)

위처럼 환경변수에 System32 디렉터리가 등록되어 있는 것을 확인 할 수 있습니다.
지금 cmd 명령 프롬프트 에 대해 알아보고 있으니 명령 프롬프트에서 확인을 해볼까요?
cmd 창에서 set 이라고 실행을 해보겠습니다.

BAT
C:\Users\donnr>set
.
.
.
HOMEDRIVE=C:
HOMEPATH=\Users\donnr
LOCALAPPDATA=C:\Users\donnr\AppData\Local
LOGONSERVER=\\BAEKSH_8700K
NUMBER_OF_PROCESSORS=12
OneDrive=C:\Users\donnr\OneDrive
OneDriveConsumer=C:\Users\donnr\OneDrive
OS=Windows_NT
Path=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files\Bandizip\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Users\donnr\anaconda3;C:\Users\donnr\anaconda3\Library\mingw-w64\bin;C:\Users\donnr\anaconda3\Library\usr\bin;C:\Users\donnr\anaconda3\Library\bin;C:\Users\donnr\anaconda3\Scripts;C:\Users\donnr\AppData\Local\Microsoft\WindowsApps;C:\Users\donnr\AppData\Local\Programs\Microsoft VS Code\bin
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
.
.
.

C:\Users\donnr>

먼가 굉장히 많이 나오는데 중간에 Path= 하고 경로들이 ; (세미콜론)으로 구분되어 등록이 되어 있는걸 확인 할 수 있습니다.

MicroSoft 홈페이지 바로가기
https://www.microsoft.com/ko-kr

윈도우 파일 탐색기와 Cmd 명령 프롬프트 #1

윈도우 파일 탐색기와 Cmd 명령 프롬프트 #1

파이썬 공부를 하다보니 윈도우의 명령 프롬프트도 간간히 사용하게 되고 해서
윈도우 명령 프롬프트에 대해서도 좀 알아볼까 합니다.
이전에 윈도우 명령 프롬프트 나 파일 탐색기 에 관한 내용이 있었던 포스팅들입니다.

윈도우 파일 탐색기

윈도우의 파일 탐색기가 어떤 건지는 다들 아실 겁니다.

윈도우 파일 탐색기와 명령 프롬프트

위에 보시는게 바로 윈도우에 존재하는 파일 탐색기 입니다.
내 컴퓨터 안에 있는 모든 폴더들과 파일들을 볼 수 있는 프로그램입니다.

윈도우 명령 프롬프트 Cmd

그럼 윈도우 명령 프롬프트는 어떤 걸까요?
아래 이미지에 보이는 게 바로 명령 프롬프트 입니다.
언제 어디선가 본 듯한 기억이 나는 명령 프롬프트
예전에 윈도우 운영체제가 나온지 얼마 안되었을때나
그 이전에 DOS 를 사용하던 시절에는 이 명령 프롬프트를 많이 사용 했었습니다.

윈도우 파일 탐색기와 명령 프롬프트

윈도우 명령 프롬프트 명령어

dir 명령

위에서 봤던 윈도우 파일 탐색기에서 내용들을 보겠습니다.

윈도우 파일 탐색기와 명령 프롬프트

그리고 명령 프롬프트에서 파일들을 보겠습니다
이때 사용하는 명령어가 dir 명령입니다.
아래처럼 명령 프롬프트에서 dir 명령을 실행시키면 위에 있는 윈도우 탐색기에서처럼 폴더와 파일 내용들이 보입니다.
<DIR> 이라고 이라고 표시된 것들이 디렉토리. 윈도우의 폴더를 의미하구요
나머지는 파일들이라고 보시면 됩니다.

BAT
Microsoft Windows [Version 10.0.22621.1555]
(c) Microsoft Corporation. All rights reserved.

C:\Users\BSH-MSI>dir
 C 드라이브의 볼륨에는 이름이 없습니다.
 볼륨 일련 번호: CCDA-4871

 C:\Users\BSH-MSI 디렉터리

2023-04-12  오후 02:20    <DIR>          .
2023-03-03  오후 06:01    <DIR>          ..
2023-03-13  오전 10:37    <DIR>          .android
2023-04-12  오후 02:20    <DIR>          .cache
2023-04-28  오후 09:05    <DIR>          .conda
2023-03-14  오전 08:23                25 .condarc
2023-03-14  오전 08:22    <DIR>          .continuum
2023-03-14  오전 08:35    <DIR>          .ipython
2023-04-07  오후 07:40    <DIR>          .matplotlib
2023-03-14  오전 09:20    <DIR>          .vscode
2023-04-05  오후 02:00    <DIR>          .wdm
2023-03-23  오후 07:59    <DIR>          anaconda3
2023-03-03  오후 05:43    <DIR>          Contacts
2023-04-28  오후 08:17    <DIR>          Documents
2023-03-04  오후 09:44    <DIR>          Downloads
2023-03-04  오후 08:07    <DIR>          downloadtemp
2023-03-03  오후 05:43    <DIR>          Favorites
2023-03-03  오후 05:43    <DIR>          Links
2023-03-17  오전 10:11    <DIR>          Local Sites
2023-03-09  오전 08:21    <DIR>          OneDrive
2023-03-03  오후 05:43    <DIR>          Saved Games
2023-03-03  오후 06:07    <DIR>          Searches
2023-03-14  오전 08:41                 0 untitled.txt
               2개 파일                  25 바이트
              21개 디렉터리  67,923,464,192 바이트 남음

C:\Users\BSH-MSI>

드라이브 이동과 cd 명령어

내 컴퓨터에 C 드라이브만 있는게 아니라 D 드라이브도 존재한다고 했을때 명령 프롬프트에서 이동을 할때는 d: 라고만 입력하고 엔터를 치면 바로 이동을 하게 됩니다.
그리고 위에서 확인했던 dir 명령어를 사용하면 디렉터리 들이 보이게 됩니다.
test 라는 하위 디렉터리가 있는데 test 디렉터리로 이동을 하고 싶다면 cd 명령을 쓰시면 됩니다.
cd test 라고 입력하면 명령 프롬프트의 프롬프트가 D:\test 로 바뀐 것을 확인 할 수 있습니다.
여기서 다시 dir 로 안의 내용물을 확인 할 수가 있습니다.

BAT
C:\Users\BSH-MSI>d:

D:\>
D:\>dir
 D 드라이브의 볼륨에는 이름이 없습니다.
 볼륨 일련 번호: C4C6-D950

 D:\ 디렉터리

2023-03-04  오후 07:41    <DIR>          Dropbox
2023-03-01  오후 02:08    <DIR>          HitPaw Video Downloader
2006-12-01  오후 11:37           904,704 msdia80.dll
2021-07-20  오후 09:18    <DIR>          Program Files
2023-04-18  오후 05:23    <DIR>          test
2023-04-23  오후 05:43    <DIR>          다운로드
2023-03-16  오후 04:01    <DIR>          백업
2023-04-13  오후 07:55    <DIR>          완료
2022-11-27  오후 01:38    <DIR>          프로그램
               1개 파일             904,704 바이트
               8개 디렉터리  549,653,237,760 바이트 남음

D:\>cd test

D:\test>dir
 D 드라이브의 볼륨에는 이름이 없습니다.
 볼륨 일련 번호: C4C6-D950

 D:\test 디렉터리

2023-04-18  오후 05:23    <DIR>          .
2023-04-18  오후 05:23                30 python_test.txt
2023-04-18  오후 05:15               485 신규파일.txt
               2개 파일                 515 바이트
               1개 디렉터리  549,653,237,760 바이트 남음

MicroSoft 홈페이지 바로가기

52. 파이썬 – 패키지의 정의와 만드는 방법

52. 파이썬 – 패키지의 정의와 만드는 방법

지난 포스팅에서는 파이썬에서 모듈을 불러오는 다른 방법에 대해 공부해 봤습니다.
이제 파이썬 패키지에 대해 공부를 해 볼텐데요
먼저 패키지의 정의와 패키지 만드는 방법에 대해 공부해 보도록 하겠습니다.

파이썬 패키지

패키지의 정의

패키지의 정의에 대해 먼저 알아 보겠습니다. 패키지는 Packages 로 도트(.) 를 사용하여 파이썬의 모듈들을 계층적 디렉터리 구조 형태로 관리를 할 수 있게 끔 해줍니다.
예로 모듈 이름이 AAA.BBB 인 경우에 A 는 패키지 이름이 되며, BBB 는 A 패키지의 B 모듈이 되는 것 입니다.
여기에서 나오는 파이썬에서 모듈의 이전에 공부 했듯이 하나의 파이썬 파일(.py) 입니다

파이썬에서 패키지는 디렉터리와 파이썬 모듈로 이루어 집니다.

패키지의 구조

패키지의 구조를 살펴보면 아래 와 같습니다.
가상으로 game 이란 패키지의 예를 보겠습니다.

Python
game/
    __init___.py
    sound/
        __init__.py
        echo.py
        wav.py
    graphic/
        __init__.py
        screen.py
        render.py
    play/
        __init__.py
        run.py
        test.py

위의 패키지 예를 보게 되면 game, sound, graphic, play 는 디렉터리이고 확장자가 .py 인 파일들은 파이썬 모듈입니다.
game 디렉터리가 이 패키지의 루트 디렉터리이고 sound, graphic, play 는 서브 디렉터리입니다.

간단한 파이썬 프로그램이라면 굳이 이렇게 패키지로 구조로 만들 필요가 없겠지만
이렇게 패키지 구조로 파이썬 프로그램을 만들게 되면 공동 작업이나 유지 보수 등을 할 때
여러가지 유리한 점들이 생깁니다.
그리고 패키지 구조로 모듈을 만들게 되면 다른 모듈과 이름이 겹치게 되더라도 안전하게 사용이 가능합니다.

패키지 만드는 방법

이제 위의 예와 비슷한 game 패키지를 만들어 보면서 패키지에 대해 더 공부해 보도록 하겠습니다.

패키기 기본 구성 요소

1. 디렉터리 생성과 파일 생성

game 디렉터리를 생성하고 game 디렉터리 밑에 서브 디렉터리까지 생성을 해보겠습니다.
그리고 파이썬 파일들을 만들어 보겠습니다.

저는 기존에 진행하던게 있어서 계속적으로 아래 폴더에 생성을 해보겠습니다.

D:\Dropbox.My_Job.Study.Python
D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\game\
.study_python_3.11.0.TEST\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>          graphic
2023-04-28  오후 05:26    <DIR>          sound
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\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>          graphic
2023-04-28  오후 05:26    <DIR>          sound
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\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> graphic 2023-04-28 오후 05:26 <DIR> sound 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>          graphic
2023-04-28  오후 05:26    <DIR>          sound
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\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>          graphic
2023-04-28  오후 05:26    <DIR>          sound
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\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.py
def echo_test():
    print("echo")

3. render.py 파일 생성

아래와 같이 render.py 파일을 생성해 줍니다.

Python
# render.py
def render_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>python
Python 3.11.0 | packaged by Anaconda, Inc. | (main, Mar  1 2023, 18:18:21) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
.study_python_3.11.0.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.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>python
Python 3.11.0 | packaged by Anaconda, Inc. | (main, Mar  1 2023, 18:18:21) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
.study_python_3.11.0.TEST\game
>python
Python 3.11.0 | packaged by Anaconda, Inc. | (main, Mar 1 2023, 18:18:21) [MSC v.1916 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>>

여기까지 파이썬 패키지에 대해서 공부하기 위한 준비 작업을 마쳤습니다.
다음 포스팅에 이어서 패키지에 대한 공부를 이어가 보겠습니다.

  • 이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.
52. 파이썬 - 패키지의 정의와 만드는 방법

파이썬 아나콘다 프롬프트 가상환경 바로가기

파이썬 아나콘다 프롬프트 가상환경 바로가기

이전에 파이썬을 아나콘다 설치를 통해 가상환경을 설정을 하고 가상환경에서 프로그래밍을 하는 방법에 대해 알아봤었습니다.

파이썬 아나콘다 가상환경

아나콘다 프롬프트 가상환경 바로가기 만들기

파이썬을 이것 저것 만지려 하다 보면
저 같은 경우는 주로 비주얼스튜디오코드에서 코딩 연습을 하지만
명령 프롬프트에서 파이썬을 실행시켜 코딩 연습을 할 때도 있습니다.

그런데 아나콘다를 통해 가상 환경을 셋팅을 하고 코딩 연습을 하는데
일반 윈도우 명령 프롬프트에서 파이썬을 실행시키면
가상 환경을 셋팅한 의미가 없어지겠죠

그래서 아나콘다 자동 실행 Batch 파일을 만드는 것도 진행을 해봤구요

그럼 이번 포스팅에서는 일반 윈도우 명령 프롬프트가 아닌 아나콘다 프롬프트를 실행시켜서
이미 셋팅해 놓은 가상 환경에 바로 전환이 되는 작업을 같이 해보겠습니다.

아나콘다 명령프롬프트 바로 가기 복사

먼저 아나콘다 프롬프트 바로 가기의 위치를 열어 줍니다.
(방법은 위 링크에 해놓은 ‘파이썬 아나콘다 자동 실행 Batch 만들기’에서 확인하실 수 있습니다.)
일단 기존에 있던 바로 가기를 하나 더 복사해서 사용을 하고
이름은 Anaconda Prompt study 로 바꾸겠습니다.

파이썬 아나콘다 프롬프트 가상환경 바로가기

바로가기 속성 기본 대상

생성한 바로 가기에서 마우스 오른쪽 버튼을 클릭해 속성으로 들어가 줍니다.

파이썬 아나콘다 프롬프트 가상환경 바로가기

속성에서 바로 가기 탭으로 이동한 뒤 대상 을 보게 되면

파이썬 아나콘다 프롬프트 가상환경 바로가기

아래처럼 나옵니다.
이 대상은 제 컴퓨터에 해당하는 대상이므로 환경마다 다를 겁니다.

%windir%\System32\cmd.exe "/K" C:\Users\donnr\anaconda3\Scripts\activate.bat C:\Users\donnr\anaconda3

이렇게 나온 대상을 줄 바꿈을 해보겠습니다.

%windir%\System32\cmd.exe
"/K"
C:\Users\donnr\anaconda3\Scripts\activate.bat
C:\Users\donnr\anaconda3

줄 바꿈을 해보면 위처럼 명령들이 나오는데
첫번째 줄의 cmd.exe 는 윈도우에 있는 명령 프롬프트 창을 말합니다.
두번째 줄의 “/K” 는 첫번째 줄에서 실행한 명령 프롬프트 창에
이후에 입력하는 명령어 들을 입력을 하라는 의미입니다.

그럼 먼저 명령 프롬프트를 열고
C:\Users\donnr\anaconda3\Scripts\activate.bat 을 실행해서
윈도우 명령 프롬프트 창을 아나콘다 프롬프트로 바꾸어 주는 역할을 하게 됩니다.
마지막 줄의 anaconda3 는 기본 가상 환경인 base 로 가상 환경을 설정을 해준다는 의미입니다.

바로가기 속성 대상 변경하기

이제 여기서 해줘야 할 일은 기본 base 로 가상 환경이 설정되는 것을
이미 만들어 놓은 가상 환경으로 바꿔주는 일 입니다.
위 대상에 나와있는 명령 중 마지막
C:\Users\donnr\anaconda3
이 부분만 변경해 주면 됩니다.

C:\Users\donnr\anaconda3\envs\설정할 가상 환경 폴더 이름

가상 환경 폴더 이름은 이미 우리가 설정했었던 가상 환경 이름입니다.
저의 경우는 ‘py_study_31010’ 으로 했었습니다.
파이썬 버전까지 같이 이름에 넣어뒀죠 ㅎ
그럼 가상 환경 이름으로 변경을 해주면 아래처럼 됩니다.

C:\Users\donnr\anaconda3\envs\py_study_31010

이제 아까 대상에 있던 명령 마지막 줄을 이 내용으로 바꿔주면 됩니다.

%windir%\System32\cmd.exe
"/K"
C:\Users\donnr\anaconda3\Scripts\activate.bat
C:\Users\donnr\anaconda3\envs\py_study_31010

가상 환경 폴더 바로 가기

여기서 만약 아나콘다 프롬프트 바로 가기를 실행했을때
폴더를 해당 폴더로 이동하기 위해서 cd 명령 치고 하던걸
이 바로가기를 통해서 이동하고 싶다면 아래처럼 하시면 됩니다.

%windir%\System32\cmd.exe
"/K"
C:\Users\donnr\anaconda3\Scripts\activate.bat
C:\Users\donnr\anaconda3\envs\py_study_31010
&& D:
&& cd "D:\Dropbox.My_Job.Study.Python
%windir%\System32\cmd.exe
"/K"
C:\Users\donnr\anaconda3\Scripts\activate.bat
C:\Users\donnr\anaconda3\envs\py_study_31010
&& D:
&& cd "D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0"
.study_python_3.11.0"

위 명령에서 && 을 사용을 하면 && 뒤에 수행하는 명령어를 연속으로 실행시켜 주게 됩니다.
&을 하나만 사용하게 되면 앞에서 오류가 나도 그냥 진행을 해버리고
&& 처럼 두 개를 사용하게 되면 앞에서 오류가 나면 멈추게 됩니다.

최종 대상을 확인해 보겠습니다.
아래처럼 된 상태에서 아까 바로 가기 속성에 있던 대상 옆에 내용을 아래 내용으로 바꿔 주시면 됩니다.

%windir%\System32\cmd.exe "/K" C:\Users\donnr\anaconda3\Scripts\activate.bat C:\Users\donnr\anaconda3\envs\py_study_31010 && D: && cd "D:\Dropbox.My_Job.Study.Python
%windir%\System32\cmd.exe "/K" C:\Users\donnr\anaconda3\Scripts\activate.bat C:\Users\donnr\anaconda3\envs\py_study_31010 && D: && cd "D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0"
.study_python_3.11.0"

최종적으로 기본 제공되는 아나콘다 프롬프트와 변경한 프롬프트 바로 가기를 실행해 봤습니다.

파이썬 아나콘다 프롬프트 가상환경 바로가기

위 실행된 창 처럼 변경한 바로가기는 열자마자 바로 가상 환경으로 변경이 되고
지정 폴더로 이동한 모습을 볼 수 있습니다.

이번 포스팅은 대왕초밥님의 블로그를 참고 했습니다

51. 파이썬 – 모듈을 불러오는 다른 방법

51. 파이썬 – 모듈을 불러오는 다른 방법

지난 포스팅에서 모듈에는 함수뿐만 아니라 클래스나 변수 등을 포함한 모듈도 있다는 것과
다른 파일에서 모듈을 불러오는 방법에 대해 알아봤습니다
이번 포스팅에서는 모듈을 불러오는 다른 방법에 대해 공부해 보도록 하겠습니다.

파이썬 모듈

모듈을 불러오는 다른 방법

여태까지 진행한 파이썬 모듈에서는 모듈이 있는 폴더에 이동 후에 해당 모듈을 사용을 할 수 있었습니다.
이제 모듈이 저장되어있는 폴더로 이동하지 않고 해당 모듈을 불러서 사용하는 방법도 공부해 보도록 하겠습니다.

먼저 이전 포스팅에서 만들었던 module2.py 파일을 기존 폴더에서 module 이라는 폴더를 하나 더 만들고 해당 폴더로 이동시켜 보겠습니다.

Python
(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>mkdir module

(py_study_3110) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>move module2.py module
        1개 파일을 이동했습니다.
.study_python_3.11.0.TEST>mkdir module
(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>mkdir module

(py_study_3110) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>move module2.py module
        1개 파일을 이동했습니다.
.study_python_3.11.0.TEST>move module2.py module
1개 파일을 이동했습니다.

sys.path.append 사용하기

모듈을 불러오는 다른 방법 첫번째는 sys.path.append 를 사용하는 방법입니다.
일단 파이썬 쉘을 실행한 뒤 sys 모듈을 불러오겠습니다.

Python
(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>python
Python 3.11.0 | packaged by Anaconda, Inc. | (main, Mar  1 2023, 18:18:21) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>>
.study_python_3.11.0.TEST>python
Python 3.11.0 | packaged by Anaconda, Inc. | (main, Mar 1 2023, 18:18:21) [MSC v.1916 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>>

위에서 import 한 sys 모듈은 파이썬이 최초 설치될 때 함께 설치되는 라이브러리 모듈입니다.
sys 모듈을 사용을 하게 되면 파이썬 라이브러리가 설치되어 있는 폴더를 확인할 수 있습니다.

Python
>>> sys.path
['', 'C:\\Users\\BSH-MSI\\anaconda3\\envs\\py_study_3110\\python311.zip', 'C:\\Users\\BSH-MSI\\anaconda3\\envs\\py_study_3110\\Lib', 'C:\\Users\\BSH-MSI\\anaconda3\\envs\\py_study_3110\\DLLs', 'C:\\Users\\BSH-MSI\\anaconda3\\envs\\py_study_3110', 'C:\\Users\\BSH-MSI\\anaconda3\\envs\\py_study_3110\\Lib\\site-packages']
>>>

sys.path 를 실행시키게 되면 파이썬 라이브러리가 설치 되어 있는 폴더들을 출력 해 줍니다.
만약에 파이썬 모듈이 위에 출력된 폴더에 있다면 모듈이 저장된 폴더로 이동을 하지 않고도 바로 해당 모듈을 불러서 사용을 할 수가 있을 것입니다.
그럼 sys.path 에 이전에 mkdir 로 생성했던 D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\module 라는 폴더를 추가해 주게 된다면 어느 폴더에서든지 해당 모듈을 불러와서 사용할 수 있지 않을까요?

위에서 보여지는 것처럼 sys.path 는 리스트 형식으로 저장되어 있는걸 알 수 있고
리스트는 수정이 가능합니다.

Python
>>> sys.path.append("D:/Dropbox/02.My_Job/80.Study/01.Python/00.study_python_3.11.0/01.TEST/module")
>>> sys.path
['', 'C:\\Users\\BSH-MSI\\anaconda3\\envs\\py_study_3110\\python311.zip', 'C:\\Users\\BSH-MSI\\anaconda3\\envs\\py_study_3110\\Lib', 'C:\\Users\\BSH-MSI\\anaconda3\\envs\\py_study_3110\\DLLs', 'C:\\Users\\BSH-MSI\\anaconda3\\envs\\py_study_3110', 'C:\\Users\\BSH-MSI\\anaconda3\\envs\\py_study_3110\\Lib\\site-packages', 'D:/Dropbox/02.My_Job/80.Study/01.Python/00.study_python_3.11.0/01.TEST/module']
>>>

sys.path.append 라고 명령을 해서 D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\module 라는 폴더를 path 에 추가를 해주었습니다.
sys.path 라고 실행해 보면 방금 추가한 폴더가 추가되었음을 확인 할 수 있습니다.
여기서 주의할 점은 그냥 경로를 붙여넣기 해버리면 \\ 로 들어가는데 / 로 변경해서 append 를 해주시면 위처럼 D:/Dropbox/02.My_Job/80.Study/01.Python/00.study_python_3.11.0/01.TEST/module 이렇게 경로가 추가됨을 알 수 있습니다.

이제 정말 모듈을 불러와서 사용할 수 있는지 확인 해 보겠습니다.

Python
>>> import module2
>>> print(module2.add(3, 4))
7
>>>

위처럼 정상적으로 모듈을 불러와서 사용할 수 있는게 확인이 되었습니다.

PYTHONPATH 환경 변수 사용하기

모듈을 다른 방법으로 불러오는 또 하나의 방법은 PYTHONPATH 환경 변수를 사용하는 방법이 있습니다.

Python
(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>set PYTHONPATH=D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\module

(py_study_3110) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>python
Python 3.11.0 | packaged by Anaconda, Inc. | (main, Mar  1 2023, 18:18:21) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import module2
>>> print(module2.add(3, 4))
7
>>>
.study_python_3.11.0.TEST>set PYTHONPATH=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>set PYTHONPATH=D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\module

(py_study_3110) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>python
Python 3.11.0 | packaged by Anaconda, Inc. | (main, Mar  1 2023, 18:18:21) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import module2
>>> print(module2.add(3, 4))
7
>>>
.study_python_3.11.0.TEST\module
(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>set PYTHONPATH=D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\module

(py_study_3110) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>python
Python 3.11.0 | packaged by Anaconda, Inc. | (main, Mar  1 2023, 18:18:21) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import module2
>>> print(module2.add(3, 4))
7
>>>
.study_python_3.11.0.TEST>python
Python 3.11.0 | packaged by Anaconda, Inc. | (main, Mar 1 2023, 18:18:21) [MSC v.1916 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import module2 >>> print(module2.add(3, 4)) 7 >>>

위에서 처럼 set 명령어를 사용해서 PYTHONPATH 환경 변수에 module2.py 파일이 존재하는 D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\module 폴더를 설정해 주었습니다.
이렇게 해주면 폴더 이동이나 다른 모듈 추가 작업이 없이도 module2 모듈을 불러와서 사용할 수 있게 됩니다.

맥이나 유닉스 환경에서는 set 명령 대신 export 명령을 사용해야 합니다.

  • 이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.
모듈을 불러오는 다른 방법

50. 파이썬 – 클래스나 변수 등을 포함한 모듈

50. 파이썬 – 클래스나 변수 등을 포함한 모듈

지난 포스팅에서는 파이썬 모듈 에서 name 변수 (if __name__ == “__main__”:) 에 대해 공부해 보았습니다.
이번 포스팅에서는 파이썬 모듈 에서 클래스나 변수 등을 포함한 모듈에 대해 공부해 보겠습니다.

파이썬 모듈

클래스나 변수 등을 포함한 모듈

지난 시간 까지 알아봤던 파이썬 모듈에서는 함수만 포함을 했었지만
클래스나 변수 등을 포함한 모듈도 있습니다.

Python
# module2.py
pi = 3.141592

class Math:
    def solv(self, r):
        return pi * (r **2)

def add(a, b):
    return a + b

위의 코드는 원의 넓이를 계산해 주는 Math 클래스와 두개의 수를 더해주는 add 함수, 원주율 값에 해당하는 pi 변수 처럼 클래스, 함수, 변수 를 모두 포함하고 있습니다.
주석에 표시된 것처럼 module2.py로 저장을 한뒤
가상환경 프롬프트를 실행해서 대화형 인터프리터를 열어서 아래처럼 연습해 보겠습니다.

Python
(py_study_3110) D:\>cd D:\Dropbox.My_Job.Study.Python
(py_study_3110) D:\>cd 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>python
Python 3.11.0 | packaged by Anaconda, Inc. | (main, Mar  1 2023, 18:18:21) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import module2
>>> print(module2.pi)
3.141592
>>>
.study_python_3.11.0.TEST
(py_study_3110) D:\Dropbox.My_Job.Study.Python
(py_study_3110) D:\>cd 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>python
Python 3.11.0 | packaged by Anaconda, Inc. | (main, Mar  1 2023, 18:18:21) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import module2
>>> print(module2.pi)
3.141592
>>>
.study_python_3.11.0.TEST>python
Python 3.11.0 | packaged by Anaconda, Inc. | (main, Mar 1 2023, 18:18:21) [MSC v.1916 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import module2 >>> print(module2.pi) 3.141592 >>>

위에서 작성한 것 처럼 module2.pi 라고 입력을 해서 module2.py 파일에 생성되어 있는 pi 변수 값을 사용을 할 수가 있습니다.

Python
>>> a = module2.Math()
>>> print(a.solv(2))
12.566368
>>>

위 작성한 코드는 module2.py 에 생성되어 있는 Math 클래스를 사용하는 방법을 보여주는 코드입니다.
위처럼 모듈 안에 있는 클래스를 사용하고자 한다면 “.”(도트 연산자)로 클래스 이름 앞에 모듈 이름을 우선 입력해 주어야 합니다.

Python
>>> print(module2.add(module2.pi, 4.4))
7.5415920000000005
>>>

위 코드처럼 module2.py 에 생성되어 있는 add 함수도 사용할 수 있음을 알 수 있습니다.

다른 파일에서 모듈 불러오기

지금까지 직접 만든 모듈 파일을 불러오기 위해서 대화형 인터프리터를 사용했었습니다.
이제 다른 파이썬 파일에서 기존에 만들어 놨던 모듈을 불러서 사용하는 방법에 대해 공부해 보겠습니다.
좀전에 만들어 봤던 module2.py 파일을 다른 파이썬 파일에서 불러와 사용을 해보도록 하겠습니다.

module_test.py 라는 파일을 생성을 해보겠습니다.

Python
# module_test.py
import module2

result = module2.add(3, 4)
print(result)

Python
7

이처럼 다른 파이썬 파일에서 import 문을 통해 module2.py 파일을 module2 모듈로 불러와서 사용을 할 수가 있습니다.
주의해야 할 점은 두 개의 파일. module2.py 와 module_test.py 는 같은 폴더에 존재해야 한다는 것입니다.

  • 이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.
50. 파이썬 - 클래스나 변수 등을 포함한 모듈

49. 파이썬 모듈 – name 변수 (if __name__ == “__main__”:)

49. 파이썬 모듈 – name 변수 (if __name__ == “__main__”:)

지난 포스팅부터 파이썬 모듈에 대해 공부를 시작했습니다.
모듈의 개념과 만드는 방법과 불러오는 방법에 대해 공부했었는데요
이번 포스팅에서는 __name__ 변수 와 if __name__ == “__main__”: 가 어떤 의미인지 알아보도록 하겠습니다.

파이썬 모듈

if __name__ == “__main__”: 이 뭘까?

지난 포스팅에서 만들어 봤던 module1.py 파일을 아래처럼 변경해 보았습니다.

Python
# module1.py
def add(x, y):
    return x + y

def subtrack(x, y):
    return x - y

print(add(1, 4))
print(subtrack(4, 2))

add(1, 4) 와 subtrack(4, 2) 의 결과를 print 문을 통해 출력하는 문장을 추가했습니다.
이제 아래처럼 module1.py 파일을 실행해 보겠습니다.

BAT
(py_study_31010) D:\Dropbox.My_Job.Study.Python
(py_study_31010) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>python module1.py
5
2
.study_python_3.11.0.TEST
>python module1.py
5 2

당연히 예상한 대로 print 문을 통한 add 와 subtrack 함수의 결과값이 잘 출력이 되었습니다.
그럼 이전 포스팅에서 처럼 파이썬 대화형 인터프리터에서 module1.py 파일을 실행을 해보겠습니다.

Python
(py_study_31010) D:\Dropbox.My_Job.Study.Python
(py_study_31010) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>python
Python 3.10.10 | packaged by Anaconda, Inc. | (main, Mar 21 2023, 18:39:17) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import module1
5
2
>>>
.study_python_3.11.0.TEST>python
Python 3.10.10 | packaged by Anaconda, Inc. | (main, Mar 21 2023, 18:39:17) [MSC v.1916 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import module1 5 2 >>>

이상하죠?
import module1 을 실행하는 순간 module1.py 파일이 실행되어 결과값을 출력을 하게 됩니다.
원래 목적은 module1.py 파일의 add 함수와 subtrack 함수를 사용하려고 하는 목적인데 말이죠
이런 문제를 방지하기 위해 module1.py 파일을 아래 코드처럼 변경해야 합니다.

Python
# module1.py
def add(x, y):
    return x + y

def subtrack(x, y):
    return x - y

if __name__ == "__main__":
    print(add(1, 4))
    print(subtrack(4, 2))

if __name__ == “__main__”: 이라는 문장을 사용하게 되면
이전에 명령 프롬프트에서 python module1.py 라고 실행했을 때와 마찬가지로 __name__ == “__main__” 이 문장이 참이 되어 if 문 다음 문장이 수행이 됩니다.
반대로 대화형 인터프리터나 다른 파일에서 이 모듈을 불러서 사용을 하게 될 때에는 __name__ == “__main__” 이 거짓이 되어 if 문 다음에 있는 문장들이 수행이 되지 않게 됩니다.

위 코드처럼 module1.py 를 수정을 했으면 대화형 인터프리터를 열고 실행을 해보겠습니다.

Python
>>> import module1
>>>

이제 아무런 결과값도 출력하지 않습니다.

name 변수? __name__ 변수란?

파이썬에서 사용하는 __name__ 변수는 파이썬이 내부적으로 사용하는 특별한 변수 이름입니다.
만일 명령프롬프트에서 python module1.py 라고 직접 module1.py 파일을 실행하는 경우에 module1.py 의 __name__ 변수에는 __main__ 이라는 값이 저장이 됩니다.
그러나 파이썬 쉘이나 다른 파이썬 모듈에서 module1 을 import 하는 경우에는 module1.py 의 __name__ 변수에는 module1.py 의 모듈 이름값인 module1 이 저장이 되게 됩니다.

Python
>>> import module1
>>> module1.__name__
'module1'
>>>

  • 이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.
49. 파이썬 모듈 - __name__ 변수(if __name__ == __main__) name 변수