python中lua的cffi绑定
ffilupa的Python项目详细描述
连接python和lua的现代双向桥梁。
Major Features
对于python用户
对于lua用户
- 通过使用python的模块来丰富lua的能力。
- 链接到cpython和pypy。
- 对python对象的无缝操作。
最重要的是,菲卢帕有很多乐趣!
Why ffilupa
与lupa
相比- lupa使用cython作为后端,这对pypy不太友好,并且不可扩展。
- lupa不支持lua作为宿主语言,这意味着您不能在lua程序中使用它。
- lupa不支持对lua对象的无缝操作。
- lupa没有得到积极的发展。
- 卢帕启发了菲卢帕很多。
与LunaticPython
相比- 好吧,LunaticPython太老了,已经很久没有开发了。
- lunaticpython不支持多个lua运行时。
- lunaticpython泄露了新功能。
Installation
在安装ffilupa之前,请检查您是否安装了lua的开发库。 在ubuntu上,你可以安装liblua5.3-dev或liblua5.2-dev:
$ sudo apt install [liblua5.3-dev|liblua5.2-dev]
在Mac OS X上,您可以使用Homebrew:
$ brew install lua pkg-config
在安装过程中,ffilupa将通过pkg-config自动找到lua库。
确保在系统中安装了Python3.5+, 包括它的开发文件和合适的c编译器。 在ubuntu上:
$ sudo apt install python3-dev
在Mac OS X上:
$ brew install python
最好安装ffilupa的依赖项:
$ pip install cffi semantic_version
这是可选的;如果您以前没有安装过,ffilupa会安装它们。
安装稳定版本
python用户的。
$ pip install ffilupa
从git branch安装开发版本
对于python用户
$ pip install git+https://github.com/TitanSnow/ffilupa.git
对于lua用户
确保已安装luarocks。
$ git clone https://github.com/TitanSnow/ffilupa.git $ cd ffilupa $ luarocks make
有关安装的常见问题解答
如何处理异常“找不到必需的lua lib”?
请检查lua的安装。ffilupa目前只支持lua 5.2和5.3。 然后重新安装ffilupa以查找最近安装的lua库。
ffilupa是否支持windows?
ffilupa可以支持windows,但现在不行。它可能在下一个小版本中支持windows。
Usage
对于python用户
简要介绍
>>> importffilupa>>> lua=ffilupa.LuaRuntime()>>> lua_func=lua.eval('''
... function(a, b) -- a plus b
... return a + b
... end
... ''')>>> lua_func(22,33)55
访问lua的全局变量
>>> defgreeting(name='World'):# greeting someone... print('Hello, {}!'.format(name))>>> lua._G.greeting=greeting>>> lua.execute('greeting()')Hello, World! >>> lua.execute('greeting("John")')Hello, John!
零拷贝数据共享
>>> poem={... 'the':'quick',... 'brown':'fox',... 'jumps':'over',... }>>> lua_func=lua.eval('''
... function(poem) -- finish the poem
... poem['lazy'] = 'doges'
... end
... ''')>>> lua_func(poem)>>> poem['lazy']'doges'
处理lua表
>>> table=lua.table_from(poem)>>> lua_func=lua.eval(''' ... function(poem) -- shuffle the poem ... local new_poem = {} ... for k, v in pairs(poem) do ... new_poem[v] = k ... end ... return new_poem ... end ... ''')>>> new_poem=lua_func(table)>>> forkinsorted(new_poem):... print(k,new_poem[k],end=' ')doges lazy fox brown over jumps quick the