Cách chạy mã python trong chrome

Tôi là nhà nghiên cứu và phát triển web tự do đến từ Malawi. Tôi thích học những điều mới và việc viết lách giúp tôi hiểu và củng cố các khái niệm. Tôi hy vọng bằng cách chia sẻ kinh nghiệm của mình, những người khác có thể học được điều gì đó từ họ

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ẻ script trong tài liệu head tải chức năng cốt lõi của PyScript. Biểu định kiểu pyscript.css 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 đặt trong thẻ py-script 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ỉ cần


import datetime
print ["Current date and time:",
datetime.datetime.now[].strftime["%Y/%m/%d %H:%M:%S"]]
7 và bắt đầu làm việc. 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 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 py-script trong tập lệnh gốc bằng hai khối này



- humanize



from datetime import datetime
import humanize
now_int = int[datetime.timestamp[datetime.now[]]]
now_fmt = humanize.intcomma[now_int]
print["It has been", now_fmt, "seconds since the epoch."]

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


- humanize



from datetime import datetime
import humanize
now_int = int[datetime.timestamp[datetime.now[]]]
now_fmt = humanize.intcomma[now_int]
print["It has been", now_fmt, "seconds since the epoch."]

1 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à


- humanize



from datetime import datetime
import humanize
now_int = int[datetime.timestamp[datetime.now[]]]
now_fmt = humanize.intcomma[now_int]
print["It has been", now_fmt, "seconds since the epoch."]

2 để 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,



- humanize



from datetime import datetime
import humanize
now_int = int[datetime.timestamp[datetime.now[]]]
now_fmt = humanize.intcomma[now_int]
print["It has been", now_fmt, "seconds since the epoch."]

3 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


- humanize



from datetime import datetime
import humanize
now_int = int[datetime.timestamp[datetime.now[]]]
now_fmt = humanize.intcomma[now_int]
print["It has been", now_fmt, "seconds since the epoch."]

4, được hỗ trợ nguyên bản. ] Nhưng các gói thuần Python, như


- humanize



from datetime import datetime
import humanize
now_int = int[datetime.timestamp[datetime.now[]]]
now_fmt = humanize.intcomma[now_int]
print["It has been", now_fmt, "seconds since the epoch."]

2, 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ư


- humanize



from datetime import datetime
import humanize
now_int = int[datetime.timestamp[datetime.now[]]]
now_fmt = humanize.intcomma[now_int]
print["It has been", now_fmt, "seconds since the epoch."]

6,


- humanize



from datetime import datetime
import humanize
now_int = int[datetime.timestamp[datetime.now[]]]
now_fmt = humanize.intcomma[now_int]
print["It has been", now_fmt, "seconds since the epoch."]

7,


- humanize



from datetime import datetime
import humanize
now_int = int[datetime.timestamp[datetime.now[]]]
now_fmt = humanize.intcomma[now_int]
print["It has been", now_fmt, "seconds since the epoch."]

8 hoặc


- humanize



from datetime import datetime
import humanize
now_int = int[datetime.timestamp[datetime.now[]]]
now_fmt = humanize.intcomma[now_int]
print["It has been", now_fmt, "seconds since the epoch."]

9, 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




  
    
    
  

  
    

pyscript REPL

Tip: press Shift-ENTER to evaluate a cell
0 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




  
    
    
  

  
    

pyscript REPL

Tip: press Shift-ENTER to evaluate a cell
1 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



  
    
    
  

  
    

pyscript REPL

Tip: press Shift-ENTER to evaluate a cell
2 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à



  
    
    
  

  
    

pyscript REPL

Tip: press Shift-ENTER to evaluate a cell
3 và bạn có thể giới hạn phần lớn logic Python trong các tệp



  
    
    
  

  
    

pyscript REPL

Tip: press Shift-ENTER to evaluate a cell
0 thực tế

Chỉ định các tệp Python mà 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




  
    
    
  

  
    

pyscript REPL

Tip: press Shift-ENTER to evaluate a cell
6_______22_______7

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




  
    
    
  

  
    

pyscript REPL

Tip: press Shift-ENTER to evaluate a cell
2, trong cùng thư mục máy chủ web với chính trang web, có thể nhập được với



  
    
    
  

  
    

pyscript REPL

Tip: press Shift-ENTER to evaluate a cell
3

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




  
    
    
  

  
    

pyscript REPL

Tip: press Shift-ENTER to evaluate a cell
0

[ 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ẻ





from js import document, console
from pyodide import create_proxy

def _eventlog[e]:
    console.log[f"Input value: {e.target.value}"]

eventlog = create_proxy[_eventlog]

document.getElementById["txt"].addEventListener["input", eventlog]

1





from js import document, console
from pyodide import create_proxy

def _eventlog[e]:
    console.log[f"Input value: {e.target.value}"]

eventlog = create_proxy[_eventlog]

document.getElementById["txt"].addEventListener["input", eventlog]

1 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




  
    
    
  

  
    

pyscript REPL

Tip: press Shift-ENTER to evaluate a cell

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

Bởi vì PyScript dựa trên





from js import document, console
from pyodide import create_proxy

def _eventlog[e]:
    console.log[f"Input value: {e.target.value}"]

eventlog = create_proxy[_eventlog]

document.getElementById["txt"].addEventListener["input", eventlog]

3, nên nó sử dụng cơ chế của




from js import document, console
from pyodide import create_proxy

def _eventlog[e]:
    console.log[f"Input value: {e.target.value}"]

eventlog = create_proxy[_eventlog]

document.getElementById["txt"].addEventListener["input", eventlog]

3 để 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





from js import document, console
from pyodide import create_proxy

def _eventlog[e]:
    console.log[f"Input value: {e.target.value}"]

eventlog = create_proxy[_eventlog]

document.getElementById["txt"].addEventListener["input", eventlog]

Thư viện





from js import document, console
from pyodide import create_proxy

def _eventlog[e]:
    console.log[f"Input value: {e.target.value}"]

eventlog = create_proxy[_eventlog]

document.getElementById["txt"].addEventListener["input", eventlog]

5 cung cấp giao diện Python cho nhiều thực thể JavaScript phổ biến, như các đối tượng




from js import document, console
from pyodide import create_proxy

def _eventlog[e]:
    console.log[f"Input value: {e.target.value}"]

eventlog = create_proxy[_eventlog]

document.getElementById["txt"].addEventListener["input", eventlog]

6 và




from js import document, console
from pyodide import create_proxy

def _eventlog[e]:
    console.log[f"Input value: {e.target.value}"]

eventlog = create_proxy[_eventlog]

document.getElementById["txt"].addEventListener["input", eventlog]

7. 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




from js import document, console
from pyodide import create_proxy

def _eventlog[e]:
    console.log[f"Input value: {e.target.value}"]

eventlog = create_proxy[_eventlog]

document.getElementById["txt"].addEventListener["input", eventlog]

8 trong




from js import document, console
from pyodide import create_proxy

def _eventlog[e]:
    console.log[f"Input value: {e.target.value}"]

eventlog = create_proxy[_eventlog]

document.getElementById["txt"].addEventListener["input", eventlog]

3 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 script0. Bất kỳ lần nhấn phím nào trong hộp script0 đề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ỳ

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úng tôi có thể sử dụng Python trong tiện ích mở rộng của Chrome không?

Thêm Python vào tiện ích mở rộng của Chrome . Phương pháp A. Bao gồm Brython trong iframe [yêu cầu máy chủ] Phương pháp B. Biên dịch Python sang Javascript bằng Rapydscript [tiện ích mở rộng tốt nhất, không có máy chủ, thuần túy. ]We have two options to add Python into a chrome extension: Method A: Include Brython in an iframe [requires server] Method B: Compile Python to Javascript using Rapydscript [best, serverless, pure extension.]

Chủ Đề