소개

소개 (Introduction)

파이썬 표준 라이브러리는 모듈의 모음으로 구성돼요. 이 모음은 여러 방법으로 살펴볼 수 있어요. 대부분의 모듈은 파이썬으로 작성되지만, 일부는 C로 작성돼요. 모두 프로그램에 import하여 기능을 추가할 수 있어요. 일부 모듈은 스택 트레이스 출력처럼 파이썬에 매우 특화된 인터페이스를 제공하고, 일부는 특정 하드웨어 접근처럼 특정 운영 체제에 특화된 인터페이스를 제공하며, 또 다른 일부는 웹 개발처럼 특정 애플리케이션 영역에 특화된 인터페이스를 제공해요.

일부 모듈은 모든 버전과 포트의 파이썬에서 사용할 수 있고, 일부는 기본 시스템이 지원하거나 요구할 때만 사용할 수 있으며, 또 일부는 파이썬을 컴파일·설치할 당시 특정 구성 옵션이 선택되었을 때만 사용할 수 있어요.

이 매뉴얼을 처음부터 읽다가 지루해지면 다음 장으로 건너뛰어도, 사용 가능한 모듈과 파이썬 라이브러리가 지원하는 애플리케이션 영역에 대한 합리적인 개요를 얻을 수 있어요. 물론 소설처럼 읽을 필요는 없어요. 목차를 훑거나, 색인에서 특정 함수·모듈·용어를 찾아도 돼요. 어느 순서로 읽든, 이 부분의 나머지 내용이 그 자료에 익숙하다고 가정하므로 먼저 내장 함수(Built-in Functions)를 읽는 것이 도움이 돼요.

출처: Python documentation

본문

가용성에 대한 참고 사항

  • “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에서 기본 stdoutstderr는 아무것에도 연결되지 않아 파이썬이 메시지를 시스템 로그로 리다이렉트하는 자체 스트림을 설치해요. 모바일 앱에는 사용 가능한 stdin이 전혀 없어요. 결과적으로 cursesreadline 같은 콘솔 조작을 포함하는 파이썬 모듈은 모바일 플랫폼에서 사용할 수 없어요.

더 알아보기 (Learn more)