26P by geniuskey 4달전 | favorite | 댓글 5개

Modern Good Practices for Python Development

Stuart Ellis의 Python 현대적 모범 사례에서는 Python 개발 시 고려해야 할 중요한 사항들을 다루고 있습니다. 주요 내용은 다음과 같습니다:

Python 사용하기

  • 운영 체제에 내장된 Python 사용 피하기: 운영 체제에 내장된 Python은 오래된 버전일 수 있습니다.
  • 여러 버전을 지원하는 도구로 Python 설치: pyenv 또는 mise와 같은 도구 사용.
  • 최신 버전의 Python 사용: 보안 패치와 성능 향상을 위해 최신 안정 버전 사용.
  • 개발자 애플리케이션 실행에 pipx 사용: pipx를 통해 격리된 환경에서 애플리케이션 실행.
  • 프로젝트 도구 사용: PDM, Hatch, Mise, Rye 추천.

Python 프로젝트 개발하기

언어 문법

애플리케이션 설계

  • print() 대신 logging 사용.
  • 구성에 TOML 형식 사용: PEP 680.
  • 비동기 I/O는 필요한 경우에만 사용.

라이브러리

  • argparse로 명령줄 입력 처리.
  • pathlib로 파일 및 디렉터리 경로 처리.
  • os.listdir() 대신 빠르고 효율적 os.scandir() 사용: PEP 471.
  • 외부 명령 실행 시 subprocess 사용: PEP 324.
  • 웹 클라이언트로 requests 대신 httpx 사용.

프로젝트 모범 사례

더 자세한 내용은 전체 글을 참고하세요.
.
.

Hacker News의 Python Modern Practices 토론 요약

Python Modern Practices에 대한 Hacker News 토론에서는 다양한 도구와 방법론에 대한 사용자 의견이 공유되었습니다:

  1. UV 사용 추천: UV를 사용하는 것이 빠르고 쉬우며, 문제 발생 시 지원도 잘 된다. by screye
  2. Rye 언급: Rye는 Python 인터프리터 핀닝과 다운로드를 지원하며, uv와의 통합이 예정되어 있다. by rat87
  3. 현재 도구의 간단함 강조: Mamba 환경과 기본 pip로 문제가 없으며, 도구 변경 필요성을 느끼지 못한다. by helsinki
  4. 기본 도구 선호: pip, venv, virtualenvwrapper를 사용해 대부분의 문제를 해결할 수 있다. by throwadobe
  5. Pipenv 사용 옹호: Pipenv는 완전한 솔루션으로 사용해왔으며, 더 널리 사용되지 않는 이유를 모르겠다. by routerl
  6. Poetry의 문제점: Poetry는 Git 커밋 버전 식별자를 추가하지 못하는 등의 문제로 실망했다. by alisonatwork
  7. Conda와 Mamba: Conda는 의존성 관리가 훨씬 강력하며, Mamba가 더 빠르다. by wanderingmind
  8. Packaging 문제: Python의 패키징 문제는 사회적 이유가 크며, 항상 문제가 될 것이다. by jampekka
  9. Pyenv 대체 제안: Mise는 Pyenv보다 빠르고 Node 프로젝트도 지원한다. by odie5533
  10. Pydantic 모델과 데이터 클래스: Pydantic 모델은 검증 기능이 강력하지만 느리고, 데이터 클래스는 가볍고 효율적이다. by martinky24

자세한 내용은 Hacker News 토론을 참고하세요.

라이브러리 경량화에 대한 내용은 없네요.
miniconda3의 가상env를 사용하고 미사용 lib은 제거해서 portable하게 배포하는게 yarn과 같은 분산처리 시스템에서 더 좋은 성능을 보장했습니다.

왜 pip-tools나 uv를 사용해야 할까요? 현대적이라던가 좋다는 주장에 근거가 전혀 없네요

pip 의존성 명시자(dependency specifier)에 해시를 포함해야하는 이유로 현재 pip 동작상 빌드버전을 명시할 수 없는 문제가 있네요. 이런 맥락없이 지침만 나열하는 가이드는 별로 설득력이 없어 보입니다

주로 어떤걸 사용하시나요??

기존에는 pip freeze만으로 작업을 했었는데요, 윈도우/리눅스 지원 라이브러리만 선정해서 작업했었고 패치버전이 바뀌어서 발생한 문제는 아직 없었습니다. 그럼에도 불구하고 이제 문제를 알았으니 필요성은 이해하고 있고요, 다만 pip-tools나 uv가 좀더 성숙해졌을때 사용을 고려해볼 예정입니다