跳转到主要内容

Go语言中Starlark的Python绑定

项目描述

pystarlark

PyPI

starlark-go提供的实验性Python绑定

安装

pip install pystarlark

示例

from pystarlark import Starlark

s = Starlark()
fibonacci = """
def fibonacci(n=10):
   res = list(range(n))
   for i in res[2:]:
       res[i] = res[i-2] + res[i-1]
   return res
"""
s.exec(fibonacci)
s.eval("fibonacci(5)")  # [0, 1, 1, 2, 3]

这是如何工作的?

pystarlark是通过cgo构建的共享库对starlark-go的绑定。

什么是Starlark?

Starlark是Google为其构建系统Bazel创建的类似Python的语言。尽管Starlark与Python类似,但它有一些Python没有的功能。摘自主Starlark存储库

设计原则

  • 确定性评估。执行相同的代码两次将得到相同的结果。
  • 不可变执行。执行无法访问文件系统、网络、系统时钟。执行不受信任的代码是安全的。
  • 并行评估。模块可以并行加载。为了保证线程安全执行,共享数据变为不可变。
  • 简单性。我们试图限制理解代码所需的概念数量。用户应该能够快速阅读和编写代码,即使他们不是专家。该语言应尽可能避免陷阱。
  • 关注工具。我们认识到源代码将由人类和工具阅读、分析、修改。
  • 类似Python。Python是一种广泛使用的语言。保持语言与Python相似可以降低学习曲线,并使语义对用户更明显。

以下是Starlark开发者的说法

Starlark是一种Python方言。和Python一样,它是一种动态类型语言,具有高级数据类型、词法作用域的一等函数和垃圾回收。独立的Starlark线程可以并行执行,因此Starlark工作负载在并行机器上扩展良好。Starlark是一种小巧简单的语言,拥有熟悉且高度可读的语法。您可以将其用作结构化数据的表达性符号,定义函数以消除重复,或者您可以使用它为现有应用程序添加脚本功能。

Starlark解释器通常嵌入在更大的应用程序中,并且应用程序可以定义除核心语言提供的之外的其他特定领域函数和数据类型。

我为什么使用它而不是直接使用Python呢?

沙盒

编写此代码的主要原因是Starlark的“密封执行”功能。Python以其难以沙盒化而闻名,似乎没有任何沙盒解决方案可以在Python中运行Python或类似Python的代码。虽然Starlark并不完全等同于Python,但它非常接近Python。您可以将此视为运行非常简单的Python函数的安全方式。请注意,此库本身并不真正提供任何安全保证,您的程序在使用它时可能会崩溃(欢迎提交PR)。Starlark本身提供安全保证。

类似的工作

RestrictedPython看起来相当不错,可能适用于大多数用例,包括pystarlark编写时的用例。然而,Python难以沙盒化,RestrictedPython的开发者甚至承认它会引起麻烦

PyPy沙盒可能作为安全的沙盒使用,但它在历史上一直未维护且不受支持。虽然最近对沙盒进行了大量工作,但它主要存在于PyPy存储库的单独分支中。此外,如果已经运行Python解释器,PyPy是一个非常沉重的依赖项。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装软件包的更多信息。

源分布

pystarlark-0.0.2.tar.gz (4.5 kB 查看哈希值)

上传时间 源代码

构建版本

pystarlark-0.0.2-cp39-cp39-win_amd64.whl (2.5 MB 查看哈希值)

上传时间 CPython 3.9 Windows x86-64

pystarlark-0.0.2-cp39-cp39-manylinux2010_x86_64.whl (2.5 MB 查看哈希值)

上传时间 CPython 3.9 manylinux: glibc 2.12+ x86-64

pystarlark-0.0.2-cp39-cp39-manylinux1_x86_64.whl (2.5 MB 查看哈希值)

上传时间 CPython 3.9

pystarlark-0.0.2-cp39-cp39-macosx_10_9_x86_64.whl (2.7 MB 查看哈希值)

上传于 CPython 3.9 macOS 10.9+ x86-64

pystarlark-0.0.2-cp38-cp38-win_amd64.whl (2.5 MB 查看哈希值)

上传于 CPython 3.8 Windows x86-64

pystarlark-0.0.2-cp38-cp38-manylinux2010_x86_64.whl (2.5 MB 查看哈希值)

上传于 CPython 3.8 manylinux: glibc 2.12+ x86-64

pystarlark-0.0.2-cp38-cp38-manylinux1_x86_64.whl (2.5 MB 查看哈希值)

上传于 CPython 3.8

pystarlark-0.0.2-cp38-cp38-macosx_10_9_x86_64.whl (2.7 MB 查看哈希值)

上传于 CPython 3.8 macOS 10.9+ x86-64

pystarlark-0.0.2-cp37-cp37m-win_amd64.whl (2.5 MB 查看哈希值)

上传于 CPython 3.7m Windows x86-64

pystarlark-0.0.2-cp37-cp37m-manylinux2010_x86_64.whl (2.5 MB 查看哈希值)

上传于 CPython 3.7m manylinux: glibc 2.12+ x86-64

pystarlark-0.0.2-cp37-cp37m-manylinux1_x86_64.whl (2.5 MB 查看哈希值)

上传于 CPython 3.7m

pystarlark-0.0.2-cp37-cp37m-macosx_10_9_x86_64.whl (2.7 MB 查看哈希值)

上传于 CPython 3.7m macOS 10.9+ x86-64

pystarlark-0.0.2-cp36-cp36m-win_amd64.whl (2.5 MB 查看哈希值)

上传于 CPython 3.6m Windows x86-64

pystarlark-0.0.2-cp36-cp36m-manylinux2010_x86_64.whl (2.5 MB 查看哈希值)

上传于 CPython 3.6m manylinux: glibc 2.12+ x86-64

pystarlark-0.0.2-cp36-cp36m-manylinux1_x86_64.whl (2.5 MB 查看散列)

上传于 CPython 3.6m

pystarlark-0.0.2-cp36-cp36m-macosx_10_9_x86_64.whl (2.7 MB 查看散列)

上传于 CPython 3.6m macOS 10.9+ x86-64

支持者