Bạn có thể chạy tập lệnh Python trên trang web không?

PyScript cho phép bạn chạy các tập lệnh Python ngay trong trình duyệt, song song với JavaScript, với sự tương tác hai chiều giữa mã của bạn và trang web

Bởi Serdar Yegulalp

Nhà văn cao cấp, InfoWorld.

dTosh / Shutterstock

Mục lục

Cho xem nhiều hơn

PyScript, được tạo bởi Anaconda, là một công nghệ mới thử nghiệm nhưng đầy hứa hẹn giúp thời gian chạy Python có sẵn dưới dạng ngôn ngữ kịch bản trong các trình duyệt hỗ trợ WebAssembly

Mọi trình duyệt hiện đại, thông dụng hiện nay đều hỗ trợ WebAssugging, tiêu chuẩn thời gian chạy tốc độ cao mà nhiều ngôn ngữ [như C, C++ và Rust] có thể biên dịch thành. Việc triển khai tham chiếu của Python được viết bằng C và một dự án trước đó, Pyodide, đã cung cấp một cổng WebAssugging của thời gian chạy Python

[ Cũng trên InfoWorld. Sự trỗi dậy của WebAssembly ]

Tuy nhiên, PyScript nhằm mục đích cung cấp toàn bộ môi trường trong trình duyệt để chạy Python dưới dạng ngôn ngữ kịch bản web. Nó được xây dựng dựa trên Pyodide nhưng bổ sung hoặc nâng cao các tính năng như khả năng nhập mô-đun từ thư viện chuẩn, sử dụng tính năng nhập của bên thứ ba, định cấu hình tương tác hai chiều với Mô hình đối tượng tài liệu [DOM] và thực hiện nhiều thứ hữu ích khác trong cả hai

Ngay bây giờ, PyScript vẫn là một dự án thử nghiệm và nguyên mẫu. Anaconda không khuyên bạn nên sử dụng nó trong sản xuất. Nhưng những người dùng tò mò có thể thử các ví dụ trên trang PyScript và sử dụng các thành phần có sẵn để xây dựng các ứng dụng Python-plus-JavaScript thử nghiệm trong trình duyệt

Trong bài viết này, chúng ta sẽ tìm hiểu những kiến ​​thức cơ bản về PyScript và xem cách nó cho phép Python và JavaScript tương tác

Lập trình với PyScript

Về cốt lõi, PyScript bao gồm một mã JavaScript duy nhất mà bạn có thể thêm vào một trang web. Điều này bao gồm tải thời gian chạy PyScript cơ sở và tự động thêm hỗ trợ cho các thẻ tùy chỉnh được sử dụng trong PyScript

Đây là một ví dụ đơn giản về dự án "xin chào, thế giới" trong PyScript




    
        
        
    
    


print["Hello world"]


Thẻ


import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
4 trong tài liệu

import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
5 tải chức năng cốt lõi của PyScript. Biểu định kiểu

import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
6 là tùy chọn, nhưng hữu ích. Trong số những thứ khác, nó chèn thông báo cho người dùng tại thời điểm tải trang về những gì trang đang làm—tải thời gian chạy Python, khởi tạo, v.v.

Mã Python được đính kèm trong thẻ


import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
7 tùy chỉnh. Lưu ý rằng mã phải được định dạng theo quy ước của Python để thụt đầu dòng, nếu không mã sẽ không chạy đúng cách. Hãy lưu ý điều này nếu bạn sử dụng trình chỉnh sửa tự động định dạng lại HTML;

Bất kỳ mã Python nào cũng được đánh giá sau khi các thành phần PyScript tải xong. Nếu tập lệnh trong các thẻ ghi vào câu lệnh


import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
0 [như với câu lệnh

import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
1], bạn có thể chỉ dẫn vị trí trên trang để hiển thị đầu ra bằng cách cung cấp thuộc tính

import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
2. Trong ví dụ này,

import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
0 cho tập lệnh được chuyển hướng đến

import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
4 với ID

import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
5

Nếu bạn lưu tệp này vào một tệp và mở nó trong trình duyệt web, trước tiên bạn sẽ thấy chỉ báo "đang tải" và tạm dừng, vì trình duyệt lấy thời gian chạy PyScript và thiết lập nó. Thời gian chạy sẽ vẫn được lưu vào bộ nhớ cache trong các lần tải trong tương lai nhưng vẫn sẽ mất một chút thời gian để kích hoạt. Sau đó,


import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
6 sẽ xuất hiện trên trang

Nhập thư viện tiêu chuẩn

Các tập lệnh chỉ sử dụng nội trang của Python chỉ hữu ích một chút. Thư viện chuẩn của Python có sẵn trong PyScript giống như cách bạn sử dụng nó trong Python thông thường. chỉ đơn giản là


import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
7 và đi làm. Nhập thư viện tiêu chuẩn chỉ hoạt động trong PyScript

Nếu bạn muốn sửa đổi khối tập lệnh ở trên để hiển thị thời gian hiện tại, bạn không cần phải thực hiện điều đó khác với cách bạn làm trong Python thông thường


import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]

Sử dụng thư viện từ PyPI

Nếu chúng ta muốn cài đặt một gói từ PyPI và sử dụng gói đó thì sao? . Hãy thay thế khối


import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
7 trong tập lệnh gốc bằng hai khối này


import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
1

Khối


import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
8 cho phép chúng tôi liệt kê các gói cần thêm, giống như cách chúng tôi có thể liệt kê chúng trong tệp

import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
11 cho dự án Python. Sau đó, chúng tôi có thể nhập và sử dụng chúng như bất kỳ gói Python nào khác. Trong ví dụ này, chúng tôi đang sử dụng gói của bên thứ ba có tên là

import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
12 để làm cho đầu ra số dễ đọc hơn

Lưu ý rằng không phải tất cả các gói từ PyPI sẽ cài đặt và chạy như mong đợi. Chẳng hạn,


import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
13 yêu cầu quyền truy cập vào các thành phần mạng chưa được hỗ trợ. [Một giải pháp khả thi cho vấn đề này là sử dụng

import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
14, được hỗ trợ nguyên bản. ] Nhưng các gói thuần Python, như

import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
12, sẽ chạy tốt. Và các gói được sử dụng trong các ví dụ do Anaconda cung cấp, như

import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
16,

import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
17,

import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
18 hoặc

import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
19, cũng sẽ hoạt động

Nhập khẩu tại địa phương

Đối với một tình huống phổ biến khác, giả sử bạn muốn nhập từ các tập lệnh Python khác trong cùng cây thư mục với trang web của mình. Sử dụng tính năng nhập giúp dễ dàng di chuyển nhiều logic Python của bạn ra khỏi trang web, nơi nó được trộn lẫn với bản trình bày của bạn và có thể trở nên khó làm việc với

Thông thường, Python sử dụng sự hiện diện của các tệp


import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
20 khác trong hệ thống tệp làm dấu hiệu cho thấy những gì nó có thể nhập. PyScript không thể hoạt động theo cách này, vì vậy bạn sẽ cần chỉ định tệp nào bạn muốn cung cấp dưới dạng mô-đun có thể nhập

Giả sử bạn có một trang web có tên là


import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
21 trong một thư mục nhất định trên máy chủ web của mình và bạn muốn đặt một tệp Python có tên là

import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
22 bên cạnh nó. Bằng cách này, tập lệnh trong trang của bạn có thể chỉ là

import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
23 và bạn có thể giới hạn phần lớn logic Python trong các tệp

import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
20 thực tế

Chỉ định các tệp Python bạn muốn có thể nhập được trong khối


import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
8 của mình


import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
26

import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
27

Điều này sẽ cho phép


import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
22, trong cùng thư mục máy chủ web với chính trang web, có thể nhập được với

import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
23

Một điều quan trọng cần ghi nhớ. Bạn không thể thực hiện nhập như thế này trên trang web mà bạn đã khởi chạy cục bộ trong trình duyệt. Điều này là do các hạn chế đối với quyền truy cập hệ thống tệp được áp đặt bởi thời gian chạy WebAssugging và chính trình duyệt. Thay vào đó, bạn cần lưu trữ các trang trên máy chủ web để phục vụ trang web và tệp


import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
20

[ Cũng trên InfoWorld. 4 chìa khóa để viết Python hiện đại vào năm 2022 ]

Thẻ REPL

Người dùng Python phải quen thuộc với Jupyter Notebook, môi trường mã hóa trực tiếp trong trình duyệt dành cho Python thường được sử dụng cho toán học và thống kê. PyScript cung cấp một khối xây dựng nguyên thủy cho một môi trường như vậy, thẻ


import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
31


import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
31 tạo trường nhập liệu trên trang web có chức năng giống như một phiên bản rất cơ bản của môi trường Máy tính xách tay Jupyter. Đây là một ví dụ từ bản demo của Anaconda


import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
2

Chạy mã này và bạn sẽ thấy một trường nhập liệu, hoạt động giống như REPL của Python

Hiện tại, thẻ REPL có rất ít cách thức tùy chỉnh tài liệu. Chẳng hạn, nếu bạn muốn truy cập nội dung của một ô hoặc kết quả của ô đó theo chương trình, thì không có tài liệu rõ ràng nào về cách thực hiện điều đó

IDG

Thành phần REPL giống như Jupyter của PyScript cho phép bạn chạy Python một cách tương tác trong một trang, mặc dù nó chưa linh hoạt hoặc có thể định cấu hình

Tương tác với trình xử lý sự kiện JavaScript

Vì PyScript dựa trên


import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
33 nên nó sử dụng cơ chế của

import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
33 để tương tác với DOM. Ví dụ: nếu chúng tôi muốn lấy giá trị của hộp nhập liệu trên trang web và sử dụng nó trong mã Python của mình, chúng tôi sẽ làm điều này


import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
3

Thư viện


import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
35 cung cấp giao diện Python cho nhiều thực thể JavaScript phổ biến, như các đối tượng

import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
36 và

import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
37. Chúng hoạt động gần như chính xác theo cùng một cách trong PyScript cũng như trong JavaScript. Hàm

import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
38 trong

import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
33 cho phép chúng ta lấy một đối tượng hàm Python và tạo giao diện JavaScript cho nó, vì vậy nó có thể được sử dụng làm trình lắng nghe sự kiện cho hộp

import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
40. Bất kỳ lần nhấn phím nào trong hộp

import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
40 đều được ghi vào bảng điều khiển, nhưng chúng cũng có thể được xử lý ở phía Python

Có liên quan

  • con trăn
  • Phát triển web
  • Phát triển phần mềm

Serdar Yegulalp là một nhà văn cao cấp tại InfoWorld, tập trung vào học máy, container hóa, devops, hệ sinh thái Python và đánh giá định kỳ

Tôi có thể chạy tập lệnh Python trong HTML không?

Tại PyconUS 2022, Anaconda đã tiết lộ một khung mới có tên là PyScript sử dụng python trong mã HTML để xây dựng ứng dụng. Bạn có thể sử dụng python trong mã HTML của mình . Bạn không cần phải biết javascript. PyScript không chỉ là HTML mà còn mạnh mẽ hơn nhờ hệ sinh thái phong phú và dễ tiếp cận của các thư viện Python.

Có thể chạy Python trong trình duyệt không?

"Pyodide cho phép cài đặt và chạy các gói Python trong trình duyệt bằng micropip. Bất kỳ gói Python thuần túy nào có bánh xe có sẵn trên PyPI đều được hỗ trợ," dự án Pyodide nêu rõ. Về cơ bản, nó biên dịch mã Python và các thư viện khoa học thành WebAssugging bằng Emscripten

Chủ Đề