【问题标题】:How to use lua with python on Mac OS Mountain Lion如何在 Mac OS Mountain Lion 上使用 lua 和 python
【发布时间】:2013-02-02 01:55:30
【问题描述】:

我一直在使用 Lupa 0.20 + LuaJIT 2.0.0 将 lua 嵌入到 W7 框中的 python 2.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)

有什么技巧可以让它发挥作用吗?

【问题讨论】:

  • “在 python 2.7 上嵌入 lua”是什么意思?
  • 我想从 python 脚本中使用 lua 脚本。

标签: python lua osx-mountain-lion


【解决方案1】:

您不能将 lupa x86_64 与系统安装的 python 一起使用。 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 发行版和库并照常构建;为我工作。

【讨论】:

    【解决方案2】:

    我使用安装了 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()"
    

    【讨论】:

      【解决方案3】:

      这非常接近为我工作,但有点不足。最近发布了一个新版本的 lupa,所以可能发生了一些变化。对我来说,上述方法几乎奏效了,但我遇到了 lua 运行时中未定义符号的问题。

      我让 Lupa 为 Mavericks 做以下工作:

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

        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,那是 homebrew 将其符号链接到活动“brew”的地方。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-15
        • 2012-09-15
        • 2013-09-24
        • 1970-01-01
        • 2013-02-12
        • 1970-01-01
        • 2012-08-19
        • 1970-01-01
        相关资源
        最近更新 更多