소개¶
“파이썬 라이브러리”에는 여러 가지 구성 요소가 포함되어 있습니다.
여기에는 일반적으로 숫자 및 리스트와 같이 언어의 “핵심” 부분으로 간주하는 데이터형이 포함됩니다. 이러한 형의 경우, 파이썬 언어 핵심은 리터럴의 형식을 정의하고 그 의미에 몇 가지 제약을 가하지만, 의미를 완전히 정의하지는 않습니다. (반면에, 언어 핵심은 연산자의 철자법과 우선순위와 같은 문법적 속성을 정의합니다.)
라이브러리는 또한 내장 함수와 예외를 포함합니다 — import 문을 쓰지 않고도 모든 파이썬 코드에서 사용할 수 있는 객체들입니다. 이들 중 일부는 언어 핵심에 의해 정의되지만, 핵심 의미에 필수적인 것은 아니며 여기에서 설명합니다.
그러나 라이브러리 대부분은 모듈 컬렉션으로 구성됩니다. 이 컬렉션을 나누는 데는 여러 가지 방법이 있습니다. 일부 모듈은 C로 작성되고 파이썬 인터프리터에 내장되어 있습니다; 다른 것은 파이썬으로 작성되고 소스 형식으로 임포트 됩니다. 일부 모듈은 스택 추적 인쇄와 같이 파이썬에 매우 특정한 인터페이스를 제공합니다; 일부는 특정 하드웨어에 대한 액세스와 같이 운영 체제에 특정한 인터페이스를 제공합니다; 다른 것은 월드 와이드 웹과 같은 응용 프로그램 영역에 특정한 인터페이스를 제공합니다. 일부 모듈은 파이썬의 모든 버전과 이식에서 사용할 수 있습니다; 다른 것은 하위 시스템이 지원하거나 요구할 때만 사용할 수 있습니다; 그러나 다른 것들은 파이썬이 컴파일되고 설치될 때 특정 설정 옵션이 선택되었을 때만 사용할 수 있습니다.
이 설명서는 “안쪽에서부터 밖으로” 구성되어 있습니다. 먼저 내장 함수, 데이터형 및 예외, 마지막으로 관련 모듈의 장으로 그룹화된 모듈들을 설명합니다.
즉, 처음부터 이 설명서를 읽고, 지루할 때 다음 장으로 건너뛰면, 파이썬 라이브러리가 지원하는 사용 가능한 모듈과 응용 프로그램 영역에 대한 적당한 개요를 얻게 됩니다. 물론 소설처럼 읽을 필요는 없습니다. (설명서 앞에 있는) 목차를 검색하거나, (뒤에 있는) 색인에서 특정 함수, 모듈 또는 용어를 찾을 수도 있습니다. 그리고 마지막으로, 무작위 주제에 대해 배우는 것을 즐긴다면, 임의의 페이지 번호 (모듈 random 참조)를 선택하고 한두 섹션을 읽으면 됩니다. 이 설명서의 섹션을 읽는 순서와 관계없이, 내장 함수 장에서 시작하는 것이 도움이 되는데, 설명서의 나머지 부분은 이 내용에 익숙하다고 가정하기 때문입니다.
쇼를 시작합시다!
가용성에 대한 참고 사항¶
“가용성: 유닉스” 참고 사항은 이 기능이 유닉스 시스템에서 일반적으로 발견된다는 것을 뜻합니다. 특정 운영 체제에 이 기능이 존재하는지에 관한 어떠한 주장도 하지 않습니다.
별도로 언급되지 않은 경우, “가용성: 유닉스”를 주장하는 모든 기능은 유닉스 코어를 기반으로 하는 맥 OS, iOS 및 안드로이드에서 지원됩니다.
가용성(availability) 노트에 최소 커널 버전과 최소 libc 버전이 모두 포함된 경우, 두 조건이 모두 충족되어야 합니다. 예를 들어, Availability: Linux >= 3.17 with glibc >= 2.27 이라는 노트를 가진 기능은 Linux 3.17 이상 및 glibc 2.27 이상을 모두 요구합니다.
웹어셈블리 플랫폼¶
WebAssembly 플랫폼인 wasm32-emscripten (Emscripten) 및 wasm32-wasi (WASI)는 POSIX API의 일부만 제공합니다. WebAssembly 런타임과 브라우저는 샌드박스 처리되어 호스트 및 외부 리소스에 대한 접근이 제한됩니다. 프로세스, 스레딩, 네트워킹, 시그널 또는 기타 형태의 프로세스 간 통신(IPC)을 사용하는 모든 파이썬 표준 라이브러리 모듈은 사용이 불가능하거나 다른 유사 Unix 시스템에서와 다르게 작동할 수 있습니다. 파일 I/O, 파일 시스템 및 Unix 권한 관련 기능도 제한됩니다. Emscripten은 차단(blocking) I/O를 허용하지 않습니다. sleep() 과 같은 기타 차단 작업은 브라우저 이벤트 루프를 차단합니다.
WebAssembly 플랫폼에서 파이썬의 속성과 동작은 Emscripten SDK 또는 WASI SDK 버전, WASM 런타임(브라우저, NodeJS, wasmtime), 그리고 파이썬 빌드 시점의 플래그에 따라 달라집니다. WebAssembly, Emscripten 및 WASI는 발전 중인 표준이며, 네트워킹과 같은 일부 기능은 향후 지원될 수 있습니다.
브라우저용 파이썬을 사용하는 경우 Pyodide 또는 PyScript 를 고려해야 합니다. PyScript는 Pyodide 위에서 구축되었으며, Pyodide 자체는 CPython 및 Emscripten 위에서 구축되었습니다. Pyodide는 브라우저의 JavaScript 및 DOM API에 액세스할 수 있게 해주며, 자바스크립트의 XMLHttpRequest 및 Fetch API를 통해 제한된 네트워킹 기능을 제공합니다.
프로세스 관련 API는 사용이 불가능하거나 항상 오류와 함께 실패합니다. 여기에는 새 프로세스를 생성하는 기능(
fork(),execve()), 프로세스를 대기하는 기능(waitpid()), 시그널을 보내는 기능(kill()), 또는 기타 프로세스와 상호작용하는 기능이 포함됩니다.subprocess는 가져올 수 있지만 작동하지 않습니다.socket모듈은 사용 가능하지만 제한적이며 다른 플랫폼과 다르게 동작합니다. Emscripten에서 소켓은 항상 비차단(non-blocking) 방식이며, WebSockets를 통해 TCP를 프록시하기 위해 서버 측의 추가 자바스크립트 코드와 헬퍼가 필요합니다; 자세한 내용은 Emscripten Networking 을 참조하십시오. WASI snapshot preview 1은 기존 파일 디스크립터로부터 생성된 소켓만 허용합니다.일부 함수는 아무것도 수행하지 않고 미리 정의된 값을 항상 반환하는 스텁(stub)입니다.
파일 기술자, 파일 권한, 파일 소유권 및 링크와 관련된 기능은 제한되어 있으며 일부 작업을 지원하지 않습니다. 예를 들어, WASI는 절대 경로를 포함하는 심볼릭 링크를 허용하지 않습니다.
모바일 플랫폼¶
Android와 iOS는 대부분의 측면에서 POSIX 운영체제입니다. 파일 I/O, 소켓 처리 및 스레딩은 모든 POSIX 운영체제에서 작동하는 방식과 동일하게 동작합니다. 하지만 몇 가지 주요한 차이점이 있습니다.
모바일 플랫폼에서는 Python을 “임베디드” 모드로만 사용할 수 있습니다. Python REPL이 없으며, python 이나 pip 와 같은 별도의 실행 파일을 사용할 수 없습니다. 모바일 앱에 Python 코드를 추가하려면 Python embedding API 를 사용해야 합니다. 자세한 내용은 안드로이드에서 파이썬 사용하기 및 iOS에서 Python 사용하기 를 참조하십시오.
서브 프로세스:
Android에서 서브 프로세스를 생성하는 것은 가능하지만 공식적으로 지원되지 않습니다. 특히 Android는 System V IPC API의 어떤 부분도 지원하지 않으므로
multiprocessing을 사용할 수 없습니다.iOS 앱은 어떠한 형태의 서브 프로세싱, 멀티프로세싱 또는 프로세스 간 통신(IPC)도 사용할 수 없습니다. iOS 앱이 서브 프로세스를 생성하려고 시도하면, 해당 프로세스는 멈추거나 충돌합니다. 또한 iOS 앱은 실행 중인 다른 애플리케이션을 확인할 수 없으며, 이 목적을 위해 존재하는 iOS 전용 API 외에는 다른 실행 중인 애플리케이션과 통신할 수도 없습니다.
모바일 앱은 시스템 리소스(시스템 시계 등)를 수정하는 권한이 제한적입니다. 이러한 리소스는 대개 읽기 는 가능하지만, 수정을 시도하면 보통 실패합니다.
콘솔 입력 및 출력:
Android에서는 기본
stdout및stderr``가 아무 곳에도 연결되어 있지 않으므로, Python은 메시지를 시스템 로그로 리디렉션하는 자체 스트림을 설치합니다. 이들은 각각 ``python.stdout및python.stderr태그 아래에서 확인할 수 있습니다.iOS 앱은 제한적인 개념의 콘솔 출력을 가집니다.
stdout및stderr는 존재 하며, Xcode에서 실행할 때stdout및stderr에 기록된 콘텐츠는 로그에서 확인할 수 있지만, 이 내용이 시스템 로그에 기록되지는 않습니다. 사용자가 진단 보조용으로 앱 로그를 제공하더라도stdout이나stderr에 작성된 내용은 포함되지 않습니다.모바일 앱에는 사용할 수 있는
stdin이 전혀 없습니다. 앱에서 화면에 키보드를 표시할 수는 있지만, 이는 소프트웨어 기능이며stdin에 연결된 것이 아닙니다.결과적으로, 콘솔 조작과 관련된 Python 모듈(예:
curses,readline)은 모바일 플랫폼에서 사용할 수 없습니다.