Stuart Ellis의 Python 현대적 모범 사례
(stuartellis.name)Modern Good Practices for Python Development
Stuart Ellis의 Python 현대적 모범 사례에서는 Python 개발 시 고려해야 할 중요한 사항들을 다루고 있습니다. 주요 내용은 다음과 같습니다:
Python 사용하기
- 운영 체제에 내장된 Python 사용 피하기: 운영 체제에 내장된 Python은 오래된 버전일 수 있습니다.
- 여러 버전을 지원하는 도구로 Python 설치: pyenv 또는 mise와 같은 도구 사용.
- 최신 버전의 Python 사용: 보안 패치와 성능 향상을 위해 최신 안정 버전 사용.
- 개발자 애플리케이션 실행에 pipx 사용: pipx를 통해 격리된 환경에서 애플리케이션 실행.
- 프로젝트 도구 사용: PDM, Hatch, Mise, Rye 추천.
Python 프로젝트 개발하기
- 코드 형식 정리: Ruff 사용.
- 코드 린팅: Ruff 추천.
- pytest로 테스트: 관련 플러그인(pytest-randomly, pytest-cov) 사용.
- 패키징: wheel 패키지 사용 및 필요한 경우 컨테이너 이미지 또는 PyInstaller 사용.
언어 문법
애플리케이션 설계
라이브러리
- argparse로 명령줄 입력 처리.
- pathlib로 파일 및 디렉터리 경로 처리.
- os.listdir() 대신 빠르고 효율적 os.scandir() 사용: PEP 471.
- 외부 명령 실행 시 subprocess 사용: PEP 324.
- 웹 클라이언트로 requests 대신 httpx 사용.
프로젝트 모범 사례
-
pyproject.toml
파일 사용: PEP 517, PEP 518, PEP 621, PEP 660. - src 레이아웃 사용: src 레이아웃과 평면 레이아웃 비교.
- 개발에 가상 환경 사용: venv, PDM, Hatch, Mise 추천.
- 패키지 설치에 요구 사항 파일 사용: pip-tools를 통한 pip-compile 또는 uv 사용.
더 자세한 내용은 전체 글을 참고하세요.
.
.
Hacker News의 Python Modern Practices 토론 요약
Python Modern Practices에 대한 Hacker News 토론에서는 다양한 도구와 방법론에 대한 사용자 의견이 공유되었습니다:
- UV 사용 추천: UV를 사용하는 것이 빠르고 쉬우며, 문제 발생 시 지원도 잘 된다. by screye
- Rye 언급: Rye는 Python 인터프리터 핀닝과 다운로드를 지원하며, uv와의 통합이 예정되어 있다. by rat87
- 현재 도구의 간단함 강조: Mamba 환경과 기본 pip로 문제가 없으며, 도구 변경 필요성을 느끼지 못한다. by helsinki
- 기본 도구 선호: pip, venv, virtualenvwrapper를 사용해 대부분의 문제를 해결할 수 있다. by throwadobe
- Pipenv 사용 옹호: Pipenv는 완전한 솔루션으로 사용해왔으며, 더 널리 사용되지 않는 이유를 모르겠다. by routerl
- Poetry의 문제점: Poetry는 Git 커밋 버전 식별자를 추가하지 못하는 등의 문제로 실망했다. by alisonatwork
- Conda와 Mamba: Conda는 의존성 관리가 훨씬 강력하며, Mamba가 더 빠르다. by wanderingmind
- Packaging 문제: Python의 패키징 문제는 사회적 이유가 크며, 항상 문제가 될 것이다. by jampekka
- Pyenv 대체 제안: Mise는 Pyenv보다 빠르고 Node 프로젝트도 지원한다. by odie5533
- Pydantic 모델과 데이터 클래스: Pydantic 모델은 검증 기능이 강력하지만 느리고, 데이터 클래스는 가볍고 효율적이다. by martinky24
자세한 내용은 Hacker News 토론을 참고하세요.
라이브러리 경량화에 대한 내용은 없네요.
miniconda3의 가상env를 사용하고 미사용 lib은 제거해서 portable하게 배포하는게 yarn과 같은 분산처리 시스템에서 더 좋은 성능을 보장했습니다.
pip 의존성 명시자(dependency specifier)에 해시를 포함해야하는 이유로 현재 pip 동작상 빌드버전을 명시할 수 없는 문제가 있네요. 이런 맥락없이 지침만 나열하는 가이드는 별로 설득력이 없어 보입니다