설정 및 빌드

이 지침에서는 소스 코드의 작업 복사본과 컴파일된 CPython 인터프리터 버전(CPython은 https://www.python.org/에서 제공되는 Python 버전입니다)을 얻는 방법을 설명합니다. 또한 CPython 소스 코드의 디렉터리 구조를 간략히 설명합니다.

또는 Docker가 설치되어 있다면 공식 이미지를 사용할 수 있습니다. 여기에는 여러 Python 버전의 최신 릴리스와 Git 헤드가 포함되어 있으며, 개발 및 테스트 목적으로만 제공됩니다.

더 보기

관련 빠른 참조는 Git 설치부터 풀 리퀘스트 제출까지의 과정을 간략히 요약합니다.

Git 설치

CPython은 버전 관리를 위해 Git을 사용하여 개발됩니다. Git 명령줄 프로그램의 이름은 git이며, 이 이름은 Git 자체를 지칭할 때도 사용됩니다. Git은 일반적으로 사용되는 모든 운영 체제에서 쉽게 이용할 수 있습니다.

  • 설치

    CPython 저장소는 GitHub에서 호스팅되므로 단계별 설치 지침은 GitHub 설정 지침 또는 Git 프로젝트 지침 중 하나를 참조하십시오. TortoiseGit 또는 GitHub Desktop 같은 그래픽 클라이언트도 고려할 수 있습니다.

  • 구성

    관련 이름과 이메일을 구성하고 SSH 키를 생성하십시오. 그러면 git pull, git push, git fetch 같은 명령을 실행할 때마다 사용자 이름과 암호를 입력하지 않고도 GitHub와 상호 작용할 수 있습니다. Windows에서는 autocrlf 활성화도 수행해야 합니다.

소스 코드 가져오기

CPython 저장소는 GitHub에서 호스팅됩니다. 소스 코드 복사본을 얻으려면 GitHub에서 Python 저장소를 포크하고, 개인 포크의 로컬 클론을 생성한 다음 원격 저장소를 구성하십시오.

다음 단계는 각 컴퓨터에서 한 번만 실행하면 됩니다.

  1. https://github.com/python/cpython으로 이동하십시오.

  2. 오른쪽 위에 있는 Fork를 누르십시오.

  3. 저장소를 포크할 위치를 묻는 메시지가 나타나면 자신의 사용자 이름으로 포크하도록 선택하십시오.

  4. 포크는 https://github.com/<username>/cpython에 생성됩니다.

  5. GitHub 포크를 클론하십시오(<username>을 자신의 사용자 이름으로 바꾸십시오).:

    $ git clone git@github.com:<username>/cpython.git
    

    (SSH 기반 URL과 HTTPS 기반 URL을 모두 사용할 수 있습니다.)

  1. upstream 원격 저장소를 추가한 다음, upstream에서 main 브랜치를 가져오고 항상 origin으로 푸시하도록 git을 구성하십시오.:

    $ cd cpython
    $ git remote add upstream https://github.com/python/cpython
    $ git config --local branch.main.remote upstream
    $ git remote set-url --push upstream git@github.com:<your-username>/cpython.git
    
  2. 설정이 올바른지 확인하십시오.:

    $ git remote -v
    origin  git@github.com:<your-username>/cpython.git (fetch)
    origin  git@github.com:<your-username>/cpython.git (push)
    upstream        https://github.com/python/cpython (fetch)
    upstream        git@github.com:<your-username>/cpython.git (push)
    $ git config branch.main.remote
    upstream
    

이 명령에 관한 자세한 내용은 Git 입문 및 치트 시트를 참조하십시오.

모든 작업을 올바르게 수행했다면 이제 cpython 디렉터리에 코드 복사본이 있고, 자신의 GitHub 포크(origin)와 공식 CPython 저장소(upstream)를 각각 가리키는 두 개의 원격 저장소가 있어야 합니다.

이미 릴리스된 Python 버전, 즉 유지보수 모드 상태인 버전의 작업 복사본이 필요하다면 릴리스 브랜치를 체크아웃할 수 있습니다. 예를 들어 Python 3.13의 작업 복사본을 체크아웃하려면 git switch 3.13을 실행하십시오.

이러한 업데이트를 수행하면 CPython을 다시 컴파일해야 합니다.

CPython은 작업 복사본에서 실행되고 있음을 인식한다는 점에 유의하십시오. 즉, 작업 복사본에서 CPython의 소스 코드를 편집하면 인터프리터가 Python 코드의 변경 사항을 감지하여 즉시 사용하고 테스트할 수 있습니다. (C 코드를 변경하면 아래에 설명된 대로 영향을 받는 파일을 다시 컴파일해야 합니다.)

문서 변경 사항도 같은 저장소에서 만들 수 있습니다. 시작하기을 참조하십시오.

pre-commit을 Git 훅으로 설치하기

코드가 올바르게 린트되도록 pre-commit을 Git 훅으로 설정하는 것을 권장합니다.:

$ pre-commit install --allow-missing-config
pre-commit installed at .git/hooks/pre-commit

이제 git commit 시 pre-commit이 자동으로 실행됩니다.

컴파일 및 빌드

CPython은 다양한 항목의 디버깅에 도움이 되는 여러 컴파일 플래그를 제공합니다. 알려진 모든 플래그는 Misc/SpecialBuilds.txt 파일에서 찾을 수 있지만, 가장 중요한 플래그는 “pydebug” 빌드로 알려진 빌드를 생성하는 Py_DEBUG 플래그입니다. 이 플래그는 일반적인 문제를 포착하는 데 도움이 되는 여러 추가 건전성 검사를 활성화합니다. 이 플래그는 매우 흔히 사용되므로 이를 활성화하는 것이 기본 컴파일 옵션입니다.

CPython은 항상 pydebug 빌드에서 개발해야 합니다(그렇게 하지 않아야 하는 유일한 경우는 성능을 측정할 때입니다). 순수 Python 코드만 작업하는 경우에도 pydebug 빌드는 건너뛰어서는 안 되는 여러 유용한 검사를 제공합니다.

더 보기

다양한 구성 및 빌드 플래그의 효과는 다음 문서에 설명되어 있습니다. Python 구성 문서.

Unix

핵심 CPython 인터프리터를 빌드하는 데는 C 컴파일러만 필요하지만, 일부 확장 모듈에는 추가 라이브러리의 개발 헤더가 필요합니다(예: 압축용 zlib 라이브러리). 작업하려는 내용에 따라 컴파일된 인터프리터가 원하는 기능을 지원하도록 이러한 추가 요구 사항을 설치해야 할 수도 있습니다.

이러한 선택적 의존성을 설치하려면 아래의 의존성 설치 절을 참조하십시오.

이러한 의존성을 설치할 필요가 없다면, 개발용 Python을 빌드하는 기본 단계는 구성한 다음 컴파일하는 것입니다.

구성은 일반적으로 다음과 같이 합니다.:

$ ./configure --with-pydebug

configure에 사용할 수 있는 플래그가 더 있지만, 이는 CPython의 pydebug 빌드를 얻기 위해 수행해야 하는 최소한의 작업입니다.

반복되는 configure 실행 속도를 높이려면 --config-cache를 사용하십시오(--cache-file=config.cache와 동일하며, 축약형은 -C입니다):

$ ./configure --config-cache --with-pydebug

그러면 결과가 config.cache 파일에 캐시됩니다. 컴파일러를 변경하거나 빌드 환경을 크게 변경한 경우 configure를 다시 실행하기 전에 config.cache 파일을 삭제하십시오.

참고

특정 빌드 디렉터리에서 configure를 다시 실행하기 전이나 후에 make clean을 실행해야 할 수도 있습니다.

configure가 완료되면 다음 명령으로 CPython을 컴파일할 수 있습니다.:

$ make -s -j $(nproc)

그러면 경고와 오류만 stderr에 출력되도록 CPython을 빌드합니다. -j 인자는 make가 작업을 동시에 실행하되 병렬 작업 수를 컴퓨터의 CPU 코어 수로 제한한다는 의미입니다. -j 플래그에 전달하는 숫자를 조정하여 병렬 작업 수의 제한을 변경할 수 있으며, 이에 따라 RAM 사용량과 컴파일 시간 사이의 균형을 조절할 수 있습니다.

빌드가 끝나면 성공 메시지와 함께 의존성이 누락되어 빌드되지 않은 확장 모듈 목록이 표시되어야 합니다.

The necessary bits to build these optional modules were not found:
_gdbm
To find the necessary bits, look in configure.ac and config.log.

Checked 106 modules (31 built-in, 74 shared, 0 n/a on macosx-13.4-arm64, 0 disabled, 1 missing, 0 failed on import)

빌드에 실패했고 C89 또는 C99 호환 컴파일러를 사용하고 있다면 issue tracker에 버그 보고서를 등록하십시오.

관련 의존성 빌드를 수행하기로 했다면 configuremake를 모두 다시 실행해야 합니다.

CPython 빌드가 완료되면 제자리에서 실행할 수 있는 빌드를 얻게 됩니다. 대부분의 시스템에서는 ./python(모든 예제에서도 사용함)을 사용하고, 대소문자를 구분하지 않는 파일 시스템을 사용하는 곳(예: 기본 설정의 macOS)에서는 Python 디렉터리와의 충돌을 방지하기 위해 ./python.exe를 사용합니다. 일반적으로 빌드한 Python 사본을 설치할 필요는 없습니다! 인터프리터는 자신이 실행되는 위치를 파악하여 작업 사본에 있는 파일을 사용합니다. 작업 사본의 빌드를 실수로 설치할까 걱정된다면 구성 단계에 --prefix=/tmp/python을 추가할 수 있습니다. 작업 디렉터리에서 실행할 때는 configure--enable-shared 플래그를 사용하지 않는 것이 좋습니다. 매우 주의하지 않으면 방금 빌드한 인터프리터의 코드가 아니라 이전에 설치된 공유 Python 라이브러리의 코드로 실수로 실행할 수 있습니다.

Clang

clang으로 CPython을 빌드하는 경우, CPython에는 특별히 불필요한 일부 표준 경고를 표시하지 않도록 설정할 수 있는 플래그는 -Wno-unused-value -Wno-empty-body -Qunused-arguments입니다. configure를 실행할 때 CFLAGS 환경 변수를 이러한 플래그로 설정할 수 있습니다.

clangccache와 함께 사용하는 경우 -Wno-parentheses-equality 플래그로 시끄러운 parentheses-equality 경고를 끄십시오. 전처리가 ccache에 의해 별도로 수행되므로 clang에는 확장된 매크로의 불필요한 괄호가 유효하다는 것을 감지할 충분한 정보가 없으며, 이 때문에 이러한 경고가 발생합니다.

LLVM 2.8을 사용하는 경우 ctypes 모듈을 빌드하려면 -no-integrated-as 플래그도 사용하십시오. 이 플래그가 없어도 CPython의 나머지 부분은 정상적으로 빌드됩니다.

최적화

CPython의 성능을 개선하려는 경우 최적화된 CPython 빌드를 사용하는 것이 좋습니다. 최적화를 활성화하여 CPython을 빌드하면 훨씬 오래 걸릴 수 있으며, 일반적으로 그렇게 할 필요는 없습니다. 그러나 제안된 성능 최적화에 대해 정확한 벤치마크 결과를 얻으려면 반드시 필요합니다.

최적화된 Python 빌드에는 configure --enable-optimizations --with-lto를 사용하십시오. 이렇게 하면 프로파일 기반 최적화(Profile Guided Optimization, PGO)를 활성화하도록 기본 make 대상을 설정하며, 일부 플랫폼에서는 링크 타임 최적화(Link Time Optimization, LTO)를 자동으로 활성화하는 데 사용될 수 있습니다. 이러한 옵션에 대해 자세히 알아보려면 --enable-optimizations--with-lto를 참조하십시오.

$ ./configure --enable-optimizations --with-lto

Windows

참고

Linux용 Windows 하위 시스템(WSL)을 사용하는 경우, PowerShell이나 cmd.exe 명령 프롬프트와 같은 네이티브 Windows 셸 프로그램에서 저장소를 복제하고, Windows용 Git 빌드(예: Git for Windows download from the official Git website)를 사용하십시오. 그렇지 않으면 Visual Studio에서 프로젝트의 모든 파일을 찾을 수 없어 빌드에 실패합니다.

Windows에서 Python을 빌드하는 절차를 단계별로 간결하게 요약한 내용은 Victor Stinner’s guide를 참조하십시오.

지원되는 모든 Python 버전은 Microsoft Visual Studio 2017 이상을 사용하여 빌드할 수 있습니다. Visual Studio의 무료 또는 유료 버전 중 어느 것이든 다운로드하여 사용할 수 있습니다.

설치할 때 필요한 모든 빌드 도구를 얻으려면 Python development 워크로드와 선택적 Python native development tools 구성 요소를 선택하십시오. Git for Windows가 아직 설치되어 있지 않다면 개별 구성 요소 탭에서 찾을 수 있습니다.

참고

MSI 설치 관리자를 빌드하려면 해당 빌드 도구 체인이 Microsoft .NET Framework 버전 3.5에 의존한다는 점에 유의하십시오(Windows 10과 같은 최신 Windows 버전에는 포함되어 있지 않을 수 있습니다). 최신 Windows 버전에서 빌드하는 경우 제어판(Programs ‣ Programs and Features ‣ Turn Windows Features on or off)을 사용하여 .NET Framework 3.5 (includes .NET 2.0 and 3.0) 항목이 활성화되어 있는지 확인하십시오.

첫 번째 빌드에서는 모든 외부 의존성이 다운로드되도록 명령줄을 사용해야 합니다.

PCbuild\build.bat -c Debug

위의 명령줄 빌드는 -c Debug 인자를 사용하여 Debug 구성으로 빌드하며, 이 구성은 Python 개발에 유용한 검사와 어설션을 활성화합니다. 기본적으로 Release 구성으로 빌드하며 32비트 Win32 대신 64비트 x64 플랫폼을 대상으로 합니다. 빌드 구성과 플랫폼을 제어하려면 각각 -c-p를 사용하십시오.

이 빌드가 성공하면 원하는 경우 Visual Studio IDE에서 PCbuild\pcbuild.sln 솔루션을 열어 개발을 계속할 수 있습니다. Visual Studio에서 빌드할 때는 도구 모음의 드롭다운 메뉴에서 스크립트에 사용한 것과 일치하는 빌드 설정(Debug 구성 및 x64 플랫폼)을 선택해야 합니다.

참고

빌드 구성이나 플랫폼을 변경해야 한다면 VS에서 해당 옵션으로 빌드하기 전에 먼저 build.bat 스크립트에 해당 옵션을 설정하여 한 번 빌드함으로써 모든 파일이 올바르게 다시 빌드되도록 하십시오. 그렇지 않으면 다시 빌드되지 않은 모듈을 불러올 때 오류가 발생할 수 있습니다.

PGInstrumentPGUpdate 구성은 PGO 빌드용이며 일반적인 개발용이 아니므로 선택하지 마십시오.

컴파일한 Python 빌드는 다음과 같이 실행할 수 있습니다:

PCbuild\amd64\python_d.exe

필요한 다른 소프트웨어와 빌드 방법에 대한 자세한 내용은 PCBuild readme를 참조하십시오.

WASI

WASIWebAssembly를 위한 시스템 인터페이스 표준입니다. WebAssembly를 대상으로 할 수 있는 C 컴파일러와 WASI용 POSIX 호환 심을 제공하는 wasi-libc를 함께 사용하면 CPython을 WASI 호스트/런타임에서 게스트로 실행할 수 있습니다.

참고

CPython의 교차 컴파일은 ./configure / make용으로 설계되었으므로 아래 지침에서는 Unix 기반 OS를 사용한다고 가정합니다.

WASI용으로 빌드하려면 CPython을 교차 컴파일해야 합니다. 이를 위해서는 Unix용 빌드와 마찬가지로 C 컴파일러가 필요하며, 다음 항목도 필요합니다:

  1. WebAssembly를 대상으로 할 수 있는 C 컴파일러(예: WASI SDK)

  2. WASI 호스트/런타임(예: Wasmtime)

  3. 빌드 스크립트를 실행하기 위한 시스템 설치 버전의 Python 3.11 이상

이 모든 것은 WASI 개발 컨테이너에서 제공됩니다(코드스페이스를 사용할 때 대체 컨테이너로 선택할 수 있습니다). 컨테이너에 설치된 항목을 참조하여 정상적으로 작동하는 것으로 알려진 이러한 도구의 버전을 확인할 수도 있습니다.

참고

CPython은 WASI용 특정 도구에서만 검증되었습니다. 다른 컴파일러, 호스트 또는 WASI 버전도 작동할 것으로 예상되지만, 컨테이너와 빌드 스크립트에 지정된 도구 및 해당 버전은 빌드봇을 통해 테스트됩니다.

WASI용 빌드에는 CPython의 WASI 빌드를 만드는 데 도움이 되는 빌드 Python을 사용하는 교차 빌드가 필요합니다(엄밀히 말하면 빌드 Python도 대상 Python이고 호스트 빌드는 WASI 빌드이므로 “호스트 x 호스트” 교차 빌드입니다). 이는 실질적으로 CPython을 두 번 빌드한다는 뜻입니다. 한 번은 빌드 시스템에서 사용할 Python 버전을 만들기 위한 것이고, 다른 한 번은 최종적으로 필요한 빌드를 만들기 위한 것입니다(즉, 빌드 Python은 사용자가 직접 사용하기 위한 것이 아니라 빌드 시스템에서만 사용하기 위한 것입니다).

WASI용 CPython 디버그 빌드를 얻는 가장 쉬운 방법은 Python 3.11 이상에서 다음 명령을 실행하는 것입니다:

python Platforms/WASI build --quiet -- --config-cache --with-pydebug
python Tools/wasm/wasi build --quiet -- --config-cache --with-pydebug
python Tools/wasm/wasi.py build --quiet -- --config-cache --with-pydebug

이 명령 하나로 cross-build/ 디렉터리에 빌드 Python과 WASI 빌드를 모두 구성하고 빌드합니다.

각 구성 및 빌드 단계를 별도로 수행할 수도 있습니다. 위 명령은 다음 명령을 편리하게 실행하는 래퍼입니다:

$ python Platforms/WASI configure-build-python --quiet -- --config-cache --with-pydebug
$ python Platforms/WASI make-build-python --quiet
$ python Platforms/WASI configure-host --quiet -- --config-cache
$ python Platforms/WASI make-host --quiet
$ python Tools/wasm/wasi configure-build-python --quiet -- --config-cache --with-pydebug
$ python Tools/wasm/wasi make-build-python --quiet
$ python Tools/wasm/wasi configure-host --quiet -- --config-cache
$ python Tools/wasm/wasi make-host --quiet
$ python Tools/wasm/wasi.py configure-build-python --quiet -- --config-cache --with-pydebug
$ python Tools/wasm/wasi.py make-build-python --quiet
$ python Tools/wasm/wasi.py configure-host --quiet -- --config-cache
$ python Tools/wasm/wasi.py make-host --quiet

참고

configure-host 명령은 빌드 Python을 바탕으로 --with-pydebug 사용 여부를 추론합니다.

예를 들어 코드를 변경한 후 make-host 단계만 실행하려는 경우에는 build 이후에 개별 명령을 실행하는 것이 유용합니다.

모든 작업이 완료되면 python.wasm 파일을 실행하는 데 사용할 수 있는 cross-build/wasm32-wasip1/python.sh 도우미 파일이 생성됩니다(configure-host 하위 명령의 출력을 참조하십시오):

cross-build/wasm32-wasip1/python.sh --version

Makefile 타깃도 사용할 수 있으며, HOSTRUNNER 환경 변수가 python.sh에서 사용되는 값과 유사한 값으로 설정되어 있으므로 예상대로 작동합니다:

make -C cross-build/wasm32-wasip1 test

참고

WASI는 기능 기반 보안 모델을 사용합니다. 이는 사용자가 허용하도록 지시하지 않는 한 WASI 호스트가 사용자의 시스템에 대한 전체 접근 권한을 제공하지 않는다는 뜻입니다. 또한 파일과 같은 항목이 WASI 호스트 내부의 다른 경로에 매핑될 수도 있다는 뜻입니다. 따라서 python.wasm/ python.sh에 파일 경로를 전달하려면 해당 경로가 사용자의 시스템에 있는 경로가 아니라 WASI 호스트 내부의 경로와 일치해야 합니다(컨테이너를 사용할 때와 매우 유사합니다).

Emscripten

Emscripten은 완전한 오픈 소스 컴파일러 툴체인입니다. C/C++ 코드를 브라우저와 Node.js를 포함한 JavaScript 런타임에서 사용할 수 있는 WebAssembly/JavaScript 실행 파일로 컴파일합니다.

참고

CPython의 크로스 컴파일이 ./configure / make용으로 설계되었으므로 아래 지침에서는 Unix 기반 OS를 사용한다고 가정합니다.

Emscripten용으로 빌드하려면 CPython을 크로스 컴파일해야 합니다. 이를 위해서는 Unix용으로 빌드할 때와 마찬가지로 C 컴파일러가 필요합니다. Node Version Manager(nvm)도 경로에 있어야 합니다.

Emscripten용으로 빌드하려면 CPython의 Emscripten 빌드를 만드는 데 도움이 되는 빌드 Python을 갖춘 크로스 빌드를 수행해야 합니다. 이는 CPython을 두 번 빌드한다는 뜻입니다. 한 번은 빌드 시스템에서 사용할 Python 버전을 만들기 위해서이고, 다른 한 번은 최종적으로 필요한 빌드를 만들기 위해서입니다(즉, 빌드 Python은 직접 사용하는 것이 아니라 빌드 시스템에서만 사용하기 위한 것입니다).

Emscripten을 빌드하는 가장 간단한 방법은 다음을 실행하는 것입니다:

export EMSDK_CACHE=$PWD/cross-build/emsdk
python3 Platforms/emscripten install-emscripten
python3 Platforms/emscripten build all

install-emscripten은 필요한 버전의 Emscripten SDK를 다운로드하여 EMSDK_CACHE 디렉터리에 설치합니다. build all은 다음을 수행합니다:

  1. 호스트 머신에서 실행할 수 있는 Python 사본(“빌드” Python)을 빌드합니다;

  2. nvm을 사용하여 필요한 버전의 Node가 설치되도록 합니다;

  3. Python의 모든 바이너리 의존성(예: libffimpdecimal) 코드를 다운로드하고 Emscripten용으로 컴파일합니다; 그리고

  4. Emscripten에서 실행할 수 있는 Python 사본(“호스트” Python)을 빌드합니다.

빌드된 바이너리 의존성은 Emscripten 캐시 디렉터리 안에 캐시됩니다. 특정 Emscripten 버전용으로 한 번 빌드되면 해당 의존성의 버전이나 빌드 스크립트가 변경되지 않는 한 이후 실행에서는 다시 빌드되지 않습니다.

nvm${HOME}/.nvm에 설치되어 있다고 가정합니다. nvm이 설치되어 있지 않거나 이를 사용하고 싶지 않다면 build 명령에 --host-runner node를 전달할 수 있습니다. 인자는 PATH에서 찾을 수 있는 실행 파일의 이름이나 실행 파일의 상대 경로 또는 절대 경로여야 합니다.

EMSDK_CACHE 환경 변수를 생략하면 빌드 스크립트는 현재 환경에서 Emscripten 도구를 사용할 수 있다고 가정합니다. 해당 도구를 다운로드하고 환경에서 활성화하는 것은 사용자의 책임입니다. Python을 빌드하는 데 필요한 Emscripten 및 Node 버전은 Platforms/emscripten/config.toml 구성 파일에 정의되어 있습니다.

Platforms/emscripten 빌드 스크립트의 동작을 제어하는 데 사용할 수 있는 환경 변수는 두 가지입니다:

  • EMSDK_CACHE(또는 --emsdk-cache 플래그)는 Emscripten SDK 캐시 디렉터리의 위치를 제어합니다. --emsdk-cache 플래그를 전달하는 대신 이 환경 변수를 사용할 수 있습니다. 이 변수를 설정하면 빌드 스크립트는 필요한 Emscripten 버전이 캐시에 있는지 검증하고, 없으면 오류와 함께 종료합니다. 캐시를 채우려면 install-emscripten을 실행하십시오.

  • CROSS_BUILD_DIR(또는 --cross-build-dir 플래그)는 빌드에 사용할 cross-build 디렉터리의 위치를 정의합니다. 여러 Python 버전의 빌드를 나란히 유지해야 할 때 유용할 수 있습니다.

EM_COMPILER_WRAPPER 환경 변수를 설정하여 Emscripten 빌드에 ccache를 활성화할 수 있습니다(필수는 아닙니다):

export EM_COMPILER_WRAPPER=ccache

Emscripten용 CPython 디버그 빌드를 만들려면 다음을 사용하십시오:

python3 Platforms/emscripten build all -- --with-pydebug

이 단일 명령은 빌드 Python과 Emscripten 빌드를 각각 cross-build/buildcross-build/wasm32-emscripten/build/python/에 구성하고 빌드합니다.

Platforms/emscripten 스크립트에는 Emscripten 빌드의 각 부분을 세밀하게 실행할 수 있는 여러 진입점이 있습니다. 자세한 내용은 python3 Platforms/emscripten --help를 실행하여 확인하십시오.

빌드가 완료되면 다음을 사용하여 Python 코드를 실행할 수 있습니다:

python3 Platforms/emscripten run ./path/to/script.py

다음을 사용하여 CPython 테스트 스위트를 실행할 수 있습니다:

python3 Platforms/emscripten run --test

생성된 빌드를 실행하는 방법(Node.js 및/또는 웹 브라우저 사용)에 관한 추가 지침은 CPython 저장소의 Platforms/emscripten/README.md에서 확인할 수 있습니다.

Android

Android 빌드 및 테스트 지침은 CPython 저장소의 Platforms/Android/README.md에서 관리됩니다.

iOS

iOS용 Python을 컴파일하려면 최신 버전의 macOS와 최신 버전의 Xcode를 실행하는 macOS 시스템이 필요합니다. Apple은 개발자가 운영 체제와 도구를 최신 상태로 유지하기를 기대합니다. macOS 버전이 최신 메이저 릴리스보다 한 버전을 넘게 뒤처져 있거나 Xcode 버전이 최신 마이너 릴리스보다 두어 버전을 넘게 뒤처져 있다면 문제가 발생할 가능성이 높습니다. Windows 또는 Linux 시스템을 빌드 시스템으로 사용하여 iOS용으로 컴파일하는 것은 불가능합니다.

iOS용 Python을 완전히 빌드하려면 CPython을 네 번 컴파일해야 합니다. macOS용으로 한 번 컴파일한 다음, iOS에서 사용하는 다음 세 기반 플랫폼 각각에 대해 한 번씩 컴파일해야 합니다:

  • ARM64 장치(iPhone 또는 iPad);

  • 최신 macOS 시스템에서 실행되는 ARM64 시뮬레이터; 그리고

  • 이전 macOS 시스템에서 실행되는 x86_64 시뮬레이터입니다.

Python을 빌드하려면 기존 Python 3 인터프리터가 필요합니다. CPython 코드 체크아웃의 루트에서 다음을 실행하십시오:

$ python3 Platforms/Apple build iOS all
$ python3 Apple build iOS all

Python 3.13에서는 각 플랫폼에 대해 configuremake를 명시적으로 호출해야 합니다. 예를 들어 ARM64 시뮬레이터용으로 빌드하려면 다음을 실행하십시오:

$ export PATH="$(pwd)/iOS/Resources/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin"
$ ./configure \
      LIBLZMA_CFLAGS="-Ipath/to/xz/include" \
      LIBLZMA_LIBS="-Lpath/to/xz/lib -llzma" \
      BZIP2_CFLAGS="-Ipath/to/bzip2/include" \
      BZIP2_LIBS="-Lpath/to/bzip2/lib -lbz2" \
      LIBFFI_CFLAGS="-Ipath/to/libffi/include" \
      LIBFFI_LIBS="-Lpath/to/libffi/lib -lffi" \
      --with-openssl="path/to/openssl" \
      --host=arm64-apple-ios-simulator \
      --build=arm64-apple-darwin \
      --with-build-python=path/to/python3.13 \
      --enable-framework
$ make -j4 all
$ make install

--host 인자는 arm64-apple-ios-simulator, x64_64-apple-ios-simulator 또는 arm64-apple-ios중 하나여야 합니다. ARM64 macOS 바이너리가 iOS 프로젝트에 의도치 않게 링크되는 것을 방지하려면 PATH를 최소한으로 유지해야 합니다. 미리 컴파일된 바이너리 의존성의 경로를 지정해야 합니다.

각 아키텍처용 Apple 프레임워크를 빌드한 후에는 XCframework를 수동으로 구성해야 합니다.

그러면 다음을 수행합니다:

  1. macOS에서 실행할 수 있는 Python 복사본(“빌드” Python)을 빌드합니다;

  2. CPython의 의존성(예: libFFIxz)에 대한 미리 컴파일된 바이너리를 다운로드합니다.

  3. 지원되는 각 iOS 아키텍처(x86_64 시뮬레이터, ARM64 시뮬레이터 및 ARM64 장치)용 Python 복사본을 빌드합니다; 그리고

  4. iOS용 릴리스 산출물을 생성합니다.

이 빌드가 완료되면 cross-build/iOS 폴더에는 Python.xcframework가 포함되고, cross-build/dist 폴더에는 릴리스 tarball이 포함됩니다.

iOS에서 테스트 스위트를 실행하려면 다음을 실행하십시오:

$ python3 Platforms/Apple test iOS
$ python3 Apple test iOS
$ make testios

전체 테스트 스위트를 2022년형 M1 MacBook Pro에서 실행하는 데 약 12분이 걸리며, 테스트베드 애플리케이션을 빌드하고 시뮬레이터를 부팅하는 데 몇 분이 더 걸립니다. 테스트 과정에서 iOS 시뮬레이터가 나타납니다. 시뮬레이터가 iOS 시작 화면으로 부팅되고 테스트베드 앱이 설치된 다음 실행됩니다. 테스트 스위트가 실행되는 동안 시뮬레이터 화면은 검은색으로 표시됩니다. 테스트 스위트가 완료되면 성공 또는 실패 여부가 명령줄에 보고됩니다.

두 가지 환경 변수를 사용하여 Apple 빌드 스크립트의 동작을 구성할 수 있습니다.

  • CACHE_DIR는 미리 컴파일된 libFFIxz 바이너리와 같은 다운로드된 산출물이 저장될 위치를 정의합니다.

  • CROSS_BUILD_DIR은 빌드에 사용될 cross-build 디렉터리의 이름을 정의합니다. 여러 버전의 Python 빌드를 유지해야 하는 경우 유용할 수 있습니다.

Platforms/Apple 스크립트에는 iOS 빌드의 각 부분을 세밀하게 실행할 수 있는 여러 진입점이 있습니다. 자세한 내용은 python3 Platforms/Apple --help를 실행하여 확인하십시오.

Xcode 자체에서도 테스트 스위트를 실행할 수 있습니다. 물리적 장치에서 실행하려면 이 방법이 필요합니다. 자세한 내용은 iOS README를 참조하십시오.

의존성 설치

이 절에서는 CPython의 일부 모듈(예: zlib)을 컴파일하는 데 필요한 라이브러리를 설치하는 방법을 설명합니다.

Unix 기반 시스템에서는 가능하면 항상 시스템 라이브러리를 사용하려고 합니다. 즉, 관련 시스템 헤더가 있는 경우에만 선택적 구성 요소가 빌드됩니다. 이러한 헤더를 구하는 가장 좋은 방법은 배포판마다 다르지만, 몇 가지 널리 사용되는 배포판의 명령은 아래에 나와 있습니다.

Fedora, RHEL, CentOS 및 기타 dnf 기반 시스템에서:

$ sudo dnf install git pkg-config
$ sudo dnf install dnf-plugins-core  # install this to use 'dnf builddep'
$ sudo dnf builddep python3

일부 선택적 개발 의존성은 위 내용에 포함되어 있지 않습니다. 선택적 빌드 및 테스트 구성 요소를 위한 추가 종속성을 설치하려면:

$ sudo dnf install \
      gcc gcc-c++ gdb lzma glibc-devel libstdc++-devel openssl-devel \
      readline-devel zlib-devel libzstd-devel libffi-devel bzip2-devel \
      xz-devel sqlite sqlite-devel sqlite-libs libuuid-devel gdbm-libs \
      perf expat expat-devel mpdecimal python3-pip

Debian, Ubuntu 및 기타 apt 기반 시스템에서는 apt 명령을 사용하여 작업 중인 Python의 종속성을 구해 보십시오.

먼저 소스 목록에서 소스 패키지가 활성화되어 있는지 확인하십시오. 소스 패키지의 위치는 사용하는 릴리스에 따라 다릅니다.

Ubuntu 24.04 이상 및 deb822 형식을 사용하는 기타 릴리스에서는 소스가 /etc/apt/sources.list.d/ubuntu.sources에 있습니다. 소스를 가져오려는 항목의 Types 필드에 deb-src를 추가하십시오.:

$ sudo nano /etc/apt/sources.list.d/ubuntu.sources

다음을:

Types: deb

다음으로 변경하십시오.:

Types: deb deb-src

Ubuntu 22.04 및 한 줄 형식을 사용하는 기타 릴리스에서는 URL, 배포판 이름, 구성 요소 이름을 포함한 소스 패키지의 위치를 /etc/apt/sources.list에 추가하십시오. Ubuntu 22.04 LTS(Jammy Jellyfish)를 예로 들면:

$ deb-src http://archive.ubuntu.com/ubuntu/ jammy main

또는 편집기를 사용하여 deb-src가 있는 줄의 주석을 해제하십시오. 예를 들면 다음과 같습니다.:

$ sudo nano /etc/apt/sources.list

Debian과 같은 다른 배포판에서는 해당 배포판에 맞도록 URL과 이름을 변경하십시오.

그런 다음 패키지 색인을 업데이트하십시오.:

$ sudo apt-get update

이제 apt를 통해 빌드 의존성을 설치할 수 있습니다.:

$ sudo apt-get build-dep python3
$ sudo apt-get install pkg-config

모든 선택적 모듈을 빌드하려면 다음 패키지와 그 의존성을 설치하십시오.:

$ sudo apt-get install build-essential gdb lcov pkg-config \
      libbz2-dev libffi-dev libgdbm-dev libgdbm-compat-dev liblzma-dev \
      libncurses5-dev libreadline6-dev libsqlite3-dev libssl-dev \
      lzma lzma-dev tk-dev uuid-dev zlib1g-dev libmpdec-dev libzstd-dev \
      inetutils-inetd

Debian 12와 Ubuntu 24.04에는 libmpdec-dev 패키지가 없다는 점에 유의하십시오. 위 설치 목록에서 이 패키지를 제거해도 안전하며, Python 빌드에서는 번들 버전을 사용합니다. 하지만 시스템의 libmpdec 라이브러리를 사용하는 것이 좋습니다. 소스에서 직접 빌드하거나 https://deb.sury.org에서 이 패키지를 설치하십시오.

macOS 시스템 (버전 10.9 이상)에서는 개발자 도구를 자동으로 다운로드하고 설치할 수 있으므로 전체 Xcode 애플리케이션을 다운로드할 필요가 없습니다.

필요한 경우 다음을 실행하십시오.:

$ xcode-select --install

이렇게 하면 시스템 헤더 파일도 /usr/include에 설치됩니다.

또한 macOS에는 libzma 등 Python 표준 라이브러리에서 사용하는 여러 라이브러리가 포함되어 있지 않으므로, 해당 라이브러리의 로컬 복사본을 설치하지 않으면 일부 확장 모듈 빌드가 실패할 수 있습니다. OS X 10.11부터 Apple은 지원 중단 예정인 시스템 버전 OpenSSL의 헤더 파일을 더 이상 제공하지 않으므로 _ssl 확장을 빌드할 수 없습니다. 한 가지 해결책은 Homebrew 또는 MacPorts 같은 타사 패키지 관리자에서 이러한 라이브러리를 설치한 다음, 헤더 및 라이브러리 파일의 적절한 경로를 configure 명령에 추가하는 것입니다.

Homebrew의 경우 brew를 사용하여 종속성을 설치하십시오.:

$ brew bundle --file=Misc/Brewfile

Python 3.11 이상:

$ GDBM_CFLAGS="-I$(brew --prefix gdbm)/include" \
   GDBM_LIBS="-L$(brew --prefix gdbm)/lib -lgdbm" \
   ./configure --config-cache \
               --with-pydebug \
               --with-openssl="$(brew --prefix openssl@3)"

Python 3.10:

$ CPPFLAGS="-I$(brew --prefix gdbm)/include -I$(brew --prefix xz)/include" \
   LDFLAGS="-L$(brew --prefix gdbm)/lib -L$(brew --prefix xz)/lib" \
   ./configure --config-cache \
               --with-pydebug \
               --with-openssl="$(brew --prefix openssl@3)" \
               --with-tcltk-libs="$(pkg-config --libs tcl tk)" \
               --with-tcltk-includes="$(pkg-config --cflags tcl tk)" \
               --with-dbmliborder=gdbm:ndbm

(--with-dbmlibordergdbm에 대한 Homebrew 고유의 변경 사항을 우회하기 위한 해결책입니다. 자세한 내용은 #89452를 참조하십시오.)

MacPorts의 경우 port를 사용하여 종속성을 설치하십시오.:

$ sudo port install pkgconfig openssl xz gdbm tk +quartz mpdecimal zstd

Python 3.13 이상:

$ GDBM_CFLAGS="-I$(dirname $(dirname $(which port)))/include" \
   GDBM_LIBS="-L$(dirname $(dirname $(which port)))/lib -lgdbm" \
   ./configure --config-cache \
               --with-pydebug \
               --with-system-libmpdec

Python 3.11 및 3.12:

$ GDBM_CFLAGS="-I$(dirname $(dirname $(which port)))/include" \
   GDBM_LIBS="-L$(dirname $(dirname $(which port)))/lib -lgdbm" \
   ./configure --config-cache \
               --with-pydebug

마지막으로 make를 실행하십시오.:

$ make -s -j8

새 릴리스에 선택적 모듈이 추가되었지만 아직 운영 체제 수준의 빌드 의존성에 반영되지 않은 경우가 있습니다. 이러한 경우에는 DiscourseCore Development 범주에서 도움을 요청하십시오.

루트 접근 권한 없이 Unix 기반 시스템에서 선택적 의존성을 빌드하는 방법은 이 가이드의 범위를 벗어납니다.

빌드와 관련된 다양한 옵션 및 고려 사항에 대한 자세한 내용은 macOS README를 참조하십시오.

참고

CPython을 빌드하려면 C 컴파일러가 필요하지만, 기여하는 데에는 어떠한 C 언어 지식도 필요하지 않습니다! CPython의 방대한 영역은 전적으로 Python으로 작성되어 있습니다. 이 글을 작성하는 시점에는 CPython에 C 코드보다 Python 코드가 약간 더 많습니다.

Windows에서는 확장 모듈이 이미 포함되어 있으며 자동으로 빌드됩니다.

BeeWare 프로젝트는 Android 의존성 빌드 스크립트를 유지 관리하며, 각 의존성에 대한 사전 컴파일된 Android 바이너리를 배포합니다. 이러한 바이너리는 자동으로 다운로드되어 Platforms/Android의 CPython 빌드 스크립트에서 사용됩니다.

BeeWare 프로젝트는 iOS 의존성 빌드 스크립트를 유지 관리하며, 각 의존성에 대한 사전 컴파일된 iOS 바이너리를 배포합니다. 이러한 바이너리는 Platforms/Apple의 CPython 빌드 스크립트에서 자동으로 다운로드되어 사용됩니다.

Python 3.13용으로 빌드하는 경우 이러한 바이너리를 직접 다운로드하여 설치하고, configure 호출 시 바이너리 경로를 제공해야 합니다.

configure 재생성

새로운 시스템 호출을 사용하는 경우와 같이 일부 POSIX 시스템별 기능에 의존하는 변경 사항이 Python에 적용되면, 해당 기능의 사용 가능 여부를 검사하도록 configure 스크립트를 업데이트해야 합니다. Python의 configure 스크립트는 GNU Autoconf를 사용하여 configure.ac에서 생성됩니다.

관련 configure.ac를 편집한 후 make regen-configure를 실행하여 configure, pyconfig.h.in, aclocal.m4를 생성하십시오. 관련 configure.ac를 변경한 풀 리퀘스트를 제출할 때는 생성된 파일의 변경 사항도 커밋해야 합니다.

Python의 configure.ac 스크립트에는 특정 버전의 GNU Autoconf가 필요합니다. Python 3.12 이상에는 GNU Autoconf v2.71이 필요합니다. Python 3.11 이하에는 GNU Autoconf v2.69가 필요합니다.

관련 configure를 재생성하는 데 권장되며 단연 가장 쉬운 방법은 다음과 같습니다.:

$ make regen-configure

이 방법은 적절한 버전의 GNU Autoconf와 함께 Podman 또는 Docker를 사용하여 재생성을 수행합니다.

make regen-configure를 사용할 수 없거나 사용하고 싶지 않다면 autoconf-archivepkg-config 유틸리티를 설치하고, pkg.m4 매크로 파일이 적절한 aclocal 위치에 있는지 확인하십시오.:

$ ls $(aclocal --print-ac-dir) | grep pkg.m4

참고

관련 autoreconf를 실행하는 것은 autoconf를 실행하는 것과 같지 않습니다. 예를 들어 autoconf만 실행하면 pyconfig.h.in이 재생성되지 않습니다. autoreconf는 필요에 따라 autoconf와 여러 다른 도구를 반복해서 실행합니다.

ABI 덤프 재생성

유지보수 브랜치(main 제외)에는 Doc/data/pythonX.Y.abi에 있는 특수 파일이 있으며, 이 파일을 통해 특정 풀 리퀘스트가 공개 ABI에 영향을 미치는지 확인할 수 있습니다. 이 파일은 GitHub CI에서 Check if the ABI has changed라는 검사에 사용되며, 특정 풀 리퀘스트에 ABI 변경 사항이 있는데 ABI 파일이 업데이트되지 않은 경우 이 검사가 실패합니다.

이 검사는 안전장치 역할을 하며 풀 리퀘스트를 병합할 수 없다는 의미는 아닙니다. 이 검사가 실패하면 담당 릴리스 관리자가 변경 사항을 인지하고 해당 변경이 가능한지 검증할 수 있도록 그들을 PR에 추가해야 합니다.

중요

첫 번째 릴리스 후보 이전에는 ABI 변경이 허용됩니다. 첫 번째 릴리스 후보 이후의 모든 릴리스는 네이티브 확장 및 Python 인터프리터와 상호 작용하는 기타 도구와의 호환성을 보장하기 위해 동일한 ABI를 유지해야 합니다. 관련 릴리스 후보 단계에 관한 문서를 참조하십시오.

PR 검사가 실패하면 관련 실행에 업데이트된 ABI 파일이 아티팩트로 첨부됩니다. 릴리스 관리자의 승인을 받은 후 이 파일을 다운로드하여 PR에 추가하면 검사를 통과할 수 있습니다.

regen abidump Make 타깃을 호출하여 ABI 파일을 직접 재생성할 수 있습니다. 이 작업을 수행하려면 GitHub CI가 ABI 파일을 검사할 때 사용하는 것과 동일한 환경에서 ABI 파일을 재생성해야 합니다. 플랫폼마다 일부 플랫폼별 세부 정보가 포함될 수 있어 Python ABI가 동일하더라도 검사가 실패할 수 있기 때문입니다. CI와 동일한 플랫폼을 사용하여 ABI 파일을 재생성하는 더 쉬운 방법은 Docker를 사용하는 것입니다.:

# In the CPython root:
$ docker run -v$(pwd):/src:Z -w /src --rm -it ubuntu:22.04 \
    bash /src/.github/workflows/regen-abidump.sh

스크립트를 실행하는 데 사용되는 ubuntu 버전은 중요하며, ABI를 검사할 때 CI가 사용하는 버전과 반드시 일치해야 합니다. 자세한 내용은 .github/workflows/build.yml 파일을 참조하십시오.

빌드 문제 해결

이 절에서는 Python을 컴파일하는 동안 발생할 수 있는 몇 가지 일반적인 문제와 제안된 해결 방법을 나열합니다.

자동 생성 파일 다시 만들기 방지

일부 상황에서는 make를 실행하는 동안 Parser/asdl_c.py 또는 Python/makeopcodetargets.py 같은 스크립트에서 Python 오류가 발생할 수 있습니다. Python은 자체 코드 일부를 자동 생성하며, 처음부터 전체 빌드를 수행하려면 자동 생성 스크립트를 실행해야 합니다. 그러나 이로 인해 Python을 빌드하려면 이미 설치된 Python 인터프리터가 필요하며, 새로운(3.x) Python이 설치된 상태에서 이전(2.x) Python을 빌드하려고 하거나 그 반대의 경우에도 버전 불일치가 발생할 수 있습니다.

이 문제를 해결하기 위해 자동 생성된 파일도 Git 저장소에 체크인됩니다. 따라서 자동 생성 스크립트를 건드리지 않는다면 실제로 어떤 것도 자동 생성할 필요가 없습니다.

편집기와 도구

Python은 매우 널리 사용되므로 사실상 모든 코드 편집기가 어떤 형태로든 Python 코드 작성 기능을 지원합니다. 다양한 코딩 도구도 Python을 지원합니다.

코어 개발자들이 Python 내에서 코딩할 때 특별한 설명이 필요하다고 판단한 편집기와 도구에 대해서는 추가 자료를 참조하십시오.

디렉터리 구조

CPython 소스 트리에는 여러 개의 최상위 디렉터리가 있습니다. 각 디렉터리에 무엇이 들어가도록 되어 있는지 알면 특정 기능이 어디에 구현되어 있는지 찾는 데 도움이 됩니다. 다만 모든 규칙에는 항상 예외가 있다는 점을 알아두십시오.

Doc

공식 문서입니다. https://docs.python.org/ 에서 사용하는 문서입니다. 관련 문서 빌드하기도 참조하십시오.

Grammar

Python용 PEG(Parser Expression Grammar) 문법 파일이 들어 있습니다.

Include

인터프리터 전체에서 사용하는 모든 헤더 파일이 들어 있습니다.

Lib

순수 Python으로 구현된 표준 라이브러리 부분입니다.

Mac

Mac 전용 코드입니다(예: IDLE을 macOS 애플리케이션으로 사용).

Misc

다른 곳에 속하지 않는 항목이 들어 있습니다. 일반적으로 다양한 종류의 개발자 전용 문서입니다.

Modules

C로 구현된 표준 라이브러리 부분과 일부 기타 코드입니다.

Objects

모든 내장 타입을 위한 코드입니다.

PC

Windows 전용 코드입니다.

PCbuild

python.org에서 제공하는 Windows 설치 프로그램에 현재 사용되는 MSVC 버전용 빌드 파일입니다.

Parser

파서 관련 코드입니다. AST 노드의 정의도 여기에 보관됩니다.

Programs

CPython 인터프리터의 main 함수를 포함한 C 실행 파일용 소스 코드입니다.

Python

핵심 CPython 런타임을 구성하는 코드입니다. 여기에는 컴파일러, eval 루프 및 다양한 내장 모듈이 포함됩니다.

Tools

Python을 유지 관리하는 데 사용되거나 과거에 사용되었던 다양한 도구입니다.

컨테이너 사용하기

컴퓨터에 추가 도구를 설치하지 않고 컨테이너를 사용하여 CPython을 빌드하는 방법은 다양합니다. 모든 접근 방식은 어떤 식으로든 cpython-devcontainers repo에 정의된 컨테이너를 사용합니다.

GitHub Codespaces를 사용하여 기여하기

GitHub Codespaces란 무엇입니까?

로컬 개발 환경을 설정하지 않고 CPython에 기여하기 시작하려면 GitHub Codespaces를 사용할 수 있습니다. Codespaces는 GitHub에서 제공하는 클라우드 기반 개발 환경으로, 개발자가 웹 브라우저나 Visual Studio Code(VS Code)에서 직접 코드를 작성하고 빌드하고 테스트하고 디버그할 수 있도록 합니다.

시작하는 데 도움이 되도록 CPython에는 프로젝트의 모든 사용자에게 일관되고 버전이 지정된 codespace 구성을 제공하는 JSON 구성 파일이 포함된 devcontainer 폴더가 있습니다. 또한 동일한 환경을 로컬 Docker 컨테이너에 설정할 수 있는 Dockerfile도 포함되어 있으므로, 원하는 경우 이를 직접 사용할 수 있습니다.

CPython codespace 만들기

다음은 Codespaces를 사용하여 풀 리퀘스트에 기여하는 데 필요한 기본 단계입니다. 먼저 GitHub에서 호스팅되는 CPython 저장소로 이동해야 합니다.

그런 다음 다음 단계를 수행해야 합니다.

  1. codespace 시작하기

    • 현재 브랜치의 codespace 설정 화면을 열려면 , 키를 누르십시오.

      • 기본 dev 컨테이너(대부분의 경우 원하는 옵션)의 경우 녹색 Create new codespace 버튼을 클릭하십시오.

      • 다른 컨테이너를 사용하려면 Change options를 클릭하고 적절한 컨테이너를 선택하십시오.

    • 또는 녹색 Code 버튼을 클릭하고 codespaces 탭을 선택하십시오.

      • 기본 개발 컨테이너(대부분의 경우 원하는 옵션)를 사용하려면 초록색 Create codespace on main 버튼을 클릭하십시오.

      • 다른 컨테이너를 사용하려면 메뉴로 이동하여 New with options…를 선택하십시오.

  2. 코드스페이스를 설정하고 있음을 알리는 화면이 나타납니다. (참고: CPython 개발 컨테이너가 제공되므로 코드스페이스에서는 이 컨테이너가 지정한 구성을 사용합니다.)

  3. VS Code 웹 버전이 웹 브라우저에서 열리며, 코드 및 CPython과 해당 문서가 이미 빌드된 원격 코드스페이스의 터미널에 연결되어 있습니다.

  4. 준비가 되면 터미널에서 일반적인 Git 명령을 사용하여 새 브랜치를 만들고 변경 사항을 커밋한 후 푸시하십시오!

저장소를 닫았다가 나중에 돌아오더라도 CPython 저장소로 이동하여 코드스페이스 탭을 선택한 다음 가장 최근의 코드스페이스 세션을 선택하면 언제든지 코드스페이스를 재개할 수 있습니다. 그러면 중단했던 지점부터 작업을 계속할 수 있습니다!

로컬에서 Codespaces 사용하기

코드스페이스 화면의 왼쪽 하단에 Codespaces라고 표시된 초록색 또는 회색 사각형이 있습니다. 이를 클릭하면 추가 옵션을 볼 수 있습니다. 로컬에 설치된 VS Code에서 작업하려면 Open in VS Code 옵션을 선택할 수 있습니다. 작업은 계속 원격 코드스페이스 인스턴스에서 수행되므로 원격 인스턴스의 컴퓨팅 성능을 사용하게 됩니다. 이 컴퓨팅 성능은 로컬 컴퓨터보다 사양이 훨씬 높을 수 있으므로 유용합니다.

개발 컨테이너 직접 사용하기

환경을 더 세밀하게 제어하거나 오프라인에서 작업하려면 GitHub Codespaces에서 사용하는 것과 동일한 컨테이너를 직접 사용할 수 있습니다. 이 방법은 컨테이너 사용 경험이 있거나 그러한 경험을 쌓고자 하는 사용자를 위한 것입니다. 이 지침에서는 Docker 또는 Podman이 설치된 Unix 계열 환경을 사용한다고 가정합니다. 또한 기본 개발 컨테이너를 사용하려 한다고 가정합니다. 다른 컨테이너(예: WASI 개발 컨테이너)를 사용하려면 명령을 적절히 조정하십시오.

미리 빌드된 컨테이너 이미지 사용하기

개발 컨테이너 이미지Python 조직용 GitHub Container Registry(GHCR) 계정에서 제공됩니다.

컨테이너를 실행하고 Bash 셸을 시작하려면 CPython 저장소의 복제본에서 다음 명령 중 하나를 실행하십시오.

podman run -it --rm --volume $PWD:/workspace:Z --workdir /workspace ghcr.io/python/devcontainer:latest
docker run -it --rm --volume $PWD:/workspace --workdir /workspace ghcr.io/python/devcontainer:latest

컨테이너에 작업 디렉터리에 대한 읽기/쓰기 권한이 있다는 점에 유의하십시오. CPython의 별도 복제본을 사용하거나 make clean을 실행하여 호스트 OS용으로 생성된 캐시와 빌드 결과물을 제거하는 것이 좋습니다.

직접 빌드하기

원한다면 컨테이너 이미지를 직접 빌드할 수 있습니다. cpython-devcontainers repo 복제본에서 컨테이너를 빌드하고 이름을 cpython-dev로 지정하십시오.

podman build devcontainer/ --tag cpython-dev
docker build devcontainer/ --tag cpython-dev

같은 명령은 기존의 모든 cpython-dev 컨테이너를 업데이트합니다. 이 명령을 가끔 다시 실행하십시오 – 특히 컨테이너가 더 이상 제대로 작동하지 않을 때 실행하십시오.

컨테이너를 실행하고 Bash 셸을 시작하려면 CPython 저장소의 복제본에서 다음 명령 중 하나를 실행하십시오.

podman run -it --rm --volume $PWD:/workspace:Z --workdir /workspace cpython-dev bash
docker run -it --rm --volume $PWD:/workspace --workdir /workspace cpython-dev bash

GHCR의 컨테이너 이미지에서 실행할 때 위에서 설명한 것과 동일한 주의 사항이 여기에도 적용됩니다.