网络浏览器中运行Python脚本PyScript剖析

目录
  • 正文
  • 使用PyScript编程
  • 标准库导入
  • 使用来自PyPI的库
  • 本地导入
  • REPL 标签
  • 与 JavaScript 事件监听器互动

正文

PyScript可以让你在浏览器中直接运行Python脚本,与JavaScript并排,在你的代码和网页之间进行双向互动。

由Anaconda创建的PyScript是一项实验性的但很有前途的新技术,它使Python运行时在支持WebAssembly的浏览器中作为一种脚本语言使用。

每个现代常用的浏览器现在都支持WebAssembly,这是许多语言(如C、C++和Rust)可以编译的高速运行时标准。Python的参考实现是用C语言编写的,一个早期项目Pyodide提供了Python运行时的WebAssembly移植。

也在InfoWorld上:WebAssembly的崛起

不过,PyScript的目标是提供一个完整的浏览器环境,将Python作为一种网络脚本语言运行。它建立在Pyodide之上,但增加或加强了一些功能,如从标准库中导入模块、使用第三方导入、配置与文档对象模型(DOM)的双向交互,以及做许多其他在Python和JavaScript世界中有用的事情。

现在,PyScript仍然是一个原型和实验性项目。Anaconda 并不推荐在生产中使用它。但好奇的用户可以在PyScript网站上尝试一些例子,并使用可用的组件在浏览器中构建实验性的Python+JavaScript应用程序。

在这篇文章中,我们将参观一下PyScript的基础知识,看看它是如何让Python和JavaScript进行交互的。

使用PyScript编程

PyScript的核心是一个单一的JavaScript include,你可以将其添加到网页中。这个 include 加载了基本的 PyScript 运行时间,并自动添加了对 PyScript 中使用的自定义标签的支持。

下面是一个PyScript的 "hello, world "项目的简单例子。

<!DOCTYPE html>
<html>
    <head>
        <link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" rel="external nofollow"  rel="external nofollow"  />
        <script defer src="https://pyscript.net/unstable/pyscript.js"></script>
    </head>
    <body>
<py-script output="out">
print("Hello world")
</py-script>
<div id="out"></div>
    </body>
</html>

head 文档中的script 标签加载了PyScript的核心功能。pyscript.css 样式表是可选的,但很有用。在其他方面,它在页面加载时向用户插入了关于页面正在做什么的通知--加载Python运行时,初始化,等等。

Python代码被包含在自定义的py-script 标签中。请注意,代码应该按照Python的缩进惯例进行格式化,否则将无法正常运行。如果你使用的编辑器能自动重新格式化HTML,请注意这一点;它可能会弄乱py-script 块的内容,使其无法运行。

一旦PyScript组件加载完毕,任何Python代码都会被评估。如果标签中的脚本写到stdout (如print) 语句中,你可以通过提供一个output 属性来指示在页面的什么地方显示输出。在这个例子中,脚本的stdout 被引导到ID为"out"div

如果你把它保存到一个文件中,并在网络浏览器中打开它,你会首先看到一个 "加载 "指示器和一个暂停,因为浏览器获得了PyScript的运行时间并将其设置好。该运行时在未来的加载中应保持缓存,但仍需要一些时间来激活。之后,Hello world 应该出现在页面上。

标准库导入

仅仅使用Python的内建程序的脚本只有一点用处。Python 的标准库在 PyScript 中可用,就像你在常规 Python 中使用它一样:只需import 并开始工作。标准库的导入在PyScript中应该只是工作。

如果你想修改上面的脚本块来显示当前的时间,你不需要用与传统Python不同的方法。

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

使用来自PyPI的库

如果我们想从PyPI中安装一个包并使用它呢?PyScript 有另一个标签,py-env ,它指定了需要安装的第三方软件包。让我们用这两个块来替换原始脚本中的py-script 块。

<py-env>
- humanize
</py-env>
<py-script output="out">
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.")
</py-script>

py-env 块让我们列出要添加的软件包,就像我们在 Python 项目的requirements.txt 文件中列出它们一样。然后我们可以像对待其他 Python 软件包一样导入和使用它们。在这个例子中,我们使用了一个名为humanize 的第三方软件包,以使数字输出更容易阅读。

注意,并不是所有来自PyPI的包都能按预期安装和运行。例如,requests 需要访问尚不支持的网络组件。(这个问题的一个可能的解决方法是使用pyodide.http.pyfetch ,它被原生支持)。但是纯 Python 包,如humanize ,应该运行良好。Anaconda 提供的例子中使用的包,如numpy,pandas,bokeh, 或matplotlib ,也可以运行。

本地导入

对于另一种常见的情况,假设你想从与你的网页在同一目录树下的其它 Python 脚本中导入。使用导入可以更容易地将更多的 Python 逻辑从网页本身移出,在那里它和你的演示文稿混在一起,可能会变得难以处理。

通常,Python 使用文件系统中其他.py 文件的存在作为它可以导入的指示。PyScript 不能以这种方式工作,所以你需要指定哪些文件可以作为可导入模块。

比方说,你有一个名为index.html 的网页,在你的 web 服务器的某个目录下,你想在它旁边放置一个名为main.py 的 Python 文件。这样,你的页内脚本就可以只是import main ,而你可以把大部分的 Python 逻辑限制在实际的.py 文件中。

在你的py-env 块中指定你想导入的 Python 文件。

- paths:`` - ./main.py

这将允许main.py ,在与网页本身相同的 web 服务器目录下,可以与import main 一起导入。

要记住一件重要的事情。你不能对你在浏览器中本地启动的网页进行这样的导入。这是由于WebAssembly运行时和浏览器本身对文件系统访问的限制造成的。相反,你需要在网络服务器上托管这些网页,以提供网页和.py 文件。

[也在InfoWorld上:在2022年编写现代Python的4个关键]

REPL 标签

Python用户应该熟悉Jupyter Notebook,它是Python的浏览器内实时编码环境,通常用于数学和统计学。PyScript为这样的环境提供了一个原始的构建模块,即py-repl 标签。

py-repl 在网页上生成一个输入字段,其功能就像一个非常基本的Jupyter笔记本环境。下面是一个来自Anaconda自己演示的例子。

<!DOCTYPE html>
<html lang="en">
  <head>
    <link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" rel="external nofollow"  rel="external nofollow"  />
    <script defer src="https://pyscript.net/alpha/pyscript.js"></script>
  </head>
  <body>
    <h1><b>pyscript REPL</b></h1>
    Tip: press Shift-ENTER to evaluate a cell
    <div>
      <py-repl id="my-repl" auto-generate="true"> </py-repl>
    </div>
  </body>
</html>

运行这段代码,你会看到一个输入字段,它的工作原理类似于Python的REPL。

目前,REPL标签很少有记录的自定义方式。例如,如果你想以编程方式访问一个单元格的内容或其结果,没有明确的文档说明如何做到这一点。

IDG

PyScript的类似Jupyter的REPL组件可以让你在页面中交互式地运行Python,尽管它还不是很灵活或可配置。

与 JavaScript 事件监听器互动

因为 PyScript 是基于pyodide 的,所以它使用pyodide 的机制来与 DOM 交互。例如,如果我们想获得一个网页上的输入框的值并在我们的Python代码中使用它,我们会这样做。

<input id="txt">
<py-script>
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)
</py-script>

js 库为许多常见的 JavaScript 实体提供了一个 Python 接口,比如documentconsole 对象。它们在PyScript中的行为与在JavaScript中的行为几乎完全相同。pyodide 中的create_proxy 函数可以让我们取一个 Python 函数对象并为它生成一个 JavaScript 接口,因此它可以被用作input 框的事件监听器。input 框中的任何按键都会被记录到控制台,但它们也可以在Python端被处理。

以上就是网络浏览器中运行Python脚本PyScript剖析的详细内容,更多关于浏览器运行Python PyScript的资料请关注我们其它相关文章!

(0)

相关推荐

  • python开发环境PyScripter中文乱码问题解决方案

    PyScripter看起来还是挺不错的一个python ide 环境: PyScripter 2.6.0.0 python3.4 问题: PyScripter有个小坑,打开文件后中文都成了乱码.在PyScripter中新建的文件中文可以正常显示,但是重新打开后中文乱码. PyScripter中文乱码原因: 原因是如果文件头部没有编码声明,那么PyScripter会默认使用ANSI打开文件. 而PyScripter默认的文件模板也不带编码声明,重新打开文件时间不以UTF-8打开,所以乱码. 解决的

  • pyscript的简单应用实现

    目录 1. 什么是pyscript 2.pyscript的应用 2-1.下载 2-2. CDN 2-3. 你的第一个pyscript应用 最近在 PyCon US 2022 上,Anaconda 的首席执行官 Peter Wang 宣布了一项名为 PyScript 的闪亮新技术,该技术允许用户在浏览器中编写 Python. 1. 什么是pyscript pyscript由来自 Anaconda 的团队开发,包括 Peter Wang.Fabio Pliger 和 Philipp Rudiger,

  • 基于python详解PyScript到底是什么

    目录 前言: 作用 使用方法 总结 前言: 最近 Anaconda 开大会发布了 PyScript ,它允许我们将 Python 代码嵌入到 HTML 中,并在浏览器中允许.PyScript 旨在为用户提供一流的编程语言,该语言具有一致的样式规则.更具表现力且更易于学习. 熟悉前端的朋友应该马上就可以反应到:这就是替代 JavaScript 啊! 确实,这个功能就类似于 JavaScript,如果后面发展得好的话,我们完全可以不写 JavaScript,直接写 Python 也能实现一样的效果.

  • 使用pyscript在网页中撰写Python程式的方法

    根据 Anaconda 的项目 pyscript,可以将 python 的代码直接写在网页中,目前只支援两种标签,分别是<py-script> 与 <py-repl>,以下是简单的示例. 使用这两行导入 pyscript <link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" rel="external nofollow" rel=&

  • 网络浏览器中运行Python脚本PyScript剖析

    目录 正文 使用PyScript编程 标准库导入 使用来自PyPI的库 本地导入 REPL 标签 与 JavaScript 事件监听器互动 正文 PyScript可以让你在浏览器中直接运行Python脚本,与JavaScript并排,在你的代码和网页之间进行双向互动. 由Anaconda创建的PyScript是一项实验性的但很有前途的新技术,它使Python运行时在支持WebAssembly的浏览器中作为一种脚本语言使用. 每个现代常用的浏览器现在都支持WebAssembly,这是许多语言(如C

  • 在CMD命令行中运行python脚本的方法

    网上给出了各种方法,都无碍乎先切换到Python脚本所在目录,然后输入Python脚本名称并回车,本文这里给出了更简便的方法. 方法一: 进入Python脚本所在的文件夹,shift+右击,选择"在此处打开命令窗口",按TAB键切换文件,选择目标python脚本,当然直接输入也行. 方法二: win+R,输入cmd,进入命令行窗口,直接将脚本文件拖到窗口里回车就可以了. 以上这篇在CMD命令行中运行python脚本的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多

  • 自动在Windows中运行Python脚本并定时触发功能实现

    目录 环境介绍 运行Python脚本:.bat文件 举例: 定时在Windows中触发.bat文件(英文版系统) 环境介绍 系统环境:Windows 10 Python版本:Python 3.5 必备包:无 运行Python脚本:.bat文件 在Windows中,.bat文件是批处理文件,是与Linux中.sh(shell)文件很像的东西. 如果,我们想在Windows中运行一个Python脚本,我们可以通过CMD,首先进入python文件所在的目录,之后运行. 但是这样很麻烦,每次都要打开CM

  • Windows 配置Apache以便在浏览器中运行Python script的CGI模式

    现在因为已经安装了2.6的Python,以及支持2.6的Eric4,就不想再重新安装2.5来继续配置Apache下mod_python了. 后来发现了一篇文章Running Python as CGI in Apache in Windows ,讲述以CGI模式代替mod_python来运行python script.还有这篇Python for Windows . 做法是: 打开httpd.conf,找到"#ScriptInterpreterSource Registry ",移除前

  • 在IIS服务器上以CGI方式运行Python脚本的教程

    由于接触到Python Web开发,正好把最简单的CGI方式研究了一下,话说在Windows下配置Python的Web开发还真的蛮麻烦的,Linux下配置倒挺容易,正好微软有技术文章<Using Python Scripts with IIS>介绍了这些内容,此文介绍了两种方法,一是使用ASP引擎来运行Python脚本,这个可能需要用到ActivePython,当然ASP技术已经过时了,我今天就简单介绍下CGI模块运行方式. 编写简单的支持CGI的Python脚本(本文介绍3.2版本的Pyth

  • eclipse中运行monkeyrunner脚本之环境搭建(4)

    monkeyrunner脚本使用Python语法编写,但它实际上是通过Jython来解释执行. Jython是Python的Java实现,它将Python代码解释成Java虚拟机上的字节码并执行,这种做法允许在Python中继承一个Java类型,可以调用任意的 Java API . 本文档主要是可以实现在eclipse环境中运行Monkeyrunner脚本.所需要的环境和工具如下:win7 os.jdk.eclipse.sdk.python.jython.模拟器或真机设备. 在前两章中,我们分别

  • 命令行运行Python脚本时传入参数的三种方式详解

    如果在运行python脚本时需要传入一些参数,例如gpus与batch_size,可以使用如下三种方式. python script.py 0,1,2 10 python script.py -gpus=0,1,2 --batch-size=10 python script.py -gpus=0,1,2 --batch_size=10 这三种格式对应不同的参数解析方式,分别为sys.argv, argparse, tf.app.run, 前两者是python自带的功能,最后一个是tensorfl

  • 详解python命令提示符窗口下如何运行python脚本

    以arcgispro的python脚本为例在arcgispro自带的python窗口下运行python脚本 需求: 将arcgispro的.aprx项目包中gdb的数据源路径更换为sde数据源路径. 示例数据:testaprx_jb51.rar 演示过程: 方式一:脚本中指定好相关参数设置 import arcpy import json import sys import os import argparse import re result = "" jsontext = {'su

  • 运行python脚本更改Windows背景

    在我们开始之前,一定要注意这篇文章只针对Windows用户!对于那些使用Windows的人来说,这是一个有趣的想法. 如果您想使用python更改桌面背景,您会做什么?您可能要去一个库或寻找一个库,但是这不需要Windows中的库,您可以在不安装特殊库和使用ctype的情况下更改背景. 实际上,可以使用常用的命令更改桌面背景,以更改ctype中的系统参数.(让我们写一个面向对象的程序,这样我们的工作就干净有序了.) import ctypes class Main:     def __init

  • centos 自动运行python脚本和配置 Python 定时任务

    目录 一.centos实现自动运行Python脚本 二.centos中测试定时任务 1.crontab文件 2.详细配置 3.设置定时任务 一.centos 实现自动运行 Python 脚本 正式配置前,先编写一段 Python 脚本,实现日志写入文件操作: import os import sys import logging current_path = os.getcwd() # 获取当前目录 logging.basicConfig(level=logging.INFO,        

随机推荐