zipapp 모듈이란?
zipapp 모듈은 파이썬 3.5 버전부터 표준 라이브러리에 포함된 기능으로, 파이썬 코드가 담긴 zip 아카이브(.pyz) 파일을 생성하고 관리하는 데 사용됩니다. 이렇게 만든 아카이브는 별도의 압축 해제 과정 없이 파이썬 인터프리터에서 바로 실행할 수 있다는 점이 큰 장점입니다.
zipapp 모듈은 두 가지 방식으로 활용할 수 있습니다.
- 명령줄 인터페이스(CLI): 터미널에서 간단한 명령어로 아카이브 생성
- 프로그래밍 인터페이스: 파이썬 코드 내에서 함수 호출로 아카이브 생성 및 관리
명령줄에서 zipapp 사용하기
실행 가능한 아카이브를 만들려면 먼저 main() 함수를 포함한 모듈이 필요합니다. 다음 명령어로 실행 아카이브를 빌드할 수 있습니다.
python -m zipapp myapp -m "example:main"
여기서 -m "example:main" 옵션은 아카이브 실행 시 진입점(entry point)이 될 함수를 지정합니다. 즉, 현재 경로에 myapp 폴더가 존재해야 하며, 그 안에는 main() 함수를 가진 example.py 파일이 있어야 합니다.
예제 코드 작성
myapp 폴더를 생성하고, 그 안에 다음 코드를 example.py로 저장합니다.
def main():
print('Hello World')
if __name__ == '__main__':
main()위 명령어를 터미널에서 실행하면 myapp.pyz 파일이 생성되며, 이제 명령 프롬프트에서 바로 실행할 수 있습니다.
C:\python37>python myapp.pyz Hello World
주요 명령줄 옵션
zipapp은 다음과 같은 명령줄 옵션을 지원합니다.
-o <output>, --output=<output>
생성되는 출력 파일의 이름을 지정합니다. 기본적으로 출력 파일은 입력 소스와 같은 이름에 .pyz 확장자를 붙인 형태로 저장되지만, 이 옵션을 사용하면 원하는 이름으로 변경할 수 있습니다.
-p <interpreter>, --python=<interpreter>
아카이브를 실행할 인터프리터를 명시적으로 지정합니다. 예를 들어 특정 파이썬 버전의 경로를 지정하면, 해당 환경에서 스크립트가 실행되도록 설정할 수 있습니다.
-c, --compress
deflate 방식으로 파일을 압축하여 출력 파일의 크기를 줄입니다. 배포용 아카이브를 만들 때 유용합니다.
프로그래밍 방식으로 zipapp 활용하기
zipapp 모듈은 코드 내에서 직접 호출할 수 있는 함수도 제공합니다.
zipapp.create_archive(source)
지정한 소스 폴더로부터 애플리케이션 아카이브를 생성합니다. 필요에 따라 interpreter(인터프리터 지정), target(출력 경로), compressed(압축 여부) 인자를 함께 사용할 수 있습니다.
zipapp.get_interpreter(archive)
아카이브 시작 부분의 #! 라인(shebang)에 지정된 인터프리터 정보를 반환합니다.
사용 예제
>>> import zipapp
>>> zipapp.create_archive('myapp', 'myapp.pyz')이처럼 zipapp 모듈을 활용하면 의존성이 포함된 파이썬 애플리케이션을 단일 실행 파일 형태로 패키징할 수 있어, 배포와 공유가 훨씬 간편해집니다.