Python Sandbox
Chạy Python 3 trong trình duyệt qua Pyodide (CPython trên WebAssembly). Đầy đủ stdlib, pip qua micropip, phiên persistent, offline sau lần tải đầu.
Python Sandbox - Chạy Code Python Trực Tuyến Miễn Phí
Python là ngôn ngữ lập trình được dạy nhiều nhất thế giới và công cụ chủ đạo của khoa học dữ liệu, machine learning, tính toán khoa học, scripting hệ thống, và back-end web nhanh — nhưng mọi người mới đều dành giờ đầu vật lộn với cài đặt cục bộ: trình thông dịch nào (Python hệ thống, Anaconda, pyenv?), chiến lược venv nào, IDE nào, pip nằm đâu. Sandbox này bỏ qua tất cả. Toàn bộ trình thông dịch CPython đã được biên dịch sang WebAssembly bởi dự án Pyodide của Mozilla Foundation (dùng trong JupyterLite, tài liệu Pandas, và hàng chục nền tảng giáo dục) và tải trực tiếp vào tab trình duyệt của bạn. Sau lần tải xuống một lần khoảng 6 MB lần đầu, mọi lần chạy sau đều tức thì và hoạt động hoàn toàn offline. Bạn có Python 3.11+ với thư viện chuẩn đầy đủ — os, sys, math, json, datetime, re, collections, itertools, functools, statistics, random — cộng tùy chọn tải NumPy, Pandas, SciPy, Matplotlib, scikit-learn, sympy và các gói khoa học dữ liệu nặng khác theo yêu cầu qua micropip. Ngữ cảnh thực thi tồn tại giữa các lần chạy (định nghĩa hàm, rồi gọi sau mà không cần định nghĩa lại), hệ thống tập tin là ảo trong trình duyệt, và những thứ duy nhất không hoạt động là gọi mạng (urllib/requests/socket), bộ công cụ GUI native (Tkinter, PyQt), và các gói với phần mở rộng C chưa port sang WASM.
Python Sandbox là gì?
Python Sandbox là trình thông dịch Python trực tuyến chạy hoàn toàn trong trình duyệt của bạn. Nó sử dụng Pyodide - CPython được biên dịch thành WebAssembly, cho phép bạn:
- Chạy code Python mà không cần cài đặt
- Test code snippets ngay lập tức
- Học Python một cách tương tác
- Debug và thử nghiệm code
- Hoạt động offline sau khi load lần đầu
Sandbox hỗ trợ hầu hết tính năng Python 3.x và các module thư viện chuẩn.
Làm thế nào để sử dụng Python Sandbox?
Sử dụng Python Sandbox rất đơn giản:
1. Đợi môi trường Python tải xong (chỉ lần đầu)
2. Viết hoặc paste code Python vào editor
3. Nhấp 'Chạy Code' để thực thi
4. Xem kết quả trong console bên dưới
5. Dùng 'Xóa' để reset editor
6. Thử các code mẫu để học Python cơ bản
Môi trường được giữ nguyên giữa các lần chạy, nên biến và hàm vẫn có sẵn trừ khi bạn reset.
Python Sandbox hỗ trợ những tính năng gì?
Sandbox hỗ trợ hầu hết tính năng Python 3.x:
- Tất cả cú pháp Python cơ bản (biến, vòng lặp, điều kiện)
- Hàm và class
- Thao tác List, dict, set, tuple
- Xử lý và định dạng chuỗi
- File I/O (hệ thống file ảo)
- Hầu hết module thư viện chuẩn
- Xử lý exception
- Decorators và generators
- List comprehensions
Một số hạn chế:
- Không có network requests (fetch, urllib)
- Không có thư viện GUI (tkinter, pygame)
- Hỗ trợ threading hạn chế
- Một số module C-extension có thể không hoạt động
Code của tôi có an toàn và riêng tư không?
Có, code của bạn hoàn toàn an toàn và riêng tư:
- Tất cả code chỉ chạy trong trình duyệt của bạn
- Không có code nào được gửi đến server
- Không ghi log hay theo dõi code của bạn
- Hoạt động hoàn toàn offline sau khi load lần đầu
- Code được sandbox hóa và không thể truy cập hệ thống
Môi trường Pyodide được cô lập và bảo mật, chạy trong WebAssembly sandbox.
Tôi có thể cài đặt package Python không?
Sandbox đi kèm nhiều package phổ biến đã cài sẵn. Tuy nhiên, cài thêm package qua pip có hạn chế:
- Nhiều package Python thuần hoạt động
- Package có C extensions có thể không hoạt động
- Dùng micropip để cài package
Ví dụ:
import micropip
await micropip.install('tên-package')
Lưu ý: Không phải tất cả package PyPI tương thích với Pyodide.
Vì sao requests.get() hay urllib của tôi lỗi không có internet?
Vì Pyodide chạy bên trong sandbox WebAssembly của trình duyệt, theo thiết kế KHÔNG có truy cập trực tiếp socket mạng. Thư viện 'requests' và urllib được xây trên socket TCP thô, mà sandbox không expose. Hai cách khắc phục: (1) Dùng pyodide.http.pyfetch, gói API fetch() native của trình duyệt và hoạt động với HTTP/HTTPS. Thay 'requests.get(url).json()' bằng 'await pyodide.http.pyfetch(url).then(r => r.json())' (trong ngữ cảnh async). (2) Cài gói patch aiohttp-wasm hoặc 'pyodide-http' để patch requests điều hướng qua fetch ngầm. Server từ xa vẫn cần gửi header CORS (Access-Control-Allow-Origin) nếu không trình duyệt sẽ chặn phản hồi — đây là quy tắc bảo mật trình duyệt, không phải giới hạn Pyodide. Cho thử nghiệm chỉ cục bộ, giả lập phản hồi API bằng dict và bỏ qua gọi HTTP hoàn toàn.

Tôi có thể dùng NumPy hay Pandas trong sandbox này không?
Có. Cả hai đều là gói Pyodide đã build sẵn và tải theo yêu cầu qua micropip — không cần bước biên dịch. Chạy đoạn này một lần trong code của bạn:
import micropip
await micropip.install(['numpy', 'pandas', 'matplotlib'])
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
Lần cài đầu tốn vài giây (tải ~10-20 MB binary biên dịch WASM) nhưng sau đó được cache mãi mãi. Sau đó, các thao tác array NumPy chạy với tốc độ gần native (NumPy của Pyodide thực sự nhanh), DataFrames Pandas hoạt động bình thường, và Matplotlib render SVG/PNG bạn có thể hiển thị qua plt.show() — hook display của Pyodide render ảnh trực tiếp vào panel output. Danh sách đầy đủ các gói khoa học pre-built bao gồm scipy, scikit-learn, sympy, statsmodels, networkx, pillow, beautifulsoup4, lxml, regex, và nhiều nữa. Xem pyodide.org/en/stable/usage/packages-in-pyodide.html để có chỉ mục đầy đủ.
Làm thế nào để đặt lại trình thông dịch hay xóa hết biến giữa các lần chạy?
Đây là điều khó chịu phổ biến nhất với mọi REPL có trạng thái bền: ngữ cảnh thực thi vẫn tồn tại giữa các lần chạy, nên một biến, hàm, import hay monkey-patch bạn định nghĩa trước đó vẫn còn sống ở lần chạy kế tiếp. Điều này là cố ý (giúp bạn xây dựng trạng thái một cách tương tác, giống hệt notebook Jupyter), nhưng cũng có nghĩa một biến toàn cục cũ có thể âm thầm làm sai lệch kết quả về sau. Nhấp 'Xóa' chỉ xóa nội dung editor — KHÔNG động đến không gian tên Python. Để có một khởi đầu thật sự sạch, hãy nhấp 'Đặt Lại Trình Thông Dịch': nó xóa mọi tên do người dùng định nghĩa khỏi globals(), thiết lập lại việc bắt stdout/stderr, và cho bạn không gian tên mới mà KHÔNG cần tải lại runtime Pyodide ~6 MB (nên tức thời, khác với tải lại trang). Bạn cũng có thể nhấn Ctrl+Enter (Cmd+Enter trên Mac) để chạy code trực tiếp từ bàn phím. Nếu muốn làm bằng code, chạy: for _n in list(globals()):
if not _n.startswith('__'): del globals()[_n] — nhưng nút bấm nhanh hơn và còn đặt lại cả bộ đệm kết quả.
Vì sao input() không hoạt động, và làm sao đọc stdin?
Tìm kiếm 'python input() not working online' đưa gần như mọi người tới đây. input() chuẩn của CPython chờ stdin từ terminal thật, thứ mà sandbox trình duyệt không cung cấp, nên một lệnh input() đơn giản sẽ báo lỗi hoặc treo. Có ba cách thực tế trong Pyodide: (1) Thay input() bằng hộp thoại prompt của trình duyệt — Pyodide định nghĩa lại builtin sao cho input('Tên bạn? ') bật một hộp prompt() JavaScript và trả về chuỗi đã nhập. Cách này hoạt động ngay với script đơn giản. (2) Với đầu vào nhiều dòng hoặc dạng pipe, hãy nạp sẵn dữ liệu trong code thay vì đọc tương tác: data = '''dong1\ndong2\ndong3'''.splitlines() rồi lặp qua. (3) Để kiểm thử code gọi input() nhiều lần, hãy vá builtin: traloi = iter(['An', '42']); import builtins; builtins.input = lambda prompt='': next(traloi). Cách này cấp các câu trả lời định sẵn mà không cần hộp thoại và là cách sạch nhất để demo hay kiểm thử script tương tác.
Tôi có thể tải lên một tệp, đọc nó hay tải về tệp do script tạo ra không?
Có — Pyodide cấp cho mỗi tab một hệ thống tệp ảo trong bộ nhớ (MEMFS) thực sự, nên open(), os.path, pathlib, csv, json và read_csv/to_csv của Pandas đều hoạt động bình thường với đường dẫn ảo. Để đưa tệp ngoài VÀO, hãy đọc nó trong JavaScript rồi ghi vào FS, hoặc dùng pyodide.FS.writeFile('/data.csv', bytes); sau đó trong Python chỉ cần open('/data.csv'). Để lấy tệp đã tạo RA, hãy ghi bình thường (open('out.csv','w') hoặc df.to_csv('out.csv')), rồi đọc bytes bằng pyodide.FS.readFile('out.csv') và kích hoạt tải về qua một Blob. Một luồng khoa học dữ liệu phổ biến: nạp CSV vào FS, chạy phân tích pandas, ghi CSV kết quả hoặc PNG Matplotlib, rồi tải về. Mọi thứ chỉ nằm trong bộ nhớ trình duyệt — không gì được tải lên máy chủ, và các tệp biến mất khi tải lại trang (dùng Đặt Lại Trình Thông Dịch để xóa trạng thái Python mà không xóa FS, hoặc tải lại trang để đặt lại hoàn toàn).
Code mẫu dùng để làm gì?
Code mẫu giúp bạn:
- Học Python cơ bản nhanh chóng
- Xem các mẫu code hoạt động
- Hiểu cú pháp Python
- Bắt đầu với các thao tác phổ biến
Các mẫu bao gồm:
- Hello World (print cơ bản)
- Vòng lặp (for, while)
- Hàm (định nghĩa và gọi)
- Lists và thao tác
- Dictionaries và cấu trúc dữ liệu
- Classes và lập trình hướng đối tượng
Nhấp vào bất kỳ mẫu nào để load vào editor và chạy!
Tính Năng Chính
- Chạy code Python 3.x trong trình duyệt
- Chạy tức thì từ bàn phím với Ctrl+Enter (Cmd+Enter trên Mac)
- Nút Đặt Lại Trình Thông Dịch cho không gian tên sạch mà không cần tải lại
- Biểu đồ Matplotlib hiển thị trực tiếp trong khung kết quả
- Không cần cài đặt hay đăng ký
- Thực thi code tức thì với output
- Syntax highlighting và code editor
- Nhiều code mẫu để học
- Thông báo lỗi và stack traces
- Theo dõi thời gian thực thi
- Tải code dưới dạng file .py
- Chức năng xóa và reset
- Hoạt động offline sau khi load lần đầu
- 100% client-side - code không rời khỏi trình duyệt
- Hỗ trợ chế độ tối
- Thiết kế responsive thân thiện mobile
- Được hỗ trợ bởi Pyodide (CPython trong WebAssembly)
