bastibe / lunatic-python

A two-way bridge between Python and Lua
http://labix.org/lunatic-python
GNU Lesser General Public License v2.1
301 stars 82 forks source link

Cannot run python in lua with python 2.7.13 #56

Open ingojahn opened 7 years ago

ingojahn commented 7 years ago

I am having a similar issue. I am working on MacOsX with python 2.7.13 and Lua 5.2. I am trying to call python from within lua.

If I try py = require 'python' I get the error: no field package.preload['python'] no file '/Users/name/dgdinst/lib/python.lua' no file '/Users/name/dgdinst/lib/python.so'

Similarly when I try py = require 'lua-python' I get the error message: dlopen(/Users/TOM/name/lib/lua-python.so, 2): Symbol not found: _PyCFunction_Type Referenced from: /Users/name/dgdinst/lib/lua-python.so Expected in: flat namespace in /Users/name/dgdinst/lib/lua-python.so

Any suggestions? Thanks

greatwolf commented 7 years ago

Where did you put the compiled python.so lua module?

ingojahn commented 7 years ago

Good question. No idea. Do you mean the python.lua file that is included in the lunatic-python (v1.0) repository? This python.lua file is called by > require 'python' and has suitable syntax to load the lua-python.so library.

I have been able to do some more digging, and I believe the issue is caused by differences between RTLD_NOW and RTLD_GLOBAL. See comment Gustavo Niemeyers comment

It's just a matter of replacing the flag RTLD_NOW in the loadlib.c file of the Lua distribution by the or'ed version RTLD_NOW|RTLD_GLOBAL.

However this proofing difficult. If I get lua from homebrew, it comes pre-compiled and I can't modify loadlib.c. If I install lua from source I don't seem to get the correct lua dynanic libraries liblua.5.2.dylib

Has anyone else succeeded with lunatic-python on a mac?

greatwolf commented 7 years ago

No, python.lua has been removed a long time ago. The lua-python.so binary has been renamed to python.so and lua.so for loading into lua and python vm respectively.

Can you show the output of the CMake build? If building with CMake->gnu make, you can add VERBOSE=1 to the make command to see the full invocation.

ingojahn commented 7 years ago

In that case I am very confused. I have downloaded a copy of the repository zip and it correctly builds the two file lua-python.so and lua.so.

At no stage is it building a python.sp

Here is the code $ gmake VERBOSE=1 python setup.py build running build running build_ext building 'lua-python' extension creating build creating build/temp.macosx-10.12-x86_64-2.7 creating build/temp.macosx-10.12-x86_64-2.7/src clang -fno-strict-aliasing -fno-common -dynamic -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/usr/local/opt/python/Frameworks/Python.framework/Versions/2.7/include/python2.7 -I/usr/local/include -I/usr/local/opt/openssl/include -I/usr/local/opt/sqlite/include -I/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c src/pythoninlua.c -o build/temp.macosx-10.12-x86_64-2.7/src/pythoninlua.o -I/usr/include/lua5.2 clang -fno-strict-aliasing -fno-common -dynamic -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/usr/local/opt/python/Frameworks/Python.framework/Versions/2.7/include/python2.7 -I/usr/local/include -I/usr/local/opt/openssl/include -I/usr/local/opt/sqlite/include -I/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c src/luainpython.c -o build/temp.macosx-10.12-x86_64-2.7/src/luainpython.o -I/usr/include/lua5.2 creating build/lib.macosx-10.12-x86_64-2.7 clang -bundle -undefined dynamic_lookup build/temp.macosx-10.12-x86_64-2.7/src/pythoninlua.o build/temp.macosx-10.12-x86_64-2.7/src/luainpython.o -L/usr/local/opt/python/Frameworks/Python.framework/Versions/2.7/lib -L/usr/local/lib -L/usr/local/opt/openssl/lib -L/usr/local/opt/sqlite/lib -lpython2.7 -o build/lib.macosx-10.12-x86_64-2.7/lua-python.so building 'lua' extension clang -fno-strict-aliasing -fno-common -dynamic -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/usr/local/opt/python/Frameworks/Python.framework/Versions/2.7/include/python2.7 -I/usr/local/include -I/usr/local/opt/openssl/include -I/usr/local/opt/sqlite/include -I/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c src/pythoninlua.c -o build/temp.macosx-10.12-x86_64-2.7/src/pythoninlua.o -I/usr/include/lua5.2 clang -fno-strict-aliasing -fno-common -dynamic -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/usr/local/opt/python/Frameworks/Python.framework/Versions/2.7/include/python2.7 -I/usr/local/include -I/usr/local/opt/openssl/include -I/usr/local/opt/sqlite/include -I/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c src/luainpython.c -o build/temp.macosx-10.12-x86_64-2.7/src/luainpython.o -I/usr/include/lua5.2 clang -bundle -undefined dynamic_lookup build/temp.macosx-10.12-x86_64-2.7/src/pythoninlua.o build/temp.macosx-10.12-x86_64-2.7/src/luainpython.o -L/usr/local/opt/python/Frameworks/Python.framework/Versions/2.7/lib -L/usr/local/lib -L/usr/local/opt/openssl/lib -L/usr/local/opt/sqlite/lib -lpython2.7 -o build/lib.macosx-10.12-x86_64-2.7/lua.so

$gmake VERBOSE=1 install python setup.py install \ --root=/ \ --prefix=/usr/local \ --install-scripts=/usr/local/bin running install running build running build_ext running install_lib copying build/lib.macosx-10.12-x86_64-2.7/lua-python.so -> /usr/local/lib/python2.7/site-packages copying build/lib.macosx-10.12-x86_64-2.7/lua.so -> /usr/local/lib/python2.7/site-packages running install_egg_info Writing /usr/local/lib/python2.7/site-packages/lunatic_python-1.0-py2.7.egg-info

greatwolf commented 7 years ago

Can you run ldd on lua-python.so followed with which on the lua and python runtime libraries to get their locations.

ingojahn commented 7 years ago

For macosx the command isotool -L lua-python.so

The output is: lua-python.so: /usr/local/opt/python/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.51.1)

which lua /usr/local/bin/lua

which python /usr/local/bin/python

greatwolf commented 7 years ago

The second error message, it could be related to this maybe http://stackoverflow.com/questions/35006614/what-does-symbol-not-found-expected-in-flat-namespace-actually-mean.

I don't have an Mac OSX to test this on so not sure how much help I can provide.

aisurfer commented 7 years ago

Hey! I have the same issue. Firstly i've got repo copy and ran 'sudo make install' (using Ubuntu 14) Next ran make $ make VERBOSE=1 python setup.py build running build running build_ext building 'lua-python' extension creating build/temp.linux-x86_64-2.7 creating build/temp.linux-x86_64-2.7/src x86_64-linux-gnu-gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/lua5.2 -I/usr/include/python2.7 -c src/pythoninlua.c -o build/temp.linux-x86_64-2.7/src/pythoninlua.o -I/usr/include/lua5.2 x86_64-linux-gnu-gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/lua5.2 -I/usr/include/python2.7 -c src/luainpython.c -o build/temp.linux-x86_64-2.7/src/luainpython.o -I/usr/include/lua5.2 creating build/lib.linux-x86_64-2.7 x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -D_FORTIFY_SOURCE=2 -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security build/temp.linux-x86_64-2.7/src/pythoninlua.o build/temp.linux-x86_64-2.7/src/luainpython.o -llua5.2 -o build/lib.linux-x86_64-2.7/lua-python.so building 'lua' extension x86_64-linux-gnu-gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/lua5.2 -I/usr/include/python2.7 -c src/pythoninlua.c -o build/temp.linux-x86_64-2.7/src/pythoninlua.o -I/usr/include/lua5.2 x86_64-linux-gnu-gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/lua5.2 -I/usr/include/python2.7 -c src/luainpython.c -o build/temp.linux-x86_64-2.7/src/luainpython.o -I/usr/include/lua5.2 x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -D_FORTIFY_SOURCE=2 -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security build/temp.linux-x86_64-2.7/src/pythoninlua.o build/temp.linux-x86_64-2.7/src/luainpython.o -llua5.2 -o build/lib.linux-x86_64-2.7/lua.so Press any key to continue... Next install $ sudo make install python setup.py install \ --root=/ \ --prefix=/usr \ --install-scripts=/usr/bin running install running build running build_ext running install_lib copying build/lib.linux-x86_64-2.7/lua-python.so -> /usr/lib/python2.7/site-packages copying build/lib.linux-x86_64-2.7/lua.so -> /usr/lib/python2.7/site-packages running install_egg_info Removing /usr/lib/python2.7/site-packages/lunatic_python-1.0-py2.7.egg-info Writing /usr/lib/python2.7/site-packages/lunatic_python-1.0-py2.7.egg-info Press any key to continue...

Next I go to test and get the error /tests$ lua test_py.lua lua: test_py.lua:1: module 'python' not found: no field package.preload['python'] no file '/usr/local/share/lua/5.2/python.lua' no file '/usr/local/share/lua/5.2/python/init.lua' no file '/usr/local/lib/lua/5.2/python.lua' no file '/usr/local/lib/lua/5.2/python/init.lua' no file '/usr/share/lua/5.2/python.lua' no file '/usr/share/lua/5.2/python/init.lua' no file './python.lua' no file '/usr/local/lib/lua/5.2/python.so' no file '/usr/lib/x86_64-linux-gnu/lua/5.2/python.so' no file '/usr/lib/lua/5.2/python.so' no file '/usr/local/lib/lua/5.2/loadall.so' no file './python.so' stack traceback: [C]: in function 'require' test_py.lua:1: in main chunk [C]: in ? Press any key to continue...

Well, set LUA_CPATH as I see libs copied to site-packages export LUA_CPATH="/usr/lib/python2.7/site-packages/?.so;;" also change 'python' -> 'lua-python' $ lua test_py.lua lua: error loading module 'lua-python' from file '/usr/lib/python2.7/site-packages/lua-python.so': /usr/lib/python2.7/site-packages/lua-python.so: undefined symbol: _Py_ZeroStruct stack traceback: [C]: in ? [C]: in function 'require' test_py.lua:1: in main chunk [C]: in ? Press any key to continue...

Weee new issue:) What does it mean? Is "lua-python.so" the right lib to use in lua scripts? Why it is installed in python2.7/site-packages ? What should I do to fix?

Thanks in advance!

cross10 commented 4 years ago

将编译好的lua-python.so改名成python.so,放到/usr/lib64/lua/5.1/python.so即可

bastibe commented 4 years ago

@cross10 could you repeat that in English?

cross10 commented 4 years ago

@cross10 could you repeat that in English?

Change the compiled lua-python.so to python.so, and put it in /usr/lib64/lua/5.1/python.so If u used was centos7.4 ,and lua's version is 5.1