【问题标题】:How to embed Lua inside Python?如何在 Python 中嵌入 Lua?
【发布时间】: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 太落伍了。

【问题讨论】:

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

标签: python lua embedding


【解决方案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(我在那里写了一种安装说明)
猜你喜欢
  • 2011-05-30
  • 2011-01-07
  • 2018-12-26
  • 2012-01-23
  • 2010-09-29
  • 2010-10-08
  • 2013-07-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多