Package: ffilupa
A modern two-way bridge between Python and Lua.ContentsMajor FeaturesWhy ffilupaInstallationUsageAcknowledgementsMajor FeaturesFor Python UsersIntegrate Lua into Python usingCFFIas backend, which runs fast on both CPython and PyPy.Run multiple Lua runtimes in one Python process.Link to multiple lua libraries installed in system and use theirluarocks.Zero-copy data sharing between Python and Lua.Seamless operations on Lua objects.Hackable and extendable; customizable interacting behaviors.Parallel numerical calculation using Lua to break the limit of Python’s GIL.For Lua UsersEnrich Lua’s abilities by using Python’s modules.Link to CPython and PyPy.Seamless operations on Python objects.Above all, ffilupa has plenty of fun!Why ffilupaCompare tolupalupa uses Cython as it’s backend, which is less friendly to PyPy and not extendable.lupa doesn’t support Lua as the host language, which means you can’t use it in a Lua program.lupa doesn’t support seamless operations on Lua objects.lupa is not under actively development.lupa inspired ffilupa a lot.Compare toLunaticPythonWell, LunaticPython is too old and out of development for a long time.LunaticPython doesn’t support multiple Lua runtimes.LunaticPython leaks new features.InstallationBefore installing ffilupa, please check whether you have installed the development library of lua.
On Ubuntu, you can installliblua5.3-devorliblua5.2-dev:$ sudo apt install [liblua5.3-dev|liblua5.2-dev]On Mac OS X, you can useHomebrew:$ brew install lua pkg-configDuring installation, ffilupa will automatically find lua libraries throughpkg-config.Make sure you have installed Python 3.5+ in your system,
including it’s development files and the suitable C compiler.
On Ubuntu:$ sudo apt install python3-devOn Mac OS X:$ brew install pythonYou’d better install the dependencies of ffilupa:$ pip install cffi semantic_versionIt’s optional; ffilupa will install them if you haven’t installed before.Install stable versionFor Python Users$ pip install ffilupaInstall development version from Git branchFor Python Users$ pip install git+https://github.com/TitanSnow/ffilupa.gitFor Lua UsersMake sure you have installedluarocks.$ git clone https://github.com/TitanSnow/ffilupa.git
$ cd ffilupa
$ luarocks makeFAQ about installationHow to deal with the exception ‘Required lua lib not found’?Please check the installation of Lua. ffilupa currently only supports Lua 5.2 and 5.3.
Then reinstall ffilupa in order to find the recently installed Lua libraries.Does ffilupa support Windows?ffilupacansupport Windows, but not now. It might support Windows in next minor release.UsageFor Python UsersA Brief Look>>>importffilupa>>>lua=ffilupa.LuaRuntime()>>>lua_func=lua.eval('''...function(a, b) -- a plus b...return a + b...end...''')>>>lua_func(22,33)55Access Globals of 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!Zero-copy Data Sharing>>>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'Deal with Lua Table>>>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 theFor Lua UsersA Brief Lookffilupa=require'ffilupa'Fraction=ffilupa.import_module('fractions').Fractiona=Fraction(1,2)b=Fraction(1,3)c=a+b-- c == 5/6Extend Lua’s AbilitiesPath=ffilupa.import_module('pathlib').Pathp=Path('.')p=p/'ffilupa'for_,filenameinpairs(p:iterdir())doprint(filename)-- print all filename in ./ffilupaendAcknowledgementsCFFIlupa