Python코드를 C/C++코드로 변환해 실행 가능한 바이너리 파일을 생성하는 python 컴파일러이다.
<장점>
이진 파일(binary file)은 텍스트 파일이 아니 컴퓨터 파일(예를 들면 .exe) 이다.
컴퓨터 파일로 컴퓨터 저장과 처리 목적을 위해 이진 형식으로 인코딩된 데이터를 포함한다.
1. 효율성
이진 파일은 텍스트 파일에 비해 더 적은 공간을 차지하며, 이는 데이터를 더 작은 크기로 저장하고 빠른 입출력을 가능하게 합니다. 특히 대용량 데이터를 다룰 때 효과적입니다.
2. 속도
이진 파일을 사용하면 데이터 직렬화와 역직렬화 과정에서 생기는 오버헤드가 적습니다. 이는 특히 네트워크 통신이나 파일 입출력에서 뚜렷하게 나타납니다.
3. 구조화된 데이터 저장
복잡한 데이터 구조를 쉽게 저장할 수 있습니다. 객체, 배열, 구조체 등의 데이터를 그대로 파일에 저장하고 읽을 수 있어 프로그램의 효율성을 높입니다.
1. 이미지 파일
이미지 파일은 주로 JPEG, PNG, GIF 등의 이진 형식으로 저장됩니다.
2. 음악 파일
음악 파일도 MP3, WAV, FLAC 등의 이진 형식으로 저장되며, 높은 품질의 음원을 유지할 수 있습니다.
3. 실행 파일
프로그램이나 응용프로그램은 컴퓨터가 직접 실행할 수 있는 이진 파일로 저장됩니다.
4. 데이터베이스 파일
데이터베이스는 주로 이진 파일 형식을 사용하여 데이터를 효율적으로 저장하고 관리합니다.
pip install nuitka
def hello_world():
print("Hello, world!")
if __name__ == "__main__":
hello_world()
Nuitka로 컴파일하는 방법:
nuitka --standalone --onefile --remove-output example.py
1. 다른 컴퓨터에서 실행하기 (Moving binaries to other machines)
• --mode=standalone, --mode=onefile, 또는 --mode=app 옵션을 사용할 경우, 생성된 실행 파일은 Python 설치 없이도 실행이 가능합니다.
• 하지만 --mode=accelerated 모드에서는 Python 설치가 필요합니다.
2. 실행 파일 이름의 확장자 (Binary filename suffix)
• Windows에서는 .exe 확장자를 가집니다.
• 다른 플랫폼에서는:
- standalone 모드일 경우: 확장자 없음
- onefile 또는 accelerated 모드일 경우: .bin 확장자를 가집니다.
• --output-filename 옵션을 통해 이 확장자를 제거하거나 변경할 수 있습니다.
• Nuitka는 원본 스크립트 이름과 컴파일된 파일 이름이 충돌하지 않도록 일부러 확장자를 추가합니다.
3. 모듈 모드 파일 이름 주의 (Module mode filenames)
• Python 확장 모듈은 파일 이름과 모듈 이름이 반드시 일치해야 합니다.
• 파일 이름을 바꾸면 모듈이 깨지므로, 원하는 이름으로 만들고 싶다면 소스 파일 자체의 이름을 변경해야 합니다.
4. 표준 Python 구현만 사용 가능 (It has to be a standard Python implementation)
• Nuitka는 Python의 내부 구현에 밀접하게 의존하므로, 반드시 CPython (표준 Python 구현) 을 사용해야 합니다.
• 공식 Python 배포판을 사용하는 것이 이상적입니다.
⚠️ Homebrew (macOS 용)
- Homebrew로 설치한 Python도 지원되지만, 이식성이 떨어지고, 하위 호환성도 좋지 않습니다.
⚠️ Anaconda Python
- Anaconda도 지원되지만, conda 패키지에 특수 처리가 되어 있는 경우가 있어 에러가 발생할 수 있습니다.
❌ Microsoft Store의 Python
- Microsoft Store에서 제공하는 Python은 정상적으로 작동하지 않으므로 사용하지 마세요.
❌ macOS의 pyenv
- macOS에서 pyenv는 Nuitka와 호환되지 않습니다.
- 대신 Homebrew를 사용하여 직접 Python을 빌드하세요.