Python 은 범용 인터프리터 언어다. 데이터 처리 · 자동화 스크립트 · API 서버 · 머신러닝까지 폭넓게 쓰이고, 이 위키의 Kubernetes 어플리케이션 개발 예제와 Airflow 류 도구가 모두 Python 위에서 돈다.
현행 버전은 3.14.7 이다. 릴리스 계열별 상태는 다음과 같다.
| 계열 |
상태 |
지원 종료 |
| 3.14 |
버그 수정 (현행) |
2030-10 |
| 3.13 |
버그 수정 |
2029-10 |
| 3.12 |
보안 수정만 |
2028-10 |
| 3.11 |
보안 수정만 |
2027-10 |
| 3.10 |
보안 수정만 |
2026-10 |
| 3.9 이하 |
지원 종료 |
— |
- 배포판이 주는
python3 는 시스템 도구가 쓰므로 지우거나 덮어쓰지 않는다. 다른 버전이 필요하면 소스 빌드(make altinstall)나 pyenv 로 나란히 설치한다.
- 소스 빌드에는 gcc · make · openssl-devel · libffi-devel · zlib-devel 등 개발 패키지가 필요하다. 목록은 설치 문서에 있다.
| 도구 |
역할 |
python3.x |
인터프리터. 버전별로 따로 설치된다 |
pip |
패키지 설치. python3 -m pip 로 부르는 편이 버전 혼동이 없다 |
venv |
프로젝트별 가상환경. python3 -m venv .venv |
| pyenv |
여러 버전을 사용자 홈에 설치해 전환한다 |
- 소스를 받아
make altinstall 로 시스템 Python 과 나란히 설치한다.
- 사용자 홈에 여러 Python 버전을 두고 전환한다. 오프라인 설치 기록 포함.
- 소스 빌드와 RPM 설치가 무엇이 다른지, 빌드한 결과를 다른 경로로 옮겨도 되는지.
- 지금 실행되는 인터프리터와 pip 가 어느 경로의 것인지 추적한다.
- 시스템 기본은 그대로 두고 스크립트만 원하는 버전으로 돌린다.
- 사내 Nexus 등 사설 PyPI 저장소를
pip.conf 에 지정한다.
- 의존성 조건은
pyproject.toml 에, 확정된 버전은 uv.lock 에 있다. 배포 환경이 개발 환경과 어긋나지 않게 둘을 가른다.
pip show 와 pipdeptree 로 그 패키지가 무엇을 끌고 오는지 설치 전에 확인한다.
- 3.11 이후 무엇이 얼마나 빨라졌는지 계열별로 정리한다.
- 인터넷이 되는 곳에서 의존성까지 한꺼번에 받아 옮겨 설치한다. 대상 환경의 파이썬 버전과 플랫폼을 맞추는 것이 관건이다.
- 요구사항 목록을 그대로 넘겼을 때 실패하는 유형을 갈라, 무엇이 없어서 막히는지 판정한다.
- conda-forge 전체 대신 필요한 플랫폼과 파이썬 버전만 골라 받아 채널로 세운다.
- 색인 생성이 압축 · 아카이브 라이브러리를 찾지 못해 연달아 나는 오류를 푼다.
- 배포판이 막아 둔 시스템 파이썬에 설치하려다 걸렸을 때의 선택지.
--user 를 준 적이 없는데 --target 과 함께 쓸 수 없다고 나오는 이유.
RECORD 가 없어 pip uninstall 이 거부하는 패키지를 걷어낸다.
- 휠이 없어 소스 빌드로 넘어갔을 때 나는 컴파일 오류를 원인별로 가른다.
- 라우팅 · 업무 로직 · 설정을 가른 디렉터리 구조와 서비스 등록까지.
- 패키지 import 경로와 uvicorn 의 factory 재import 로 생기는 문제.
BaseSettings 가 pydantic-settings 로 빠지면서 바뀐 설정 클래스 작성법.
- 외부 패키지 없이 JWT 를 디코드해 내용을 본다.
os.stat 으로 권한 · 시각 · 크기를 읽고 경로를 다룬다.
- 표준
socket 모듈만으로 멀티캐스트 그룹에 참여해 로컬 포트로 넘긴다.
- 화면과 카메라만으로 파일을 옮길 때의 실용 용량과 스캔이 끝나지 않는 이유.
- 동적 렌더링 · 봇 차단으로 결과가 비는 이유와 공식 API 쪽 대안.
- 리터럴과
is 로 견주었을 때의 경고, 설치 권한 오류, 파이썬에서 kinit 부르기.
- 네이티브 드라이버가 없을 때 JPype 로 JVM 을 띄워 JDBC 를 호출한다.
- 깨지는 것은 Impala 서버 버전이 아니라 인증 방식과 파이썬 의존 라이브러리다.
- 컬럼이 많은 대용량 결과에서
fetchall() 이 멈추는 이유와 우회 경로.
- 행 단위 fetch + pandas 와 Arrow 배치 fetch + polars 를 같은 파이프라인으로 비교한다.
- 배치 수행 이력을 주기적으로 조회해 실패 건만 추려 Teams 채널로 보낸다.
- Parquet 파일을 직접 읽으면 결과가 어긋나는 이유와 PyIceberg 로 현재 스냅샷을 읽는 방법.
pyarrow 로 읽고 fastavro 로 쓴다. 타입 대응표는 직접 만들어 넘긴다.
- 그룹마다 색을 달리한 추세 그래프를 그리고 사후 검정 결과를 같은 그림에 붙인다.
- 드라이버 · 프레임워크 인식 · 연산 배치 순으로 어느 단계에서 끊겼는지 가른다.
- Cloudera Data Engineering 이관 시 SQL · 레거시 코드를 PySpark 로 옮기는 규칙.
- 도구 고유 치환 문법 · 기준일 처리 · NUL 문자처럼 결과가 달라질 뻔한 지점을 모았다.
- 순차 처리인 좌·우 번호 부여를 Spark 에서 다루는 방법과 정렬을 명시하지 않았을 때의 함정.
- 패키지 설치가 막힌 CDE 환경에서 py4j 로 사내 KMS 클라이언트를 부른다.
- pyspark 와 py4j 버전이 어긋났을 때 나는 오류를 맞춘다.
- 오류 없이 0 이 들어오는 Job 을 파티션 필터와 조인 키부터 확인한다.