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. 파이썬 – 패키지 안의 함수 실행해 보기

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 변수

48. 파이썬 – 모듈의 정의 그리고 모듈 만들기와 모듈 불러오기

48. 파이썬 – 모듈의 정의 그리고 모듈 만들기와 모듈 불러오기

지난 포스팅에서는 파이썬 클래스 에 대해 마무리를 했고
이번 포스팅부터는 파이썬 모듈에 대해 공부해 보려 합니다.
그중에서 모듈이 어떤건지 모듈의 정의와 모듈 만들기와 모듈 불러오기에 대해 공부해 보겠습니다.

파이썬 모듈

모듈의 정의

모듈이라는 것은 이전에 공부했던 함수나 변수, 또는 클래스를 모아 놓은 파이썬 파일이라고 보시면 됩니다.
다르게 해석하자면 모듈은 다른 파이썬 프로그램에서 불러와서 사용할 수 있게끔 만들어진 파이썬 파일이라고 보시면 됩니다.

파이썬 프로그래밍을 진행을 하다 보면 굉장히 많은 수의 모듈을 사용을 하게 됩니다.
이렇게 사용되는 모듈은 기존에 다른 개발자들이 이미 만들어 놓은 모듈일 수도 있고
우리가 프로그래밍을 하면서 직접 만들어 사용하는 모듈일 수도 있습니다.

모듈 만들기

일단 간단하게 모듈 만들기를 해보겠습니다

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

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

위 코드는 add 와 subtrack 함수만 존재하는 module1.py 파일입니다.
위처럼 파이썬 파일을 만들었는데 이 파일이 모듈입니다.
에디터로 파이썬 파일을 만들었었다면 다른 것이 없습니다.
즉 파이썬 확장자인 ~.py 로 만든 파이썬 파일은 모두 모듈이라고 보시면 됩니다.

모듈 불러오기

방금 위에서 만든 module1.py 파일, 즉 모듈을 파이썬에서 어떻게 불러와야 할까요?
우선 명령프롬프트 창을 열고 모듈을 만든 폴더로 이동을 해서 대화형 인터프리터를 실행해 보겠습니다.

저희는 아나콘다를 통해 비주얼스튜디오코드를 사용하기 때문에 아나콘다 프롬프트를 사용해 보겠습니다.
아나콘다를 통한 비주얼스튜디오코드 에 관한 지난 포스팅이 있으니 참고 해보시기 바라며 다음으로 넘어가겠습니다.

아래 처럼 아나콘다 프롬프트를 실행하고 가상환경을 불러와 줍니다.

conda activate py_study_31010

그리고 모듈을 생성한 폴더로 이동합니다.

d:
cd D:\Dropbox.My_Job.Study.Python
d:
cd D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\
.study_python_3.11.0.TEST\

이동한 폴더에 내용을 확인을 해보고 module1.py 가 있나 확인 해 봅니다.

dir

이제 파일이 있는것을 확인했으니 이제 여기서 파이썬 대화형 인터프리터를 실행해 줍니다.

python
BAT
(base) C:\Users\donnr>conda activate py_study_31010

(py_study_31010) C:\Users\donnr>d:

(py_study_31010) D:\>cd D:\Dropbox.My_Job.Study.Python
(base) C:\Users\donnr>conda activate py_study_31010

(py_study_31010) C:\Users\donnr>d:

(py_study_31010) D:\>cd D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\

(py_study_31010) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>dir
 D 드라이브의 볼륨에는 이름이 없습니다.
 볼륨 일련 번호: 32C2-7736

 D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST 디렉터리

2023-04-26  오후 09:45    <DIR>          .
2023-04-26  오후 09:18    <DIR>          ..
2023-04-18  오후 09:45                30 ex_test.txt
2023-04-26  오후 09:45                87 module1.py
2023-04-25  오전 08:20             4,441 test.py
2023-04-18  오후 10:09                30 test.txt
2023-04-18  오후 07:42               102 test_02.py
2023-04-18  오후 10:01                49 write_text.txt
2023-04-17  오후 03:25                 0 신규파일.txt
               7개 파일               4,739 바이트
               2개 디렉터리  326,446,088,192 바이트 남음

(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.
>>>
.study_python_3.11.0.TEST\
(py_study_31010) D:\Dropbox.My_Job.Study.Python
(base) C:\Users\donnr>conda activate py_study_31010

(py_study_31010) C:\Users\donnr>d:

(py_study_31010) D:\>cd D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\

(py_study_31010) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>dir
 D 드라이브의 볼륨에는 이름이 없습니다.
 볼륨 일련 번호: 32C2-7736

 D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST 디렉터리

2023-04-26  오후 09:45    <DIR>          .
2023-04-26  오후 09:18    <DIR>          ..
2023-04-18  오후 09:45                30 ex_test.txt
2023-04-26  오후 09:45                87 module1.py
2023-04-25  오전 08:20             4,441 test.py
2023-04-18  오후 10:09                30 test.txt
2023-04-18  오후 07:42               102 test_02.py
2023-04-18  오후 10:01                49 write_text.txt
2023-04-17  오후 03:25                 0 신규파일.txt
               7개 파일               4,739 바이트
               2개 디렉터리  326,446,088,192 바이트 남음

(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.
>>>
.study_python_3.11.0.TEST
>dir
D 드라이브의 볼륨에는 이름이 없습니다. 볼륨 일련 번호: 32C2-7736 D:\Dropbox.My_Job.Study.Python
(base) C:\Users\donnr>conda activate py_study_31010

(py_study_31010) C:\Users\donnr>d:

(py_study_31010) D:\>cd D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\

(py_study_31010) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>dir
 D 드라이브의 볼륨에는 이름이 없습니다.
 볼륨 일련 번호: 32C2-7736

 D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST 디렉터리

2023-04-26  오후 09:45    <DIR>          .
2023-04-26  오후 09:18    <DIR>          ..
2023-04-18  오후 09:45                30 ex_test.txt
2023-04-26  오후 09:45                87 module1.py
2023-04-25  오전 08:20             4,441 test.py
2023-04-18  오후 10:09                30 test.txt
2023-04-18  오후 07:42               102 test_02.py
2023-04-18  오후 10:01                49 write_text.txt
2023-04-17  오후 03:25                 0 신규파일.txt
               7개 파일               4,739 바이트
               2개 디렉터리  326,446,088,192 바이트 남음

(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.
>>>
.study_python_3.11.0.TEST 디렉터리
2023-04-26 오후 09:45 <DIR> . 2023-04-26 오후 09:18 <DIR> .. 2023-04-18 오후 09:45 30 ex_test.txt 2023-04-26 오후 09:45 87 module1.py 2023-04-25 오전 08:20 4,441 test.py 2023-04-18 오후 10:09 30 test.txt 2023-04-18 오후 07:42 102 test_02.py 2023-04-18 오후 10:01 49 write_text.txt 2023-04-17 오후 03:25 0 신규파일.txt 7개 파일 4,739 바이트 2개 디렉터리 326,446,088,192 바이트 남음 (py_study_31010) D:\Dropbox.My_Job.Study.Python
(base) C:\Users\donnr>conda activate py_study_31010

(py_study_31010) C:\Users\donnr>d:

(py_study_31010) D:\>cd D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\

(py_study_31010) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>dir
 D 드라이브의 볼륨에는 이름이 없습니다.
 볼륨 일련 번호: 32C2-7736

 D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST 디렉터리

2023-04-26  오후 09:45    <DIR>          .
2023-04-26  오후 09:18    <DIR>          ..
2023-04-18  오후 09:45                30 ex_test.txt
2023-04-26  오후 09:45                87 module1.py
2023-04-25  오전 08:20             4,441 test.py
2023-04-18  오후 10:09                30 test.txt
2023-04-18  오후 07:42               102 test_02.py
2023-04-18  오후 10:01                49 write_text.txt
2023-04-17  오후 03:25                 0 신규파일.txt
               7개 파일               4,739 바이트
               2개 디렉터리  326,446,088,192 바이트 남음

(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.
>>>
.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. >>>

이처럼 파이썬의 대화형 인터프리터에서는 파이썬 파일을 저장한 폴더로 이동을 해야 모듈을 읽어올 수 있습니다.

Python
>>> import module1
>>> print(module1.add(3, 4))
7
>>> print(module1.subtrack(4, 2))
2
>>>

위 코드처럼 module1.py 로 생성한 모듈을 불러오기 위해 import module1 이라고 했습니다.
실수로라도 .py 를 붙이면 안됨을 명심해 주세요
import 는 만들어져 있는 파이썬 모듈을 사용할 수 있게 해주는 명령입니다.
module1.py 파일에 있는 add 함수와 subtrack 함수를 사용하기 위해 위 코드 처럼 module1.add, module1.subtrack 같이 모듈 이름 뒤에 “.”(도트 연산자) 를 붙이고 함수 이름을 쓰시면 됩니다.

import 는 현재 디렉토리에 있는 파일이나 파이썬 라이브러리가 저장된 디렉토리에 있는 모듈만 불러올 수 있습니다.
파이썬 라이브러리는 파이썬을 설치 할 때 자동으로 설치되는 파이썬의 모듈들을 얘기합니다.

import 사용법

import 의 사용법은 간단합니다.

Python
import 모듈 이름

앞에서 보았듯이 여기에서 모듈 이름은 파일이름 module1.py 에서 .py 확장자를 제거한 module1 만을 말합니다.

모듈 이름 없이 함수 이름 사용

매번 모든 경우에 module1.add, module1.subtrack 처럼 쓰는 것은 아닙니다.
그냥 add, subtrack 처럼 모듈 없이 함수 이름만 쓰고 싶은 경우도 있습니다.
이럴 때 아래 처럼 사용하시면 됩니다.

Python
from 모듈 이름 import 모듈 함수

아래의 코드를 보면 이해가 되실 겁니다.

Python
>>> from module1 import add
>>> add(3, 4)
7
>>>

그러면 add 와 subtrack 함수를 둘 다 사용하려면 어떻게 할까요?

Python
from module1 import add, subtrack
from module1 import *

위 예처럼 두가지 방법이 있습니다.
첫번째 처럼 콤마로 모듈 함수를 불러오는것이 있고
두번째 처럼 “*” 문자를 사용할 수도 있습니다.

* 문자는 모든 것을 의미합니다.
파이썬에서도 마찬가지로 사용됩니다.

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

48. 파이썬 - 모듈의 정의 그리고 모듈 만들기와 모듈 불러오기

47. 파이썬 – 클래스 변수

47. 파이썬 – 클래스 변수

지난 포스팅에서는 메서드 오버라이딩 개념에 대해 이해하고 예제를 통해 알아보았습니다.
이번 포스팅에서는 파이썬 클래스 중 클래스 변수에 대해 공부해 보려 합니다.

파이썬 클래스

클래스 변수

이전까지 공부한 내용에서 객체 변수는 다른 객체들의 영향을 받지 않고 각각 독립적으로 각자의 값을 유지를 하고 있다는 것을 알게 되었습니다.
이제 객체 변수와는 그 성격이 다른 클래스 변수에 대해 공부해 보겠습니다.

클래스 변수 만들기

Python
>>> class MyFamily:
...     lastname = "이"
...

MyFamily 라는 클래스를 선언을 했고 그 안에 lastname 이라는 변수가 바로 클래스 변수 입니다.
클래스 변수는 클래스 안에서 함수를 선언하는 것 처럼 클래스 안에 변수를 선언하고 생성을 하게 됩니다.

Python
>>> print(MyFamily.lastname)

>>>

위 코드처럼 클래스 변수를 print 문을 통해 출력을 해보았습니다.
위 예제에 있는 것 처럼 클래스 변수는 클래스이름.클래스 변수 로 사용하시면 됩니다.

Python
>>> a = MyFamily()
>>> b = MyFamily()
>>> print(a.lastname)

>>> print(b.lastname)

>>>

클래스 변수의 내용 변경하기

또한 위 코드처럼 MyFamily 클래스로 만든 객체를 통해서도 클래스 변수를 사용할 수 있습니다.
그럼 만약에 MyFamily 클래스의 lastname 이라는 클래스 변수의 내용을 다른 문자열로 바꾸면 어떻게 될까요?
아래는 클래스 변수의 내용을 “박” 이라는 문자열로 바꿔본 내용입니다.

Python
>>> MyFamily.lastname = "박"
>>> print(a.lastname)

>>> print(b.lastname)

>>>

클래수 변수의 내용을 변경 했습니다.
결과는 클래스로 만든 객체의 lastname 값도 모두 변경되었음을 확인 할 수 있습니다.
이처럼 클래스 변수는 클래스로 만든 모든 객체에 공유된다는 특성을 가지고 있습니다.

클래스 변수와 같은 이름의 객체 변수를 생성한다면 어떻게 될까?

만약 클래스 변수와 같은 이름의 객체 변수를 생성하면 어떻게 될까요?
아래 코드처럼 이전 사용했던 a.lastname 을 변경해 보겠습니다.

Python
>>> a.lastname = "오"
print(a.lastname)

>>>

얼핏 보면 MyFamily 클래스의 lastname 클래스 변수가 바뀐것 같아 보이지만
a 객체에 lastname 이라는 객체 변수가 새롭게 생성된 것입니다.
이말은 객체 변수는 클래스 변수와 같은 이름으로 생성을 해도 된다는 것입니다.
a.lastname 이라는 객체 변수를 생성을 해도 MyFamily 클래스의 lastname 과는 상관이 없습니다.
아래 코드를 보시면 확인이 되실겁니다.

Python
>>> print(MyFamily.lastname)

>>> print(b.lastname)

>>>

이처럼 MyFamily 클래스의 lastname 값은 변하지 않았습니다.

클래스 변수와 객체 변수

클래스 변수보다는 객체 변수가 훨씬 더 중요합니다.
실제 프로그래밍을 할 때도 클래스 변수 보다는 객체 변수를 주로 사용을 하고 있습니다.

이렇게 이번 포스팅에서는 클래스 변수에 대해 공부해 보았습니다.
여기까지 클래스에 대한 공부를 마무리 하고 다음 포스팅에서는 모듈에 대해 공부를 해보도록 하겠습니다.

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

46. 파이썬 – 메서드 오버라이딩

46. 파이썬 – 메서드 오버라이딩

지난 포스팅에 파이썬 클래스의 상속하는 이유와 방법에 대해 공부 해봤습니다.
이번 포스팅에서는 메서드 오버라이딩 개념에 대해 공부해 보도록 하겠습니다.

파이썬 클래스

메서드 오버라이딩

먼저 이전에 만들었던 사칙연산 클래스인 Four_Calculator 클래스를 예를 들어 실행해 보겠습니다.

Python
>>> a = Four_Calculator(4, 0)
>>> a.divide()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 18, in divide
ZeroDivisionError: division by zero

Four_Calculator 클래스의 a 객체에 숫자 4 와 0 을 입력하고 divide(나누기) 메서드를 호출하게 되면 숫자 4 를 0 으로 나누려는 시도 때문에 이처럼 ZeroDivisionError 오류가 발생하게 됩니다.
그럼 여기서 0 으로 나눌 때 오류가 아니라 0 을 리턴하도록 만들려면 어떻게 해야 할까요?

아래처럼 Four_Calculator 클래스를 상속하는 Safe_Four_Calculator 클래스를 만들어 보도록 하겠습니다.

Python
>>> class Safe_Four_Calculator(Four_Calculator):
...     def divide(self):
...         if self.second == 0: # 나누는 숫자가 0 인 경우 0 을 리턴하도록 수정
...             return 0
...         else:
...             return self.first / self.second
...
>>>

Safe_Four_Calculator 클래스는 Four_Calculator 클래스에 있는 divide 메서드와 동일한 이름으로 다시 만들었습니다.
이런 식으로 부모 클래스(상속한 클래스) 에 있는 메서드를 같은 이름으로 다시 생성하는 것을 메서드 오버라이딩(Overriding, 덮어쓰기) 라고 합니다.
이런 식으로 메서드를 오버라이딩 하게 되면 부모클래스의 메서드 대신해서 오버라이딩한 메서드가 호출되게 됩니다.
이전 포스팅에서 진행했던 상속과는 차이가 있습니다.

Safe_Four_Calculator 클래스에 메서드 오버라이딩 한 divide 메서드는 나눌려고 하는 값이 숫자 0 인 경우에는 0 을 리턴하도록 수정되어 있습니다.
이제 다시 Four_Calculator 클래스 대신 Safe_Four_Calculator 클래스를 사용하여 아까 ZeroDivisionError 가 났던 예제를 수행해 보겠습니다.

Python
>>> a = Safe_Four_Calculator(4, 0)
>>> a.divide()
0

앞서 진행했던 Four_Calculator 클래스와는 다르게 ZeroDivisionError 가 발생하지 않고 우리가 의도한 대로 0 으로 나누려고 하면 0 이 리턴 되는 것을 확인 할 수 있습니다.

여기까지 파이썬 클래스의 메서드 오버라이딩 에 대해 공부해 봤습니다.
메서드 오버라이딩과 클래스의 상속은 비슷하기는 하지만
클래스의 상속같은 경우는 기존 클래스의 기능을 유지한 채 기능을 확장 하는 역할을 했다면
메서드 오버라이딩의 경우 동일한 이름의 메서드를 만들어서 기능을 덮어 씌우는 역할을 한다고 보시면 될 거 같습니다.
메서드 오버라이딩을 하게 되면 부모 클래스의 메서드 대신 오버라이딩한 메서드가 호출 된다는 것도 필히 염두해 두어야 겠습니다.

  • 이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.
46. 파이썬 - 메서드 오버라이딩