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



我一直在使用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)

有什么技巧可以让它工作吗?

您不能将 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 构建),看看它是否适合你。

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

编辑:实际上,lua51可以作为luajit的直接替代品。 将狼疮 setup.py 指向 lua51 发行版和库,并像往常一样构建;为我工作。

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

这非常接近于为我工作,但略有不足。 最近发布了新版本的lupa,所以也许有些事情发生了变化。 对我来说,上述方法几乎有效,但是我在lua运行时中遇到了未定义符号的问题。

我让Lupa在Mavericks做以下工作:

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

    def find_lua_build(no_luajit=False): # 尝试查找本地 LuaJIT2 构建 os_path = 操作系统路径 +return dict(libraries=['lua'], include_dirs=['/usr/local/include']), None

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

如果这不起作用,我会尝试在自制软件中使用不同版本的lua。 如果你想知道为什么上面的 setup.py 指向/usr/local/include这就是自制软件与活跃的"brew"进行符号链接的地方。

最新更新