728x90
반응형

 

 

 

파이썬으로 만든 프로그램을 다른 사람에게 전달해서 실행을 하려면, 그 사람의 PC에도 파이썬이 설치되어 있어야 하는 번거러움이 있다. 이 때문에, 파이썬 프로그램을 일반 실행파일(.exe)로 변환해서 건네주면 사용하는데 큰 문제가 없을 것이다. 파이썬 패키지에는 이런 변환 프로그램이 있는데, 바로 PyInstaller 이다.

 

pip install pyinstaller 를 입력하면 설치가 되서 바로 사용할 수 있다.

 

첫 번째 프로그램을 만들어보자. 필자는 C:\work\proj1 폴더를 만들 것이며, 이 안에 .venv 로 가상환경도 만든다. 가상환경은 python -m venv .venv 로 만들 수 있다. 그리고, .venv\Scripts\activate 로 가상환경을 활성화 한 후에, pip install pyinstaller 로 PyInstaller 도 함께 설치해준다.

이제, 폴더 안에 proj1.py 를 열고, 다음과 같이 입력해준다.

print("PyInstaller 로 exe 파일 만들기")

이제, pyinstaller proj1.py 를 입력하면, 실행파일(.exe)이 만들어진다. builddist 폴더가 생성되는데, 이 중에서 dist 폴더 아래에 proj1 폴더가 생성되고, 그 안에 proj1.exe 가 있는 것을 확인할 수 있다.

콘솔창에서 해당 폴더로 이동해서 proj1.exe 를 실행해보자. 실행이 잘 되는 것도 확인할 수 있다.

그런데, proj1.exe 파일 외에도 _internal 폴더가 존재하는데, 그 안에 수많은 파일들이 있으며, 이 파일들도 실행하는데 꼭 필요하다. 이 많은 파일들을 배포하려니 뭔가 번거롭다.

그래서, 단 하나의 파일로도 변환할 수 있는데, pyinstaller 실행시에 -F 옵션을 주면 된다. builddist 폴더를 삭제한 후에, pyinstaller -F proj1.py 를 실행해보자.

이번에는 dist 폴더 아래에 proj1.exe 파일만 생성된 것을 알 수 있다. 이번에도 실행을 해 보면, 출력이 잘 될 것이다.

 

콘솔 프로그램을 해봤으니, GUI 프로그램도 실행파일로 변경해보자. 아래의 proj2.zip 파일을 다운로드 하여, C:\work\proj2 에 풀어놓겠다.

proj2.zip
0.01MB

 

여기에서도 가상환경을 만들고, 활성화시킨다. python -m venv .venv 로 가상환경을 만들고, .venv\Scripts\activate 로 활성화시킨다. 그리고, PyInstaller 로 설치한다. pip install pyinstaller 를 실행한다.

 

tkinter 패키지를 이용해서 만든 간단한 GUI 프로그램이다. 이미지가 입혀져 있는 버튼이 나오며, 이 버튼 클릭하면 알림 메시지가 나오게 된다. 해당 폴더로 들어가서, python proj2.py 를 실행하면, 아래와 같이 나올 것이다.

 

proj2.py 파일의 내용을 한 번 살펴보자. 버튼을 하나 생성하였는데, 버튼에 이미지(images/nolja-coding.png)가 적용되어 있고, 버튼을 클릭하면, "버튼을 클릭했습니다." 라는 알림 메시지를 출력하도록 되어 있는 것이다.

import tkinter as tk
import tkinter.messagebox as msgbox
import sys
import os

def resource_path(relative_path):
    """ Get absolute path to resource, works for dev and for PyInstaller """
    try:
        # PyInstaller creates a temp folder and stores path in _MEIPASS
        base_path = sys._MEIPASS
    except Exception:
        base_path = os.path.abspath(".")
    return os.path.join(base_path, relative_path)

def click_button():
    msgbox.showinfo("알림", "버튼을 클릭했습니다.")

root = tk.Tk()
img = tk.PhotoImage(file=resource_path("images/nolja-coding.png"))
button = tk.Button(root, image=img, command=click_button)
button.pack()

root.mainloop()

 

이제, 실행파일(.exe)로 변환해보자. pyinstaller -w proj2.py 입력한다. 여기에 새로운 옵션 -w 이 추가되었는데, 이 옵션이 없으면, 실행할 때, 콘솔창이 나왔다가 없어지는 현상이 생긴다. 그래서, GUI 프로그램에서는 -w 옵션을 꼭 넣어주어야 한다.

이번에도 역시 실행파일이 잘 생성되었다. proj2.exe 를 실행해보자.

메시지 내용을 보면, "images/nolja-coding.png" 파일을 찾을 수 없어서 문제가 있다라는 의미이다. 이 것을 해결하기 위한 방법이 2가지가 있는데, 첫번째 방법은 해당 폴더와 파일을 dist\proj2\_internal 폴더에 복사해주는 것이다.

위의 화면은 "images/nolja-coding.png" 파일을 복사한 이후의 상태이다. 이 상태에서 다시 proj2.exe 를 실행하면 잘 될 것이다. 그런데, 지금은 한개의 파일로 만들지 않았기 때문에, 수동으로 복사라도 할 수 있었지만, 만약 한개의 파일로 만들게 되면 방법이 없다. 그래서... 두번째 방법을 사용해야 한다.

 

두번째 방법은 pyinstaller 실행시에 옵션을 추가해주는 것이다. build 와 dist 폴더를 삭제한 후에, 다음처럼 PyInstaller 를 실행한다. pyinstaller -w --add-data="images/*;images" proj2.py

pyinstaller 를 실행하면서 images 폴더의 내용을 복사해주는 옵션을 추가한 것이다. 이렇게 해서 실행해보면 잘 될 것이고, 한개의 파일로 만들어서도 해보자. pyinstaller -w -F --add-data="images/*;images" proj2.py

이렇게 해서 실행파일을 만들어서도 역시 문제없이 잘 될 것이다.

 

728x90
반응형
728x90
반응형

 

 

 

nodejs 를 공부해보신 분들은 알겠지만, npm 을 이용해서 필요한 패키지를 설치하면 해당 프로젝트 안에 node_modules 라는 폴더가 생성되는 것을 알 수 있다. 이 아래에 모든 패키지들이 설치된다. 이렇게 되면, 여러개의 프로젝트를 관리할때 프로젝트마다 각기 다른 폴더에 패키지들이 설치되어 서로 충돌이 발생하지 않는다. 물론 필요하면 특정 패키지에 대해서는 옵션을 주어서 전역으로도 설치가 가능하다.

 

그런데, 파이썬의 경우, 패키지가 기본적으로 전역으로 설치되어, 모든 프로젝트에서 함께 쓰이도록 되어 있다. 프로젝트에 별도로 패키지가 설치되도록 하는 옵션이 없다. 이 때문에, 프로젝트간에 패키지의 버전을 다르게 쓰고자 할 때 문제가 발생한다.

 

이런 문제를 해결하고자, 임시 방편으로 가상환경이라는 것을 구성하여 프로젝트를 관리한다. 파이썬 가상환경을 구현할 수 있는 툴은 여러가지가 있는데, 여기에서는 파이썬 자체에서 기본적으로 제공하는 venv 모듈을 알아보도록 하자.

현재 PC에 설치된 파이썬 버전은 위와 같다. pyenv 를 이용해서 pyt;hon 3.12.6 버전을 설치해놓았다.

테스트를 위해서 prj1 폴더를 만들어 보자.

그리고, 여기에서 가상환경을 만들어보자. 가상환경을 만드는 방법은 파이썬에 기본 내장 모듈인 venv 를 사용하는 것인데, python -m venv 가상환경이름 으로 생성한다. 가상환경이름은 원하는 것으로 하면 되지만, 통상적으로 .venv 를 많이 사용한다. 그래서 다음처럼 python -m venv .venv 를 입력해서 가상환경을 생성한다. .venv 라는 폴더가 생성된다. 그리고, 가상환경을 활성화해야 한다. 아래는 Windows 환경이어서 .venv\Scripts\activate 를 실행하였지만, Mac/Linux 의 경우에는 .venv/bin/activate 를 실행해야 한다. which python 을 입력해서 python 이 어느 위치에 있는 것인지 파악해보자. .venv 폴더 아래에 있는 python.exe 가 사용됨을 알 수 있다.

이 상태에서 pip list 를 입력해서 현재 설치되어 있는 패키지 목록도 살펴보자. 그리고, pip install fastapi 를 입력해서 fastapi 패키지를 설치해본다.

다시, pip list 를 입력해보면, fastapi 0.115.0 과 관련된 다른 패키지까지 설치된 것을 확인해볼 수 있다.

이제, deactivate 를 입력해서 가상환경을 빠져나온다.

그리고, 새로은 프로젝트 폴더 prj2 를 만들고, 여기에도 새로운 가상환경을 만들어본다. 그리고, pip list 를 입력해보면,  pip 만 설치된 것을 확인할 수 있다. prj1 과는 다르게 fastapi 0.100.0 버전을 지정해서 설치해본다. pip install fastapi==0.100.0 을 입력하면 된다.

다시, pip list 를 입력해보면, fastapi 0.100.0 과 관련된 다른 패키지까지 설치된 것을 확인할 수 있다. 결국, prj1 과 prj2에는 로컬폴더에 각기 다른 버전의 fastapi 를 설치하게 된 것이다.

pip freeze 를 입력하면 pip list 와는 다른 형태로 설치된 패키지 목록을 보여준다. 이것을 requirements.txt 에 저장해둔다. 이렇게 저장해둔 파일을 이용해서 다른 폴더에 똑같은 패키지를 설치할 수 있기 때문이다. 이 requirements.txt 파일은  nodejs 의 package.json 의 dependencies 항목에 해당된다고 볼 수 있을 것이다.

deactivate 를 입력해서 prj2의 가상환경을 빠져나와서, prj3 플더를 만든다. 그리고, 여기에도 가상환경을 만들어주고, 활성화시킨다.  이상태에서 pip list 를 하면 역시 설치된 패키지가 없을 것이다.

이제, prj2 에서 만들어 놓은 requirements.txt 를 복사해와서, 이것을 이용해서 패키지들을 설치해보자. pip install  -r requirements.txt 를 입력해보자.

그러면, 아래와 같이 패키지들이 설치되는 것을 볼 수 있을 것이다.

그리고, pip list 를 입력해보면, prj2 에서 설치했던 패키지들이 그대로 prj3에 설치된 것 까지 확인할 수 있다.

 

여기까지 익히면, 여러개의 파이썬 프로젝트를 운용하는데 크제 문제는 없을 것이다.

 

 

728x90
반응형
728x90
반응형

 

 

 

 

다가오는 10월에 파이썬 3.13 이 릴리즈 될 예정인데, 여러가지 특징이 있지만, 그 중에서도 눈에 바로 보이는 것이, REPL 에 색깔이 더해져서 해지고 멀티라인 에디팅이 된다는 것이다.

 

python 으로 인터렉티브 모드로 들어가면, 프롬프트에 색깔을 입혀져있다.

 

 

기존에는 REPL 을 빠져나갈때에서 exit() 라는 함수를 입력해주어야 하는데, 마지막 괄호까지 입력하는 것이 좀 불편하였는데, 이 것이 사라졌다. 그냥, exit 라고만 입력해도 된다.

 

 

화면을 깔끔하게 지우는것(클리어)가 가능해졌다. 

 

 

자동 들여쓰기가 지원된다. BLOCK 수준의 코드 기록이 된다. 멀티라인 에티팅이 가능해졌다.

 

이 때문에, 소스를 수정해서 작업할 때, 아주 아주 용이하다. 이 기능이 없으면, 수정을 할 수 없고, 완전히 새로 작성해야 한다. 이번에 추가된 것중에 가장 좋은 기능이 아닐까 한다.

 

 

F1 키를 누르면 help 모드로 들어갈 수 있다. help 모드를 빠져나올때, exit 가 추가되어 있다.

 

 

F2키를 누르면 그동안의 history를 볼 수 있다.

 

 

F3 키를 누르면 paste 모드로 들어가며, 깔끔하게 복사/붙여넣기를 할 수 있다.

class Sample:

    def __init__(self, x):
        self.x = x

    def __repr__(self):
        return "Sample Class"

 

 

 

728x90
반응형
728x90
반응형

 

 

 

가장 일반적으로 파이썬을 설치하려면 공식사이트에서 설치프로그램을 다운로드하여 설치하면 간단하다. 아니면, scoop 이나 chocolaty 등을 이용해서 설치해도 좋다.

그런데 말입니다....

파이썬 프로젝트가 여러개 있고, 각기 다른 버전의 파이썬을 사용해야 한다면 이대로는 안될 것이다. 여러 버전을 설치해놓고, 그때 그때 상황에 맞게 파이썬 버전을 선택할 수 있으면 좋을 것이다. 이 것을 가능하게 해주는 것이 바로 바로 pyenv 이다.

 

우선, pyenv 를 설치부터 진행하자. 설치는 scoop 으로 하겠다.

scoop 말고 다른 방법으로 하려면 https://github.com/pyenv-win/pyenv-win 에 들어가서 원하는 것으로 하면 되겠습니다.

이 상태에서 python 3.10.5 를 설치해볼게요.

그런데, 뭔가 좀 이상합니다. 요상한 에러 메시지가 나오면서 파이썬이 설치가 안되네요~ TT

scoop 으로 pyenv 설치를 할 때, 한가지 주의할 점이 있어요. 꼭.. 반드시... 커맨드창을 관리자모드로 열어서 pyenv 를 설치해야 합니다.

그러니, pyenv 를 지우고, 관리자모드로 다시 설치합시다.

다시, 관리자 모드로 커맨드창을 열고, pyenv 설치합니다.

이제, 일반 커맨드창을 다시 열고요. pyenv update 를 입력해서 설치가능한 파이썬 목록을 업데이트해줍니다.

pyenv install --list 라고 입력하면 설치 가능한 파이썬 버전이 쭉~ 나열됩니다.

저는 현재 가장 최신 버전인 3.12.6 을 설치해보겠습니다. pyenv install 3.12.6 이라고 입력하면 됩니다.

현재 설치된 파이썬 버전을 확인하려면 pyenv versions 라고 입력합니다.

그런데, 아직은 파이썬을 사용할 수 없어요. 설치한 버전의 파이썬을 사용하려면, pyenv global 3.12.6 이라고 입력합니다. 그리고, 선택이 된 것을 확인하려면, 다시 pyenv versions 라고 해보세요. 좀 달라졌지요...

이제, 선택한 버전의 파이썬을 사용할 수 있습니다. python -V 해서 확인해보세요.

이제, 다른 버전의 파이썬을 설치해봅시다. 3.8.0 버전을 설치합시다. 그리고, 잘 설치되었는지 확인까지....

3.8.0 이 잘 설치된 것까지 확인되었고, 3.12.6 앞에 별(*)이 표시되어서 현재 사용 버전임을 알 수 있다.

3.8.0 을 사용하려면, 또 다시 pyenv global 3.8.0 이라고 해주면 된다.

여기까지 내가 원하는 파이썬 버전을 설치해서 선택하는 법까지 알아보았다. 

 

그런데, 프로젝트 폴더에 들어가면 자동으로 거기에 맞는 파이썬 버전을 선택해주면 더 편하고 좋겠다. 폴더를 2개 만듭시다. C:\work\python\proj_3_8_0 , C:\work\python\proj_3_12_6 이렇게 폴더를 만들어보겠습니다.

그리고, proj_3_8_0 폴더로 들어가서, pyenv local 3.8.0 이라고 입력해봅시다.

그러면, 그 안에 .python-version 이라는 파일이 생성이 되요.

같은 방법으로 proj_3_12_6 폴더로 들어가서 pyenv local 3.12.6 을 실행합니다. 역시, .python-version 이라는 파일이 생성됩니다.

이제, 각 폴더로 들어가 보면, python 버전이 자동으로 선택되는 것을 확인해볼 수 있습니다.

 

여기까지 하면, 여러 버전의 파일썬을 설치해서 마음대로 사용할 수 있게 된 겁니다. 이 외에 더 알아야 할 것이 가상환경이라는 것이 있는데, 더 설명하면 복잡하니까... 다음 기회에 할게요. ^^

728x90
반응형

+ Recent posts