如何在Mac OS Mountain Lion上使用lua和python

时间:2013-02-02 01:55:31

标签: python lua osx-mountain-lion

我一直在使用Lupa 0.20 + LuaJIT 2.0.0在一个W7框中嵌入python 2.7代码上的lua。不幸的是,我无法在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 :(得分: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发行版和库并像往常一样构建;为我工作。

答案 1 :(得分:0)

我使用Brew安装的Lua 5.1让它在Mavericks上工作。也可以在Mountain Lion上为你工作。

如果你使用他们的git repo中的版本,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()"

答案 2 :(得分:0)

这对我的工作非常接近,但略有缩短。最近发布了新版本的lupa,所以也许有些东西发生了变化。对我来说,上面几乎工作,但我在lua运行时遇到了未定义符号的问题。

我让Lupa为Mavericks工作,做了以下事情:

  • 在Homebrew上安装Lua:http://brew.sh/
  • 安装cython:对我来说,我只是使用easy_install cython,因为我很懒,并且不打算将cython用于其他任何工作。你也可以使用自制软件。
  • 下载/安装lupa:然后,按照上面的说明之外,您还需要将None作为第二个参数返回。 e.g。

    def find_lua_build(no_luajit = False):     #尝试找到本地LuaJIT2构建     os_path = os.path     + return dict(libraries = ['lua'],include_dirs = ['/ usr / local / include']),

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

如果这不起作用,我会尝试在自制软件中使用不同版本的lua。如果您想知道为什么上面的setup.py指向/usr/local/include,那么自制软件将其符号链接指向活动的'brew'。