如何在Python中嵌入Lua?

16

这似乎是一个奇怪的问题,所以我会先解释一下背景。

基本上,我有一个用Python编写的3D游戏开发工具包,它本身运行良好。然而,我的大多数用户习惯使用Lua作为脚本语言,因此我开始寻找Lua-Python绑定。

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

有没有其他替代方案?谢谢!

P.S:我已经尝试过Lunatic Python,而Lux过时了。


是的,我的第一个问题:)。我已经在StackOverflow上“潜伏”了好几年了... - DangerOnTheRanger
你喜欢编写编译器吗? - Dhaivat Pandya
1
简单来说,Lupa本身并不是用Python编写的,而是用Cython(Python的超集)编写的,可以编译成C代码。当然,这些C代码还需要进行编译。 - DangerOnTheRanger
这是一个棘手的问题。我能想到的唯一选择需要编译(或在纯Python中完全实现Lua)。你的用户真的需要使用Lua吗? - Jasmijn
2
@MilesRout 自从我最初遇到这个问题已经过去了三年,所以我记得很少细节。如果我没记错的话,我选择了Lupa,但为我想要支持的每个平台编译它,然后将编译好的.so/dll文件与我的纯Python代码一起分发。 - DangerOnTheRanger
显示剩余4条评论
1个回答

4

你应该了解一下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!'

3
就像我在问题中所说的那样,我已经尝试过Lunatic Python。我对它的主要问题是它非常庞大:如果仅使用lua.run运行多个脚本,则多个脚本会隐式共享全局变量。这就是为什么我选择Lupa的原因;多个Lua解释器实例可以存在。 - DangerOnTheRanger
1
疯狂的Python现在有点不维护了,安装起来可能会很困难。请参见https://github.com/bastibe/lunatic-python/issues/65#issuecomment-951888478上的一个分支(我在那里写了一些安装说明)。 - user202729

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