Brython完全是客户端的吗?

17

我有一段用Python编写的代码,想把它放到网页上。Brython似乎是将这两个东西粘合在一起的最简单方法,但我没有能够实际运行服务器端代码的服务器。

Brython是否需要服务器端代码,或者我可以使用(例如)Dropbox便宜地托管使用它的页面?


请注意,与此问题无关,它目前仅实现了Python的一个非常小且有限的子集(即使是我最后一次检查时也没有基本类!)。而且,由于他们的方法是“尝试在JavaScript中实现Python解释器”,我怀疑他们甚至不会很快实现90%的核心语言兼容性。 - user395760
1
@delnan 真遗憾。我已经使用了类、运算符重载和各种美妙的东西……哎呀。 - badp
1
+1. 相关问题:能否在Brython中运行Django? - user67416
@g33kz0r:不行,但你可能可以在Empythoned中运行它。 - Janus Troelsen
3
截至2014年底,Brython的实现现在是Python语言的一个非常大的子集,包括所有数据模型和大部分标准库功能。你可以像编写Python代码一样在浏览器中看到结果。 - jsbueno
4个回答

28
Brython是一个相当新的项目,因此正在快速变化中。但是,您可以在几乎任何地方使用它而无需服务器端代码。
一些可能性包括:
  • 本地运行,不需要任何服务器。您可以在Web浏览器中打开HTML文件。
  • 在没有服务器端访问权限的免费网站上运行,例如博客。例如,我使用blogger在我的博客上演示一些东西,如此interactive breadboard
  • 在可以进行服务器端操作的主机上运行。这使您可以执行Ajax(同域 - 在画廊中检查ajax示例),并导入存储在服务器上的库。
  • 将brython集成到您喜欢的Web框架和模板引擎中。
仅为明确起见,您不需要在服务器上安装Python。如果您无法链接到brython.js文件,则可以将JavaScript包含在Web页面中。
关于语言支持方面,它支持所有基本功能,支持类、列表推导式以及一些不太明显的东西,如eval、dis等。有一个stdout和stderr,默认为Web浏览器控制台,但可以重定向(请参见brython网站上的控制台示例)。通过JSObject,它可以很好地与JavaScript库集成。它具有良好的HTML5支持。
由于英文和西班牙文文档是从法文原版翻译而来,所以滞后于法文文档。在接下来的几天内,它们应该会重新同步。不过,如果您查看consolegallery,就可以了解可能性。
在brython网站上链接了邮件列表,以提供支持,如果您遇到困难。
我本想提供更多的示例和链接,但我是新手,所以超链接有限。

1
恭喜你获得了第一个答案的点赞,现在你可以尽情地发布超链接了 :) - badp

5
Brython本身似乎完全是客户端,但是否足够取决于你编写的代码。它不是完整的Python解释器,也没有库。您可能需要一个后端来支持它,或者像评论中建议的那样使用另一种客户端解决方案。
考虑到很少有真正的Web主机支持Python,如果您还需要服务器上的处理,我认为Dropbox非常不适合此类任务。

Dropbox实际上是一个文件锁定服务,其中有一个特殊的文件夹,可以从互联网访问文件。它甚至不是一个网络主机。 - badp
@badp这就是为什么我称其他人为真正的网络主机。我想Dropbox可能只是被滥用成一个非常简单的网络主机。 - Thijs van Dien
2
如果您需要库,可以使用 empythoned(Emscripten 上的 CPython)。 - Janus Troelsen
如果是客户端,无论Web主机支持什么都无所谓。 - Rich

2
是的,brython完全是客户端使用的。 是的,你可以与Dropbox一起使用它。 你需要做的就是复制公共链接到brython.js文件并将其放置在HTML文件的head标签中,默认为以下文本:
<script src=...

将公共链接放入引号中并关闭脚本标记。代码应如下所示:

<html>

    <head>
        <script src="Public Dropbox Link To The brython.js File"></script>
    </head>

    <body onload="brython()">

        <script type="text/python">
        from browser import document, alert

        def echo(event):
            alert(document["zone"].value)

        document['mybutton'].bind('click', echo)
        </script>

        <input id="zone"><button id="mybutton">click !</button>

    </body>

</html>

这是他们网页上提供的一个示例。 注意,您不必在Dropbox上拥有该html文件,它可以放在任何有互联网访问的地方。

2
Brython不总是能处理Python代码,我已经了解到。

我认为需要澄清的一件事是,尽管你可以通过本地访问文件来以非常有限的方式运行Brython(因为需要AJAX),但你不能导入库——甚至是最基本的库(例如html、time)。你真的需要一个基本的Web服务器才能运行Brython。

我发现它非常适合编写基本脚本,因为我的Python比JS好。然而,它似乎在更复杂的语法中出现了问题。


2
Brython自回答以来已经有所改进。现在即使在本地访问文件时,它也可以导入库,这对于嵌入离线智能手机应用程序非常重要。 - Silas S. Brown

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接