웹에서 Python 실행 및 디버그
웹에서 Python 코드를 실행하는 실험적 지원을 발표하게 되어 기쁩니다. 이를 시도해 보려면 Marketplace에서 Experimental - Python for the Web 확장 프로그램의 최신 미리 보기 버전을 설치하세요. 이 작업은 현재 개발 중인 Python의 WASM을 기반으로 합니다. 작동 방식과 진행 상황에 대해 자세히 알아보려면 Python을 WebAssembly(WASM)로 컴파일을 읽어보세요.
전제 조건
확장 프로그램을 사용하려면 다음 전제 조건이 필요합니다.
- GitHub Repositories 확장 프로그램이 설치되어 있어야 합니다.
- GitHub에 인증해야 합니다.
- 교차 출처 격리를 지원하는 브라우저를 사용해야 합니다. 이 확장 프로그램은 Microsoft Edge 및 Google Chrome 브라우저에서 테스트되었습니다.
- 웹용 VS Code의 인사이더 버전을 사용해야 합니다 (예:
https://insiders.vscode.dev/). - 소스 코드는 로컬 파일 시스템 또는 GitHub Repositories 확장 프로그램을 통해 액세스되는 GitHub 리포지토리에 호스팅되어야 합니다.
- 웹용 VS Code를 시작할 때 URL 끝에 다음 쿼리 매개변수를 추가해야 합니다:
?vscode-coi=.
Hello World 실행
아래 스크린샷은 브라우저에서 간단한 Python 프로그램의 실행을 보여줍니다. 프로그램은 로컬 파일 시스템에 저장된 app.py 및 hello.py 두 개의 파일로 구성됩니다.

REPL 시작
이 확장 프로그램에는 통합 Python REPL이 제공됩니다. 활성화하려면 Python WASM: Start REPL 명령을 실행하십시오.

디버깅
웹에서 Python 파일을 디버깅하기 위한 지원이 있으며 VS Code 데스크톱 디버깅과 동일한 UI를 사용합니다. 현재 지원되는 기능은 다음과 같습니다.
- 중단점 설정
- 함수 안팎으로 단계별 실행
- 모듈 간 디버깅
- 디버그 콘솔에서 변수 평가
- 통합 터미널에서 프로그램 디버그
아래 스크린샷은 활성 디버그 세션을 보여줍니다. 파일은 이 샘플 리포지토리의 GitHub에 직접 호스팅됩니다.

자신만의 Python 환경 만들기
이 확장 프로그램은 CPython WebAssembly 빌드를 기반으로 사전 구성된 Python 환경을 사용합니다. 사용된 빌드는 Python-3.11.0-wasm32-wasi-16.zip입니다.
다음 단계를 따라 소스 휠 Python 패키지를 포함한 자체 Python 환경을 만들 수 있습니다.
-
새 GitHub 리포지토리를 만듭니다.
-
cpython-wasm-test/releases에서 wasm-wasi-16 빌드를 다운로드하고 리포지토리 루트로 압축을 풉니다.
-
소스 휠 패키지를 추가하려면 다음을 수행하십시오.
- 루트에
site-packages폴더를 만듭니다. - 다음 명령
pip install my_package --target ./site-packages를 사용하여 패키지를 설치합니다. 운영 체제에 pip를 포함한 Python 설치가 필요합니다.
- 루트에
-
변경 사항을 커밋합니다.
-
python.wasm.runtime설정을 GitHub 리포지토리를 가리키도록 변경합니다. 예:{ "python.wasm.runtime": "https://github.com/dbaeumer/python-3.11.0" }
제한 사항
웹용 Python 지원은 로컬 컴퓨터에서 소스 코드를 실행할 때 사용할 수 있는 모든 기능을 제공하지는 않습니다. Python 인터프리터의 주요 제한 사항은 다음과 같습니다.
- 소켓 지원 없음.
- 스레드 지원 없음. 결과적으로 비동기 지원도 없습니다.
- pip 지원 없음.
- 기본 Python 모듈에 대한 지원 없음.
감사의 말씀
이 작업은 CPython의 필요한 WASM 파일을 구축하고 유지 관리하는 Python 커뮤니티의 지원 없이는 불가능했을 것입니다.
피드백
웹용 Python 확장 프로그램을 사용하는 동안 문제가 발생하는 경우 vscode-python-web-wasm 리포지토리에 이슈를 등록할 수 있습니다.