如何在Mac OS山狮上使用lua和python

1 投票
3 回答
697 浏览
提问于 2025-04-17 14:30

我一直在使用 Lupa 0.20 和 LuaJIT 2.0.0,把 Lua 嵌入到 Python 2.7 的代码里,运行在 Windows 7 的电脑上。可是,我在 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)

有没有什么建议可以让我让它正常工作呢?

3 个回答

0

这差不多能让我成功,但还是有点问题。最近发布了新版本的lupa,可能有什么变化。对我来说,上面的步骤差不多能用,但在lua运行时遇到了未定义符号的问题。

我在Mavericks上让Lupa工作的方法如下:

  • 在Homebrew上安装Lua: http://brew.sh/
  • 安装cython: 我直接用easy_install cython,因为我比较懒,不打算用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

如果这样还不行,我建议你尝试在homebrew中使用不同版本的lua。如果你在想为什么上面的setup.py指向/usr/local/include,那是因为homebrew在这里创建了指向活动'brew'的符号链接。

0

我在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()"
1

你不能用系统自带的python来运行lupa x86_64。因为luajit的64位版本需要执行文件(在这里就是python)在编译时使用了特定的链接选项,比如-pagezero_size 10000和-image_base 100000000。

而系统自带的python并没有这样链接,所以你最好找办法在osx上构建一个32位的luajit(我帮不了你),然后用这个命令构建一个32位的lupa(ARCHFLAGS="-arch i386" python setup.py build),看看能不能用。

或者,你可以构建一个使用了这些链接选项的64位python。

补充一下:其实,lua51可以直接替代luajit。你只需要把lupa的setup.py指向lua51的分发包和库,然后像往常一样构建;这样对我来说是有效的。

撰写回答