라즈베리 파이 4B에서 Python 프로그램을 바이너리로 패키징하는 방법

PyInstaller를 설치할 수 없습니다. 라즈베리 파이에서 Python 파일을 바이너리 실행 파일로 패키징할 수 있는 다른 방법이 있을까요?

pyinstaller는 pip를 사용하여 설치할 수 있습니다.

pip install pyinstaller

참고: https://www.cnblogs.com/wendaobiancheng/p/9772509.html

이 명령어를 사용하면 다음과 같은 오류가 발생하며 설치가 성공하지 못합니다.

pip install pyinstaller
error: externally-managed-environment

× 이 환경은 외부에서 관리되고 있습니다
╰─> 파이썬 패키지를 시스템 전체에 설치하려면, 설치하고자 하는 패키지 이름인 xyz를 사용해 apt install python3-xyz 명령을 시도해 보세요.

데비안 패키지로 제공되지 않는 파이썬 패키지를 설치하고자 한다면,
python3 -m venv path/to/venv 명령으로 가상 환경을 생성하세요.
그 후 path/to/venv/bin/python 및 path/to/venv/bin/pip을 사용하세요. python3-full이 설치되어 있는지 확인하세요.

자세한 내용은 http://rptl.io/venv 를 방문하세요.

참고: 이 문제가 잘못되었다고 생각되면 파이썬 설치 프로그램 또는 운영체제 배포판 제공업체에 문의하세요. --break-system-packages 옵션을 사용하여 무시할 수는 있지만, 파이썬 설치나 운영체제가 손상될 위험이 있습니다.
힌트: 자세한 사양은 PEP 668을 참조하세요.

이 명령어를 사용할 경우: sudo apt install python3-pyinstaller

해당 설치 패키지를 찾을 수 없습니다.
패키지 목록을 읽는 중… 완료
의존성 트리를 구성하는 중… 완료
상태 정보를 읽는 중… 완료
E: 패키지를 찾을 수 없습니다: python3-pyinstaller

https://www.cnblogs.com/clark1990/p/17942952

pipx를 사용하여 설치하는 것을 권장합니다.

라즈베리 파이(Raspberry Pi 4B)에서 PyInstaller를 사용할 수 없는 경우, 가장 강력한 대안은 Nuitka입니다. PyInstaller가 단지 "패키징"만 하는 것과 달리, Nuitka는 Python 코드를 C 코드로 변환한 후 진정한 기계어 바이너리로 컴파일합니다.

다음은 라즈베리 파이에서 Python을 바이너리 파일로 패키징하는 일반적인 방법들입니다:


1. Nuitka (가장 추천: 고성능, 실제 컴파일)

Nuitka는 현재 Python 커뮤니티에서 매우 인기 있는 패키징 도구이며, 특히 라즈베리 파이와 같은 리눅스 환경에서 훌륭하게 작동합니다. 생성된 바이너리는 일반적으로 순수 Python보다 더 빠른 실행 속도를 제공합니다.

설치 절차:

  1. 먼저 필요한 C 컴파일러를 설치하세요 (라즈베리 파이 시스템에는 기본으로 포함되어 있을 수 있으나, 업데이트를 권장함):
sudo apt update
sudo apt install build-essential python3-dev
  1. Nuitka 설치:
pip install nuitka

패키징 명령어:

프로그램 디렉토리에서 다음 명령어를 실행하세요:

python3 -m nuitka --standalone --onefile --remove-output your_script.py
  • --standalone: 모든 종속 라이브러리를 포함합니다.
  • --onefile: 모든 내용을 하나의 단일 실행 파일로 패키징합니다.
  • --remove-output: 컴파일 완료 후 임시로 생성된 C 코드 폴더를 삭제합니다.

2. cx_Freeze (성숙하고 안정적인 대안)

Nuitka의 컴파일 시간이 너무 길다고 느껴진다면 (복잡한 최적화를 수행하기 때문), cx_Freeze는 PyInstaller와 유사한 대안입니다.

설치 절차:

pip install cx_Freeze

사용 방법:

setup.py라는 이름의 파일을 생성하세요:

from cx_Freeze import setup, Executable

setup(
    name = "내 프로그램",
    version = "1.0",
    description = "설명",
    executables = [Executable("your_script.py")]
)

터미널에서 다음 명령어를 실행하세요:

python3 setup.py build

그러면 build 폴더 내에 실행 파일과 종속 라이브러리를 포함한 폴더가 생성됩니다.


3. Shiv (Zipapp 방식: 경량)

엄격한 의미의 "암호화/기계어 바이너리"가 아니라 "단일 파일 배포"만을 목표로 한다면, Shiv는 매우 좋은 선택입니다. 이 도구는 Python의 기본 기능인 zipapp을 활용합니다.

사용 방법:

pip install shiv
shiv -e your_module.main -o my_app .

코드와 모든 종속 라이브러리를 하나의 큰 .pyz 파일로 압축합니다 (리눅스에서는 바로 실행 가능 ./my_app). 장점은 패키징 속도가 매우 빠르고 극도로 안정적이라는 점입니다.


4. 왜 PyInstaller 설치가 실패하나요? (흔한 문제 해결법)

라즈베리 파이에서 PyInstaller 설치가 실패하는 주요 원인은 binutils 또는 Python 개발 라이브러리가 누락되었기 때문입니다. 다시 시도해 보려면 먼저 다음을 실행하세요:

sudo apt install python3-dev binutils libffi-dev
pip install pyinstaller

오류 메시지에 arm-linux-gnueabihf-gcc 관련 내용이 포함되어 있다면, 일반적으로 build-essential 패키지가 부족한 것입니다.


방법 비교

도구 원리 장점 단점
Nuitka C 코드로 컴파일 실행 속도 빠름, 코드 역컴파일 어려움, 진짜 바이너리 컴파일 시간이 길며 복잡한 라이브러리와의 호환성 조정 필요
cx_Freeze 환경 동결(Freeze) 설정 유연, 크로스 플랫폼 지원 우수 폴더 형태로 생성됨 (AppImage와 함께 사용하지 않는 한 단일 파일 아님)
Shiv 압축 패키지(Zipapp) 모든 라이브러리와 100% 호환, 패키징 속도 매우 빠름 대상 머신에 Python 인터프리터 설치 필요

권장 사항:
프로그램의 보안성과 성능을 중시한다면 Nuitka를 사용하세요. 빠른 패키징을 원하며 대상 시스템에 Python 환경이 존재하는 것이 문제가 되지 않는다면 Shiv를 사용하세요.