파이콘 한국 2020에 앞서 2019년에 한 발표중 흥미로운 주제를 찾아 소개하고자 합니다.

 

py2exe를 구현하는 기술과 원리 - 이정훈 - PyCon.KR 2019

youtu.be/RFCvDYY-VDM

 

파이썬은 인터프리터 언어라고 합니다. 우리가 작성하는 코드를 컴퓨터가 바로 읽고 수행하지 못하기 때문에 파이썬 프로그램으로 이를 컴퓨터가 읽을 수 있는 언어로 컴파일하여 수행합니다. 그렇기 때문에 내가 작성한 파이썬 코딩(.py)을 실행하기 위해서는 파이썬 프로그램이 필수입니다.

 

하지만 이를 해결하기 위해서 .py 를 .exe로 바꿔주는 파이썬 모듈이 있고 이를 통해 파이썬이 뭔지 모르는 사람도 파이썬 프로그램을 받아 사용할 수 있습니다. 위의 발표자 분은 이에 대한 원리를 발표하시는데 영상을 보면 뒤로 갈수록 어려워지는데 앞부분은 그렇게 어렵지 않아 간단히 정리해 보려고 합니다.

 

한마디로 무설치 파이썬(인터프리터) 입니다. 구글에서 검색하여 설명을 보면 이 embeddable python을 통하여 C, C++ 프로그램에 파이썬을 넣어 함께 사용할 수 있다고 합니다. 아래 링크에서 다운받을 수 있습니다.

www.python.org/downloads/release/python-374/

 

Python Release Python 3.7.4

The official home of the Python Programming Language

www.python.org

위 페이지 하단의 다운로드 링크 중에서 "Windows x86-64 embeddable zip file"를 다운받아 압축을 풀면 다음과 같은 파일들이 있습니다.

 

파이썬 실행파일도 보입니다.

그리고 윈도우 cmd 나 shell 등을 통하여 압축을 푼 경로로 이동하여 python을 실행하면 내가 기존에 설치한 python이 아닌 위 폴더 안의 python이 실행됩니다.

 

하지만 이러한 무설치 파이썬의 가장 큰 단점은 바로 pip를 통하여 모듈들을 간단히 설치할 수 없다는 점입니다. 사실 파이썬이 외장 모듈들이 없다면 거의 할 수 있는게 없으니깐요. 참고로 모든 모듈들은 저 위의 zip파일 안에 전부 들어가 있습니다. 그래서 zipimport를 통하여 저 안의 파이썬 모듈들을 가져옵니다.

 

그리고 밖에 있는 Python Extension Module 파일들( '_'로 시작하는 파일들)은 pyd 파일로 윈도우즈의 dll 파일과 동일하다고 합니다. 그리고 더불어 pyc 파일도 보이는데 각 파일들의 차이에 대해 쉽고 간단한 설명을 인터넷에서 찾았습니다.

 

m.blog.naver.com/PostView.nhn?blogId=wonjinho81&logNo=220551935772&proxyReferer=https:%2F%2Fwww.google.co.kr%2F

 

*.py *.pyc *pyd 차이

.py : 파이썬 소스 코드파일 .pyc : 파이썬 소스를 컴파일해서 생성된 바이트코드. debug 용 assert 문만 ...

blog.naver.com

결국 pyd 파일은 dll 파일이라고 하는데 dll파일은 동적 라이브러리로 핵심적인 기능들을 꺼내쓰기 쉽게 담은 컨테이너 파일들이라고 생각하면 되는데 이 둘의 차이점은 pyd 파일의 경우 예를 들어 spam.pyd 파일이 있다면 반드시 그 안에는 initspam()이라는 함수가 있고 import spam으로 불러올 수 있다는 점입니다. 파이썬으로 실행할 수 있는 dll 파일이라고 이해하면 좋을 듯 합니다.

 

이야기가 새는 것 같은데 결국 py2exe나 pyinstaller는 embaddable python과 내가 작성한 파이썬 파일(.py)과 필요한 필수적인 모듈들만 끄집어 내서 하나로 합쳐서 exe파일로 만들어 주는 모듈인 것입니다. 그리고 py2exe와 pyinstaller의 차이는 앞서 언급한 외장 모듈들을 zipimport로 끄집어 내는 방식의 차이에 있다고 발표자께서 얼핏 말하신게 기억나네요.

 

추가로 궁금하신 분들은 영상으로 보다 구체적인 내용을 확인하시기 바랍니다.

 

 

사실 전에 한번 이것저것 모듈이 잔뜩 들어간 프로그램을 pyinstaller로 돌려봤는데 300메가가 넘게 파일은 만들어지는데 네트워크에 접근해야 하는 모듈이 있어 그런지 실행에 실패한 이후로는 그다지 쓰지 않는 모듈입니다. tkinter나 pyQt를 이용하여 계산기같은 프로그램에는 안성 맞춤일 듯 합니다.

 

 

파이콘 한국 2020을 이틀 앞두고 예습했습니다. :)

+ Recent posts