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