如何在 Python 中嵌入 Lua?

Posted

技术标签:

【中文标题】如何在 Python 中嵌入 Lua?【英文标题】:How to embed Lua inside Python? 【发布时间】:2011-09-08 05:18:13 【问题描述】:

这听起来是个奇怪的问题,所以我先解释一下周围的情况。

基本上,我有一个用 Python 编写的 3D 游戏开发工具包,它本身就可以很好地工作。不过,我的大部分用户都会习惯使用 Lua 作为脚本语言,所以我开始研究 Lua-Python 绑定。

我选择了 Stefan Behnel 令人惊叹的 Lupa 库。但是,它基本上要求最终用户知道如何编译应用程序,这对我的 GDK 来说是无法接受的。另外,我通常只能访问Linux系统,由于我的游戏开发包在Windows和Mac OSX上运行,Windows二进制文件总是滞后,我的OSX用户必须自己编译我的GDK。

有人知道另一种选择吗?谢谢!

P.S:Lunatic Python 已经试过了,Lux 太落伍了。

【问题讨论】:

是的,我的第一个问题 :)。不过,我多年来一直“潜伏”在 *** 周围…… 你喜欢编写编译器吗? 实际上,编写我自己的纯 Python Lua 解释器我的后备方案。不过,如果没有 Lupa 的替代品,我可能会坚持使用 Lupa。 简单。 Lupa 本身实际上并不是用 Python 编写的,它是用 Cython 编写的——它是编译成 C 代码的 Python 的超集。然后必须编译该 C 代码(当然)。 @MilesRout 自从我最初遇到这个问题以来已经过去了 3 年,所以我记得很少关于它的细节。如果我没记错的话,我坚持使用 Lupa,但为每个我想要支持的平台编译它,然后用我原本纯 Python 代码分发编译的 .so/dll。 【参考方案1】:

你应该看看lunatic-python它是python和lua之间的双向桥梁。

网站外的一个例子显示了它是多么自然和容易:

>>> import lua
>>> lg = lua.globals()
>>> lg.string
<Lua table at 0x81c6a10>
>>> lg.string.lower
<Lua function at 0x81c6b30>
>>> lg.string.lower("Hello world!")
'hello world!'

【讨论】:

就像我在问题中所说的那样,我已经尝试过 Lunatic Python。我遇到的主要问题是它非常单一:如果多个脚本仅使用lua.run 运行,它们就会隐式共享全局变量。这就是我选择 Lupa 的原因;可以存在多个 Lua 解释器实例。 Lunatic Python 现在有点无人维护,很难弄清楚如何安装。请参阅github.com/bastibe/lunatic-python/issues/… 有一个 fork(我在那里写了一种安装说明)

以上是关于如何在 Python 中嵌入 Lua?的主要内容,如果未能解决你的问题,请参考以下文章

Lua在baremetal嵌入式c应用程序中共存

请问自己的软件如何运行Lua脚本

在 Python 中,如何导入定义在 lua 文件中的变量?

初识lua

Redis中如何优雅地使用Lua脚本

如何在lua中设置文件写入函数调用的长度?