3 điểm bởi GN⁺ 2024-08-17 | 1 bình luận | Chia sẻ qua WhatsApp
  • PyScript là một nền tảng mã nguồn mở cho phép chạy mã Python trong trình duyệt, biến chính trang web thành môi trường thực thi Python
  • Nền tảng này nhấn mạnh việc kết hợp tính phổ quát của web với hệ sinh thái Python, để ở đâu có trình duyệt, ở đó có thể chạy Python
  • Vì ứng dụng chạy trong trình duyệt mà không cần cài đặt phức tạp, có thể tạo ứng dụng web bằng cú pháp dễ học của Python
  • Mã được thực thi trong trình duyệt của người dùng, giúp giảm gánh nặng hạ tầng tốn kém, và kết quả có thể được chia sẻ qua URL trên web
  • Hướng đến cả người mới bắt đầu lẫn người dùng nâng cao, với các đặc tính cốt lõi là dễ dùng, giàu khả năng biểu đạt, mở rộng tốt, dễ chia sẻ, phổ quát, an toàn và mạnh mẽ

Môi trường chạy Python trong trình duyệt

  • PyScript là một nền tảng mã nguồn mở để chạy Python trong trình duyệt
  • Có thể lấy ví dụ dạng chạy mã Python bằng script type="py" trong HTML
    • Mã ví dụ chạy print('You can!') ngay trong tài liệu trình duyệt
  • Hướng đi cốt lõi của PyScript là kết hợp hai hệ sinh thái công nghệ: web và Python
    • Web là nền tảng điện toán phổ quát trên toàn thế giới
    • Python là một trong những ngôn ngữ lập trình phổ biến nhất thế giới
  • Kết quả là PyScript đưa ra thông điệp rõ ràng rằng ở đâu có trình duyệt, ở đó có thể chạy Python

Cách bắt đầu và đặc tính của nền tảng

  • Có thể dùng thử miễn phí và dễ dàng tại PyScript.com
  • Tài liệu hướng đến cả người mới bắt đầu lẫn người dùng nâng cao
  • Có thể xem PyScript dùng để tạo ra những gì tại tài nguyên cộng đồng
  • Có thể kết nối với những người dùng PyScript khác qua Discord
  • Các đặc tính mà PyScript nhấn mạnh gồm:
    • Easy: Ứng dụng chạy trong trình duyệt mà không cần cài đặt phức tạp
    • Expressive: Có thể xây dựng ứng dụng bằng một ngôn ngữ mạnh mẽ, phổ biến và dễ học như Python
    • Scalable: Mã chạy trong trình duyệt của người dùng nên không cần hạ tầng đắt đỏ
    • Shareable: Có thể chia sẻ ứng dụng qua URL trên web
    • Universal: Ở đâu chạy được trình duyệt thì ở đó cũng chạy được mã
    • Secure: Hoạt động trên trình duyệt, một nền tảng điện toán đã được kiểm chứng
    • Powerful: Tận dụng đồng thời thế mạnh của web và Python

1 bình luận

 
GN⁺ 2024-08-17
Ý kiến trên Hacker News
  • Nếu muốn xem ví dụ sử dụng, có thể xem dashboard Panel thống kê tội phạm Dallas tại đây: https://crimede-coder.com/graphs/Dallas_Dashboard
    Mất khoảng 1 phút để khởi động, bao gồm cài đặt nhiều thư viện Python và tải một bộ dữ liệu 5MB bên ngoài. Khi đã hiện lên rồi thì phản hồi khá tốt và cũng chạy ổn trên iPhone
    Nhiều công ty tôi làm việc cùng đang dùng bản miễn phí của Tableau và cập nhật dữ liệu thủ công, vì bản miễn phí không cho phép kết nối trực tiếp với kho dữ liệu. Đây là một lựa chọn thay thế miễn phí, và tôi đã cấu hình để GitHub Actions tạo file CSV nén rồi cho môi trường tải về

    • Mức dùng bộ nhớ có vẻ khá cao. Theo trình quản lý tác vụ của trình duyệt, tab này đang dùng 657MB, trong khi hầu hết các tab khác chỉ khoảng 25–70MB
    • Có nói là “mất khoảng 1 phút để khởi động”, nhưng khi mở trên iPad Pro 13 inch đời thu 2023 qua mạng băng rộng khu vực NYC và WiFi, từ lúc bấm link đến khi spinner biến mất và bộ lọc hoạt động mất khoảng 8 giây
      Tôi tưởng sẽ mất lâu hơn nhiều so với 8 giây để bootstrap đủ Python chạy một app Panel bên trong Safari trên iPad. Shift refresh mất khoảng 6 giây
    • Tò mò không biết nút thắt cổ chai là gì. Trên mạng băng rộng trong nước thì mất khoảng 20 giây
    • Khá hay. Để lại thêm bản của NYPD cho những ai quan tâm đến dashboard thống kê tội phạm: https://compstat.nypdonline.org/
    • Trang web rất ổn. Nếu “nhiều công ty dùng bản miễn phí của Tableau và cập nhật dữ liệu thủ công” thì tôi thắc mắc vì sao họ không dùng thứ như React hay Angular
      Cũng tò mò liệu vấn đề có phải là cần Python cho phân tích dữ liệu, và không muốn chạy phía server vì chi phí server hay không
  • Xem trang chủ cũng thấy khó hiểu, và đọc tài liệu xong vẫn không rõ chính xác đây là gì
    Tự thử một chút thì khi nhúng vào website, tôi có thể hiển thị “Hello World”. Nó trông như một script tìm các thẻ script có type="py" rồi transpile từ Python sang JavaScript thông qua Pyodide
    Nhưng demo trên trang chủ lại là REPL, còn tiêu đề thì gọi là “nền tảng”, nên vẫn thấy khó hiểu

    • Thay vì “transpile Python sang JavaScript”, PyScript có vẻ là chạy trực tiếp mã Python. Nó dùng trình thông dịch Python được biên dịch sang WebAssembly, sử dụng CPython của Pyodide hoặc MicroPython
    • Tôi không thích việc dùng những thuật ngữ mơ hồ, định nghĩa lỏng lẻo như “nền tảng”. Chỉ cần nói đó là framework đánh giá mã trong thẻ script dành cho Python bằng Pyodide là được
    • Tôi chưa thực sự đọc tài liệu hay mã nguồn, nhưng gói js có lẽ được ánh xạ tới đối tượng window thật và cung cấp API gọi các phương thức DOM thông qua một đối tượng Proxy nào đó
    • Tôi tìm thấy thông tin về terminal ở đây: https://docs.pyscript.net/2024.8.2/user-guide/terminal/
      Tôi đã kỳ vọng có thể chạy Python trong console của trình duyệt
  • Cái này khác Pyodide như thế nào? https://pyodide.org/en/stable/

    • Pyodide là bản port CPython sang nền tảng WebAssembly. PyScript là framework dùng Pyodide để cho phép phát triển ứng dụng Python trong trình duyệt. Nếu nói ngắn gọn kiểu elevator pitch thì là “Python trong thẻ script thông qua Pyodide”
    • Cái này dùng Pyodide. Dù thực tế có thể không phải là transpiler, cảm giác nó gần với một transpiler từ Python sang JS hơn, và nhằm tạo app trình duyệt bằng Python. Vì vậy có thể xem là Pyodide + API trình duyệt
    • Pyodide là runtime
      PyScript có thể dùng Pyodide hoặc MicroPython, và MicroPython thực ra khá nhỏ. Trên nền runtime đó, PyScript không chỉ đơn giản chạy mã Python, mà còn cung cấp các tiện ích và cải thiện trải nghiệm để thật sự dùng Python cho lập trình web
    • Là một wrapper
  • Gần đây tôi đã đào khá sâu theo hướng chạy app Python CLI trong trình duyệt bằng PyScript
    Suốt quá trình đều có cảm giác khá hacky, đặc biệt là khi có dependency. Tôi không dùng được Pydantic 2.x nên phải tạo các lớp wrapper để đi vòng, và dù cố đưa toàn bộ logic vào file Python, do thiếu một số tính năng nên vẫn phải đưa một phần sang JavaScript
    Có thể ổn khi bạn muốn đặt một UI đơn giản và logic UI tùy chỉnh lên trên mã Python, nhưng Streamlit hoặc Gradio có lẽ phù hợp hơn
    GitHub repository: https://github.com/data-catering/data-contract-playground
    Website: https://data-catering.github.io/data-contract-playground/

    • Khi nhiều dự án Python được Rust hóa, việc dùng Python ở mọi nơi đang trở nên khó khăn hơn mức cần thiết
  • Khó tìm được trường hợp sử dụng thực tế. Nếu muốn chạy mô hình học máy, có thể build bằng ONNX: https://onnxruntime.ai/docs/tutorials/web/
    Tôi thắc mắc liệu cách này có hiệu quả để tạo app chạy trên trình duyệt thay vì JS/TS hay không

    • Một số người có thể không muốn động vào JS/TS
    • Ngôn ngữ lập trình nên được tách khỏi môi trường triển khai
  • Sẽ thật tuyệt nếu có thể viết script trong Firefox để điều khiển trình duyệt. Kiểu như thực hiện đánh giá ở bất kỳ giai đoạn nào mong muốn: tại thời điểm GET, sau tất cả các GET, trước/sau khi đánh giá JavaScript
    Tôi tự hỏi liệu có công cụ nào làm được việc này và cho phép truy cập mọi tính năng của Python từ host không

  • Đây chẳng phải là cùng khái niệm với Brython sao? BRowser pYTHON: https://brython.info/
    https://github.com/brython-dev/brython

  • Khoe một chút thì, tôi đã dùng PyScript để tạo một framework frontend phản ứng mang tính định hướng mạnh hơn. Nó lấy một chút cảm hứng từ Vue.js: https://puepy.dev

  • Trước đây tôi đã làm một trình render Markdown bằng thứ này. Có thể xem mã nguồn rất đơn giản tại đây: https://pyscript.com/@stuartmaxwell/markdown-previewer-v2/la...
    Ứng dụng có lẽ chạy không tốt trên mobile, nhưng trên desktop thì ổn. Tôi đã dùng đoạn mã này trong một ứng dụng blog viết bằng Django

  • Với bất kỳ thiết lập WASM nào, ràng buộc lớn là cuối cùng không thể gọi nhiều API hoặc scrape website vì CORS, điều này rất phiền phức
    Tất nhiên CORS quan trọng để ngăn những thứ như XSS, nhưng giá mà có cách nào khác ngoài việc dựng một proxy loại bỏ CORS. Làm vậy thì sẽ để lại một IP không phải IP dân dụng và có khả năng bị chặn cao hơn

    • Vấn đề này chỉ xảy ra khi cô lập cross-origin được bật bằng COOP và COEP thôi đúng không?