2013-02-02 64 views
1

我一直在使用Lupa 0.20 + LuaJIT 2.0.0在w7框中的python 2.7代碼中嵌入lua。不幸的是,我無法讓它在Mountain Lion Mac OS上運行。我能夠編譯LuaJIT和盧帕,但每當我嘗試使用LUPA,我得到這樣的錯誤:如何在Mac OS上使用lua與python山獅

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) 

是否有使其工作的任何提示?

+1

你是指「在python 2.7上嵌入lua」是什麼意思? –

+0

我想從Python腳本中使用lua腳本。 –

回答

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發行版和庫,並照常構建;爲我工作。

0

我在小牛隊工作,使用釀造安裝的Lua 5.1。也可能爲你在山獅上工作。

如果你從他們的混帳回購協議使用的版本,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()" 
0

這已經非常接近爲我工作,但小幅回落短。最近發佈了一個新版本的lupa,所以可能會有所改變。對我來說,上面幾乎工作,但我在lua運行時遇到了未定義符號的問題。

我盧帕對小牛隊做的工作如下:

  • 在家釀安裝的Lua:http://brew.sh/
  • 安裝cython:對我來說,我只是使用easy_install cython,因爲我很懶,不打算使用cython做任何其他工作。你可以用我自己的想象來使用自制軟件。
  • 下載/安裝LUPA:然後,按照上面的說明,除了,你還需要返回None作爲第二個參數。例如

    def find_lua_build(no_luajit = False): #嘗試找到本地LuaJIT2構建 os_path = os。路徑 +返回字典(庫= [ 'LUA'],include_dirs = [ '的/ usr /本地/包括']),

  • 最後,安裝python模塊,並指示顯式用Cython編譯: sudo的蟒蛇的setup.py安裝--with-用Cython

如果不工作,我會嘗試用自制的不同版本的Lua玩耍。如果你想知道爲什麼上面的setup.py指向/usr/local/include這就是自制軟件與活動「brew」的符號鏈接。