핵심 요약
- 글 낭독 교정용 파이썬 스크립트에 필요한 파이썬 라이브러리와 시스템 오디오 도구 종속성 문제를 해결하기 위해 Nix를 도입했습니다.
- Nix Flake와 writePython3Bin을 활용해 시스템 PATH와 라이브러리를 단일 바이너리로 묶어 환경 파편화를 방지했습니다.
- 이를 통해 다른 PC나 오랜 시간이 지난 후에도 추가 설정 없이 동일하게 실행할 수 있는 재현성을 확보했습니다.
요약 작성자는 자신이 쓴 글의 어색한 문장이나 흐름을 점검하기 위해 합성 음성으로 본문을 낭독해 주는 간단한 파이썬 스크립트를 만들고자 했습니다. 직접 소리 내어 읽으면 실제 적힌 단어가 아니라 머릿속에서 의도했던 문장을 읽어버리는 경향이 있어, 제3자의 낭독을 듣는 교정 방식을 선호했기 때문입니다.
하지만 이를 구현하려면 웹페이지 본문을 추출하는 써드파티 라이브러리인 Trafilatura와, 시스템 오디오 재생 도구인 aplay 같은 시스템 종속성이 동시에 필요했습니다. 파이썬 환경에서는 pip 관련 패키지가 꼬이기 십상이고, 시스템 라이브러리 버전 문제까지 겹치면 유지보수 부담이 커져 과거 같았으면 스크립트 제작 자체를 포기했을 상황이었습니다.
작성자는 이 문제를 Nix의 Flake 기능을 활용해 해결했습니다. flake.nix 파일에 NixOS 패키지 저장소(nixpkgs) 주소와 아키텍처(x86_64, aarch64)를 지정하고, pkgs.writers.writePython3Bin 함수를 사용해 실행 바이너리를 생성하도록 구성했습니다. makeWrapperArgs를 통해 시스템 도구(alsa-utils)가 포함된 PATH를 설정하고, libraries 옵션에 파이썬 의존성(requests, trafilatura)을 지정하여 파이썬 코드가 일반 환경에서 실행되는 것처럼 느끼면서도 모든 도구와 패키지를 고정된 Nix 스토어에서 불러오도록 감쌌습니다.
결과적으로 'nix run .' 명령어 하나만으로 필요한 모든 의존성을 자동으로 설정해 스크립트를 즉시 실행할 수 있게 되었습니다. 다른 컴퓨터로 스크립트를 옮기거나 1년 뒤에 다시 실행하더라도 시스템 환경 변화와 무관하게 동일한 버전의 의존성으로 완벽히 재현되며 작동한다는 점이 핵심입니다. 또한 writePython3Bin은 기본 린팅을 수행하고, 쉘 스크립트용 도구인 writeBashBin의 경우 ShellCheck 검증까지 통과시켜 안정성을 크게 높여준다고 전했습니다.
Sponsored · 광고