소개
소개 (Introduction)
파이썬 표준 라이브러리는 모듈의 모음으로 구성돼요. 이 모음은 여러 방법으로 살펴볼 수 있어요. 대부분의 모듈은 파이썬으로 작성되지만, 일부는 C로 작성돼요. 모두 프로그램에 import하여 기능을 추가할 수 있어요. 일부 모듈은 스택 트레이스 출력처럼 파이썬에 매우 특화된 인터페이스를 제공하고, 일부는 특정 하드웨어 접근처럼 특정 운영 체제에 특화된 인터페이스를 제공하며, 또 다른 일부는 웹 개발처럼 특정 애플리케이션 영역에 특화된 인터페이스를 제공해요.
일부 모듈은 모든 버전과 포트의 파이썬에서 사용할 수 있고, 일부는 기본 시스템이 지원하거나 요구할 때만 사용할 수 있으며, 또 일부는 파이썬을 컴파일·설치할 당시 특정 구성 옵션이 선택되었을 때만 사용할 수 있어요.
이 매뉴얼을 처음부터 읽다가 지루해지면 다음 장으로 건너뛰어도, 사용 가능한 모듈과 파이썬 라이브러리가 지원하는 애플리케이션 영역에 대한 합리적인 개요를 얻을 수 있어요. 물론 소설처럼 읽을 필요는 없어요. 목차를 훑거나, 색인에서 특정 함수·모듈·용어를 찾아도 돼요. 어느 순서로 읽든, 이 부분의 나머지 내용이 그 자료에 익숙하다고 가정하므로 먼저 내장 함수(Built-in Functions)를 읽는 것이 도움이 돼요.
본문
가용성에 대한 참고 사항
- “Availability: Unix” 참고는 이 함수가 Unix 시스템에서 흔히 발견된다는 뜻이에요. 특정 운영 체제에서의 존재 여부에 대해 주장하지는 않아요.
- 별도로 언급하지 않으면 “Availability: Unix”를 주장하는 모든 함수는 Unix 코어 위에 구축된 macOS, iOS, Android에서 지원돼요.
- 가용성 참고에 최소 커널 버전과 최소 libc 버전이 모두 포함되어 있으면 두 조건이 모두 성립해야 해요. 예를 들어
Availability: Linux >= 3.17 with glibc >= 2.27이라는 참고는 Linux 3.17 이상과 glibc 2.27 이상이 모두 필요하다는 뜻이에요.
WebAssembly 플랫폼
WebAssembly 플랫폼 wasm32-emscripten(Emscripten)과 wasm32-wasi(WASI)는 POSIX API의 일부를 제공해요. WebAssembly 런타임과 브라우저는 샌드박스 처리되어 호스트 및 외부 리소스에 대한 접근이 제한돼요. 프로세스, 스레딩, 네트워킹, 시그널 또는 다른 형태의 프로세스 간 통신(IPC)을 사용하는 표준 라이브러리 모듈은 사용할 수 없거나 다른 Unix 계열 시스템처럼 동작하지 않을 수 있어요. 파일 I/O, 파일 시스템, Unix 권한 관련 함수도 제한돼요.
Emscripten은 차단 I/O를 허용하지 않아요. sleep() 같은 다른 차단 작업은 브라우저 이벤트 루프를 차단해요. 브라우저에서 파이썬을 사용하려면 Pyodide나 PyScript를 고려해야 해요. PyScript는 Pyodide 위에 구축되어 있고, Pyodide는 CPython과 Emscripten 위에 구축돼요.
- 프로세스 관련 API는 사용할 수 없거나 항상 오류와 함께 실패해요. 여기에는 새 프로세스를 만드는
fork(),execve(), 프로세스를 기다리는waitpid(), 시그널을 보내는kill()등이 포함돼요.subprocess는 import할 수 있지만 동작하지 않아요. socket모듈은 사용할 수 있지만 제한적이고 다른 플랫폼과 다르게 동작해요. Emscripten에서 소켓은 항상 비차단이며 WebSocket을 통해 TCP를 프록시하려면 서버에 추가 JavaScript 코드와 헬퍼가 필요해요.- 일부 함수는 아무것도 하지 않거나 고정된 값을 항상 반환하는 스텁이에요.
모바일 플랫폼
Android와 iOS는 대부분의 측면에서 POSIX 운영 체제예요. 파일 I/O, 소켓 처리, 스레딩 모두 다른 POSIX 운영 체제와 같이 동작해요. 하지만 몇 가지 큰 차이점이 있어요:
- 모바일 플랫폼은 파이썬을 “임베디드” 모드에서만 사용할 수 있어요. Python REPL이 없고, python이나 pip 같은 별도 실행 파일을 사용할 수 없어요. 모바일 앱에 파이썬 코드를 추가하려면 파이썬 임베딩 API를 사용해야 해요.
- 서브프로세스: Android에서 서브프로세스 생성은 가능하지만 공식적으로 지원되지 않아요. Android는 System V IPC API의 어떤 부분도 지원하지 않으므로
multiprocessing을 사용할 수 없어요. iOS 앱은 어떠한 형태의 서브프로세싱, 멀티프로세싱, 프로세스 간 통신도 사용할 수 없어요. - 모바일 앱은 시스템 리소스(예: 시스템 시계) 수정에 제한된 접근 권한을 가져요. 이런 리소스는 자주 읽을 수 있지만, 수정하려는 시도는 대개 실패해요.
- 콘솔 입력·출력: Android에서 기본
stdout과stderr는 아무것에도 연결되지 않아 파이썬이 메시지를 시스템 로그로 리다이렉트하는 자체 스트림을 설치해요. 모바일 앱에는 사용 가능한stdin이 전혀 없어요. 결과적으로curses나readline같은 콘솔 조작을 포함하는 파이썬 모듈은 모바일 플랫폼에서 사용할 수 없어요.