파이크루서블 : 파이썬 앱을 손쉽게 재배포하는 방법
컨텐츠 정보
- 조회 452
본문
파이썬의 고질적인 단점 하나는 파이썬 프로그램을 다른 사용자에게 독립적인 클릭 투 런(click-to-run) 패키지로 제공하기가 쓸데없이 어렵다는 점이다. 이유는 파이썬 언어의 설계에 있다. 지금까지 유일한 방법은 전체 파이썬 런타임과 프로그램의 모든 종속 항목을 프로그램과 함께 번들로 제공하는 것이었다.
이 방식에는 두 가지 단점이 있다. 첫째, 재배포 가능 파일의 크기가 매우 커진다. 파이썬의 본질적인 역동성으로 인해 크기를 줄이기도 어렵다. 둘째, 이러한 방식으로 배포되는 서드파티 프로그램이 제대로 작동하도록 하려면 상당히 손이 많이 갈 수 있다.
파이크루서블(PyCrucible)은 파이썬 프로그램 배포 문제를 해결하기 위해 개발된 새로운 프로젝트다. 불필요한 기능을 줄이고, 설정과 사용 과정을 놀라울 만큼 단순화했다.
파이크루서블 설정
파이크루서블을 사용해 파이썬 프로젝트를 패키징하려면 몇 가지 조건이 필요하다.
- 파이썬 프로젝트를 pyproject.toml 파일을 포함한, ‘pip install’이 가능한 패키지로 설정해야 한다. 가장 중요한 요구 사항이다. 파이썬 패키징 관리 위원회(Python Packaging Authority) 문서에 세부적으로 기술된 지침을 따르도록 프로젝트를 설정해야 한다.
- 프로젝트에 반드시 엔트리 포인트가 있어야 한다. 대부분의 프로젝트에는 명시적으로 정의된 엔트리 포인트, 즉 기본적으로 실행되는 모듈이나 함수가 있다. 파이크루서블을 사용하려면 사전에 이러한 엔트리 포인트를 정의해서 파이크루서블이 프로그램을 시작하는 방법을 알 수 있도록 해야 한다.
- 파이크루서블이 설치돼 있어야 한다. 이 조건은 쉽게 충족할 수 있다. 프로젝트의 가상 환경에서
pip install pycrucible만 실행하면 된다.
파이크루서블에 맞게 프로젝트 구성하기
프로젝트에서 파이크루서블을 사용하기 위해 필요한 한 가지 단계는 pyproject.toml 파일에 다음 섹션을 추가하는 것이다.
[tool.pycrucible]entry = "main.py"이 섹션은 프로젝트의 엔트리 포인트인 파일 또는 모듈을 설명한다. 모듈의 경로는 프로젝트 루트에 대한 상대 경로로 기술해야 한다. 예를 들어 엔트리 포인트가 src/mytool/main.py라면 entry = "src/mytool/main.py"와 같이 지정하면 된다.
파이크루서블을 사용한 프로젝트 패키징
실제 패키징 과정도 간단하다. 파이크루서블을 설치한 활성화된 venv에서 프로젝트가 위치한 디렉터리로 이동해 다음을 입력한다.
pycrucible -e . -o .exe여기서 은 재배포 가능 파일의 이름이다(마이크로소프트 윈도우의 경우 .exe를 사용함).
-e 플래그는 프로젝트를 현재 작업 디렉터리에 임베딩(e는 embed를 의미)하고, 결과는 지정한 파일에 출력한다(-o). 패키징 과정은 완전히 자율적으로 진행된다. 즉, 프로젝트의 표준 설치 동작(venv에 pip install로 프로젝트를 설치하는 경우 실행되는 작업)을 사용해 재배포 가능 패키지를 생성한다.
패키징 과정이 완료되면 선택한 이름의 새 파일이 해당 디렉터리에 나타난다. 그 외의 아티팩트는 생성되지 않으므로 이 파일을 그대로 가져와 원하는 대로 재배포하면 된다.
파이크루서블로 패키징된 프로젝트 실행하기
파이크루서블로 패키징된 프로젝트를 다른 사람이 실행하기 위해서는 생성된 아티팩트만 있으면 된다. 파이썬이나 다른 컴파일러 또는 런타임 요소를 설치할 필요가 없다.
실행 파일은 처음 실행되면 pycrucible_payload라는 하위 디렉터리를 생성하고 여기에 필요한 모든 파일을 압축 해제한 다음 프로그램을 실행한다. 그 이후의 실행에서는 pycrucible_payload 디렉터리가 이미 있는 경우 압축 해제 단계를 건너뛰고 압축 해제된 프로그램만 실행한다.
이러한 실행 방식으로 인해 파이크루서블 프로젝트를 사용할 때 중요한 제약 조건 하나는 사용자에게 쓰기 권한이 있는 디렉터리에서 프로젝트를 실행해야 한다는 것이다. 다만 이것이 실제로 장애물이 되는 경우는 거의 없다.
고급 파이크루서블 설정
파이크루서블 프로젝트에는 프로젝트를 번들링할 때 설정할 수 있는 몇 가지 고급 옵션이 있다. 이러한 동작을 설정하려면 pyproject.toml에 다음 섹션을 추가해야 한다.
[tool.pycrucible.options]extract_to_temp = truedelete_after_run = true extract_to_temp를 true로 설정하면 압축 해제된 파일이 시스템 또는 사용자 수준 임시 디렉터리에 저장되고 실행된다. delete_after_run을 설정하면 압축 해제된 파일(위치와 관계없이)이 프로그램 실행 후 제거된다. 이 두 가지 옵션은 한 번만 실행하면 되는 프로그램(예를 들어 더 큰 프로그램을 설정하기 위한 스텁) 또는 실행 빈도가 낮아 항상 저장해둘 필요가 없는 프로그램에 유용하다.
dl-itworldkorea@foundryco.com
관련자료
-
링크
-
이전
-
다음






