Lunatic Python Installations probleme

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
stuhlbein
User
Beiträge: 89
Registriert: Freitag 9. Januar 2009, 16:08

Hallo liebe Pythonler! :)

Ich habe hier ein etwas verzwicktes Problem mit dem Lunatic Python Modul (eine Brücke zwischen LUA und Python): Ich kann es leider nicht installieren, da ich nicht weiss wie ich den Include Pfad zu den Lua50 headern in der "setup.py" einstellen soll.

Momentane fehlermeldungen beim bauen sehen so aus:

Code: Alles auswählen

$ make
python setup.py build
running build
running build_ext
building 'lua-python' extension
creating build
creating build/temp.linux-i686-2.5
creating build/temp.linux-i686-2.5/src
gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.5 -c src/pythoninlua.c -o build/temp.linux-i686-2.5/src/pythoninlua.o -rdynamic
src/pythoninlua.c:25:17: error: lua.h: No such file or directory
src/pythoninlua.c:26:21: error: lauxlib.h: No such file or directory
In file included from src/pythoninlua.c:28:
src/pythoninlua.h:28: error: expected ‘)’ before ‘*’ token
src/pythoninlua.h:35: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘int’
In file included from src/pythoninlua.c:29:
src/luainpython.h:36: error: expected ‘)’ before ‘*’ token
src/luainpython.h:38: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
src/pythoninlua.c:31: error: expected ‘)’ before ‘*’ token
src/pythoninlua.c:33: error: expected ‘)’ before ‘*’ token
src/pythoninlua.c:50: error: expected ‘)’ before ‘*’ token
src/pythoninlua.c:95: error: expected ‘)’ before ‘*’ token
src/pythoninlua.c:142: error: expected ‘)’ before ‘*’ token
src/pythoninlua.c:179: error: expected ‘)’ before ‘*’ token
src/pythoninlua.c:190: error: expected ‘)’ before ‘*’ token
src/pythoninlua.c:228: error: expected ‘)’ before ‘*’ token
src/pythoninlua.c:257: error: expected ‘)’ before ‘*’ token
src/pythoninlua.c:269: error: expected ‘)’ before ‘*’ token
src/pythoninlua.c:313: error: expected ‘)’ before ‘*’ token
src/pythoninlua.c:322: error: expected ‘)’ before ‘*’ token
src/pythoninlua.c:343: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘py_object_lib’
src/pythoninlua.c:352: error: expected ‘)’ before ‘*’ token
src/pythoninlua.c:406: error: expected ‘)’ before ‘*’ token
src/pythoninlua.c:411: error: expected ‘)’ before ‘*’ token
src/pythoninlua.c:416: error: expected ‘)’ before ‘*’ token
src/pythoninlua.c:427: error: expected ‘)’ before ‘*’ token
src/pythoninlua.c:438: error: expected ‘)’ before ‘*’ token
src/pythoninlua.c:445: error: expected ‘)’ before ‘*’ token
src/pythoninlua.c:458: error: expected ‘)’ before ‘*’ token
src/pythoninlua.c:486: error: expected ‘)’ before ‘*’ token
src/pythoninlua.c:502: error: expected ‘)’ before ‘*’ token
src/pythoninlua.c:521: error: expected ‘)’ before ‘*’ token
src/pythoninlua.c:545: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘py_lib’
src/pythoninlua.c:558: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘int’
error: command 'gcc' failed with exit status 1
make: *** [all] Error 1


Der Inhalt der "setup.py" sieht so aus(anm: die "Makefile" übernimmt nur die aufrufe der setup.py):

Code: Alles auswählen

from distutils.core import setup, Extension
from distutils.sysconfig import get_python_lib, get_python_version
import os

if os.path.isfile("MANIFEST"):
    os.unlink("MANIFEST")

# You may have to change these
PYLIBS = ["python"+get_python_version(), "pthread", "util"]
PYLIBDIR = [get_python_lib(standard_lib=True)+"/config"]
LUALIBS = ["lua", "lualib"]
LUALIBDIR = []

setup(name="lunatic-python",
      version = "1.0",
      description = "Two-way bridge between Python and Lua",
      author = "Gustavo Niemeyer",
      author_email = "gustavo@niemeyer.net",
      url = "http://labix.org/lunatic-python",
      license = "LGPL",
      long_description =
"""\
Lunatic Python is a two-way bridge between Python and Lua, allowing these
languages to intercommunicate. Being two-way means that it allows Lua inside
Python, Python inside Lua, Lua inside Python inside Lua, Python inside Lua
inside Python, and so on.
""",
      ext_modules = [
                     Extension("lua-python",
                               ["src/pythoninlua.c", "src/luainpython.c"],
                               library_dirs=PYLIBDIR,
                               libraries=PYLIBS,
                               extra_compile_args=["-rdynamic"],
                               extra_link_args=["-rdynamic"]),
                     Extension("lua",
                               ["src/pythoninlua.c", "src/luainpython.c"],
                               library_dirs=LUALIBDIR,
                               libraries=LUALIBS,
                               extra_compile_args=["-rdynamic"],
                               extra_link_args=["-rdynamic"]),
                    ],
      )

Die Header dateien für Lua50 und Lua51 sind aber definitiv installiert.

Wär super wenn mir da jemand einen rat geben könnte, da einfach praktisch jede änderung in der setup.py anscheinend gänzlich ignoriert wird.... :(
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Hallo und willkommen im Forum,
Bitfish hat geschrieben:Die Header dateien für Lua50 und Lua51 sind aber definitiv installiert.
Aber das weiß der Compiler nicht. Ggf. hilft es den LD_LIBRARY_PATH oder INCLUDEPATH zu setzen?

HTH
Christian

PS Vielleicht demnächst so langen Code besser in ein pastebin auslagern?
stuhlbein
User
Beiträge: 89
Registriert: Freitag 9. Januar 2009, 16:08

CM hat geschrieben:Hallo und willkommen im Forum,
Bitfish hat geschrieben:Die Header dateien für Lua50 und Lua51 sind aber definitiv installiert.
Aber das weiß der Compiler nicht. Ggf. hilft es den LD_LIBRARY_PATH oder INCLUDEPATH zu setzen?

HTH
Christian
Hab ich probiert, hat leider nichts gebracht.
PS Vielleicht demnächst so langen Code besser in ein pastebin auslagern?
Sorry :)
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Ok, denn mal was genauer:
- Welches OS hast Du ?
- Die Header sind nicht Teil des Downloads - wie hast Du sie installiert? Wo liegen sie?

Gruß,
Christian
stuhlbein
User
Beiträge: 89
Registriert: Freitag 9. Januar 2009, 16:08

CM hat geschrieben:Ok, denn mal was genauer:
- Welches OS hast Du ?
Ubuntu Linux 8.10
- Die Header sind nicht Teil des Downloads - wie hast Du sie installiert? Wo liegen sie?
Natürlich nicht, die Header liegen in /usr/include/lua5.1.

Nachdem ich (auf extrem umständliche art) das Problem mit den Headern gelöst habe, Kommen nun andere Probleme, die leider keinerlei sinn ergeben, da die symbole (shared objects) garantiert alle vorhanden sind...:

Code: Alles auswählen

python setup.py build
running build
running build_ext
building 'lua' extension
gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions build/temp.linux-i686-2.5/src/pythoninlua.o build/temp.linux-i686-2.5/src/luainpython.o -llua -llualib -o build/lib.linux-i686-2.5/lua.so -rdynamic
/usr/bin/ld: cannot find -llua
collect2: ld returned 1 exit status
error: command 'gcc' failed with exit status 1
make: *** [all] Error 1
... 'ld' kann "lua(.so)" nicht finden, obwohl diese garantiert existiert! ich weiss echt nicht weiter. Muss allerdings auch zugeben, dass sich meine C Kenntnisse auf "Hello World" programme beschränken. :(
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Wie heißt denn die Lua-Lib? Und wo liegt sie?
Bsp:

Code: Alles auswählen

/bogus/pfad/libklaus_ist_im_haus.a
==> -L/bogus/pfad -lklaus_ist_im_haus
Liegt klaus_ist_im_haus im ld-Pfad, ist das -L unnötig.

Vllt. reicht es ja das -llua mit -llua5.1 zu ersetzen.
stuhlbein
User
Beiträge: 89
Registriert: Freitag 9. Januar 2009, 16:08

jerch hat geschrieben:Wie heißt denn die Lua-Lib? Und wo liegt sie?
Bsp:

Code: Alles auswählen

/bogus/pfad/libklaus_ist_im_haus.a
==> -L/bogus/pfad -lklaus_ist_im_haus
Liegt klaus_ist_im_haus im ld-Pfad, ist das -L unnötig.

Vllt. reicht es ja das -llua mit -llua5.1 zu ersetzen.
Hah! Ja, daran lag es tatsächlich :D

Leider kommt jetzt wieder das nächste Problem ....:

Code: Alles auswählen

>>> import lua
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: /usr/lib/python2.5/site-packages/lua.so: undefined symbol: luaopen_loadlib
>>> 
Und ich weiss so langsam wirklich nicht mehr weiter. :(
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

An dieser Stelle würde ich mal den Entwickler anschreiben und das Problem schildern.

Gruß,
Christian
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Da hat sich was in der lualib.h getan:
lua-5.0.3:

Code: Alles auswählen

#ifndef lualib_h
#define lualib_h

#include "lua.h"


#ifndef LUALIB_API
#define LUALIB_API	LUA_API
#endif


#define LUA_COLIBNAME	"coroutine"
LUALIB_API int luaopen_base (lua_State *L);

#define LUA_TABLIBNAME	"table"
LUALIB_API int luaopen_table (lua_State *L);

#define LUA_IOLIBNAME	"io"
#define LUA_OSLIBNAME	"os"
LUALIB_API int luaopen_io (lua_State *L);

#define LUA_STRLIBNAME	"string"
LUALIB_API int luaopen_string (lua_State *L);

#define LUA_MATHLIBNAME	"math"
LUALIB_API int luaopen_math (lua_State *L);

#define LUA_DBLIBNAME	"debug"
LUALIB_API int luaopen_debug (lua_State *L);


LUALIB_API int luaopen_loadlib (lua_State *L);


/* to help testing the libraries */
#ifndef lua_assert
#define lua_assert(c)		/* empty */
#endif


/* compatibility code */
#define lua_baselibopen	luaopen_base
#define lua_tablibopen	luaopen_table
#define lua_iolibopen	luaopen_io
#define lua_strlibopen	luaopen_string
#define lua_mathlibopen	luaopen_math
#define lua_dblibopen	luaopen_debug

#endif
gegenüber 5.1:

Code: Alles auswählen

#ifndef lualib_h
#define lualib_h

#include "lua.h"


/* Key to file-handle type */
#define LUA_FILEHANDLE		"FILE*"


#define LUA_COLIBNAME	"coroutine"
LUALIB_API int (luaopen_base) (lua_State *L);

#define LUA_TABLIBNAME	"table"
LUALIB_API int (luaopen_table) (lua_State *L);

#define LUA_IOLIBNAME	"io"
LUALIB_API int (luaopen_io) (lua_State *L);

#define LUA_OSLIBNAME	"os"
LUALIB_API int (luaopen_os) (lua_State *L);

#define LUA_STRLIBNAME	"string"
LUALIB_API int (luaopen_string) (lua_State *L);

#define LUA_MATHLIBNAME	"math"
LUALIB_API int (luaopen_math) (lua_State *L);

#define LUA_DBLIBNAME	"debug"
LUALIB_API int (luaopen_debug) (lua_State *L);

#define LUA_LOADLIBNAME	"package"
LUALIB_API int (luaopen_package) (lua_State *L);


/* open all previous libraries */
LUALIB_API void (luaL_openlibs) (lua_State *L); 



#ifndef lua_assert
#define lua_assert(x)	((void)0)
#endif


#endif
luaopen_loadlib gibts nicht mehr.
Entweder lua 5.0 installieren oder den Entwickler um eine aktuellere Version des Moduls bitten. Oder selber fixen ;)
stuhlbein
User
Beiträge: 89
Registriert: Freitag 9. Januar 2009, 16:08

jerch hat geschrieben:Da hat sich was in der lualib.h getan:

[....]

Entweder lua 5.0 installieren oder den Entwickler um eine aktuellere Version des Moduls bitten. Oder selber fixen ;)
Schade.. ich werds aber auf jedenfall nochmal mit Lua50 probieren. Lunatic Python lass ich mir nicht so einfach entgehen :D

-----

edit: Leider auch kein Erfolg...:

Code: Alles auswählen

>>> import lua
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: /usr/lib/python2.5/site-packages/lua.so: undefined symbol: luaopen_table
>>> 
*argh* :(
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Also in der 5.0.3 ist das definiert. Wahrscheinlich haben die Lua-Leute auch für minors die "API" geändert.
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Hier mal ein Patch, der Lunatic Python mit Lua 5.1 und Python 2.5/2.6 bauen lässt und das Modul (hoffentlich) auch benutzbar macht.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
stuhlbein
User
Beiträge: 89
Registriert: Freitag 9. Januar 2009, 16:08

EDIT: es klappt endlich! \o/

Änderungen die gemacht werden mussten:

1. diese setup.py verwenden

2. Patch von Trundle einspielen

3. Patch für die "python.lua" einspielen

4. python.lua in den Include path von Lua5.1 verschieben: cp python.lua /usr/share/lua/5.1/

Die kompletten schritte sind in besserer form auf lua-users.org nachlesbar.

Notiz: Ich hab es *nicht* mit Lua50 zum laufen bekommen, ein Upgrade auf Lua5.1 ist aus meiner sicht unumgänglich!
stuhlbein
User
Beiträge: 89
Registriert: Freitag 9. Januar 2009, 16:08

Trundle hat geschrieben:Hier mal ein Patch, der Lunatic Python mit Lua 5.1 und Python 2.5/2.6 bauen lässt und das Modul (hoffentlich) auch benutzbar macht.
Danke Trundle! Und natürlich auch ein riesendanke an alle anderen! :D

Lunatic Python ist sicher nicht perfekt (man kann einige Module nicht importieren), aber der aufwand hat sich IMHO gelohnt! :D
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Wobei mein Patch einen Fehler hat, "if (!PyType_Ready(...) < 0)" ist natürlich quatsch. Ist hier behoben.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
Antworten