如何在Mac OS Mountain Lion上使用Lua与Python

我一直在使用Lupa 0.20 + LuaJIT 2.0.0将Lua嵌入Python 2.7代码中,并在W7Box上运行。不幸的是,我无法在Mountain Lion Mac OS上让它运行。我能够编译LuaJIT和Lupa,但每当我尝试使用lupa时,就会出现错误,例如:

lupa._lupa.LuaError: Failed to initialise Lua runtime
File "/Users/rafael/Projects/Lua/test.py", line 3, in <module>
lua = LuaRuntime()
File "/usr/local/lib/python2.7/site-packages/lupa/_lupa.so", line 116, in     lupa._lupa.LuaRuntime.__cinit__ (lupa/_lupa.c:2237)

有没有什么提示可以让它正常工作?

点赞
用户194921
用户194921

你不能使用 lupa x86_64 与系统安装的 Python。luajit 64 位需要链接 -pagezero_size 10000 -image_base 100000000 的可执行文件(在本例中为 Python)。

系统安装的 Python 没有按照这种方式链接,因此你最好找出如何在 osx 上构建一个 32 位的 luajit(无法帮助),构建一个 32 位的 lupa(ARCHFLAGS="-arch i386" python setup.py build),然后看它是否适合你。

或者,构建一个使用这些链接器标志的 64 位 Python。

编辑:实际上,lua51 可以作为 luajit 的替代品。将 lupa setup.py 指向 lua51 发行版和库并按照常规方式构建;对我有效。

2013-05-07 23:58:45
用户3914
用户3914

我已经在 Mavericks 上使用 brew 安装的 Lua 5.1 让它工作了。在 Mountain Lion 上也可能会工作。

如果你使用他们 git 仓库中的版本,setup.py 文件已经修复了,你只需要下载它、解压缩它,并通过执行以下命令安装 lupa:

$ ARCHFLAGS="-arch x86_64" python setup.py install --no-luajit

如果你更愿意使用已发布的 v0.20 版本,只需将这两个文件保存在任何地方(但在同一个目录中),然后运行 make lupa clean

lupa-5.1.diff:


--- / Users / flavio / working_copies / databuild / lupa-0.20 / setup.py
+++ (clipboard)
@@ -77,6 +77,7 @@
 basedir = os.path.abspath(os.path.dirname(__file__))

 def find_luajit_build():
+    return dict(libraries=['lua'], include_dirs=['/usr/local/include'])
     os_path = os.path
     for filename in os.listdir(basedir):
         if filename.lower().startswith('luajit'):

Makefile:


clean:
    rm -rf lupa-0.20*

lupa:
    brew install lua
    wget https://pypi.python.org/packages/source/l/lupa/lupa-0.20.tar.gz
    tar zxf lupa-0.20.tar.gz
    patch -p1 < lupa5.1.diff
    cd lupa-0.20/ && python setup.py install --no-luajit

test:
    ipython -c "from lupa import LuaRuntime; lua = LuaRuntime()"
2014-02-05 18:21:16
用户3320844
用户3320844

这个方法对我来说很接近成功,但还是有些问题。最近发布了 lupa 的新版本,所以可能有些变化。对我来说,上面的方法几乎可以解决问题,但我在 lua 运行时遇到了未定义的符号问题。

我通过以下步骤在 Mavericks 上使 Lupa 可用:

  • 在 Homebrew 上安装 Lua:http://brew.sh/

  • 安装 cython:对我来说,我只是懒得安装 cython,因为我不打算将其用于其他任何事情,所以我使用了 easy_install cython。你也可以使用 Homebrew 进行安装。

  • 下载/安装 lupa:然后,按照上面的说明操作,但要附带返回 None 作为第二个参数。例如,

    def find_lua_build(no_luajit=False):

    尝试查找本地 LuaJIT2 构建

    os_path = os.path +return dict(libraries=['lua'], include_dirs=['/usr/local/include']), None

  • 最后,安装 Python 模块,并明确指示使用 cython 进行编译: sudo python setup.py install --with-cython

如果这不起作用,我建议尝试使用不同版本的 lua 在 Homebrew 上。如果你想知道为什么上面的 setup.py 指向 /usr/local/include,那是因为 Homebrew 将其符号链接到活动的“brew”目录中。

2014-06-25 16:30:53