Cheetah mit Fritzbox kompilieren. OPT nicht akzeptiert?

Django, Flask, Bottle, WSGI, CGI…
Antworten
kiesel
User
Beiträge: 7
Registriert: Montag 18. Februar 2013, 00:51

Hi,

ich würde gerne auf meiner Fritzbox 7390 auf der Python 2.7 läuft Cheetah installieren. Alle Dateien die ich benötige liegen auf einer angeschlossenen USB-Festplatte.
Wenn ich

Code: Alles auswählen

python setup.py install
aufrufe, laufe ich in der sysconfig.py in Probleme.

Code: Alles auswählen

root@fritz:/var/media/ftp/container/apps/cheetah# python  setup.py install
Not using setuptools, so we cannot install the Markdown dependency
running install
running build
running build_py
running build_ext
Traceback (most recent call last):
  File "setup.py", line 13, in <module>
    SetupTools.run_setup( configurations )
  File "/var/media/ftp/container/apps/cheetah/SetupTools.py", line 158, in run_setup
    setup(**kws)
  File "/usr/lib/python2.7/distutils/core.py", line 152, in setup
  File "/usr/lib/python2.7/distutils/dist.py", line 953, in run_commands
  File "/usr/lib/python2.7/distutils/dist.py", line 972, in run_command
  File "/usr/lib/python2.7/distutils/command/install.py", line 563, in run
  File "/usr/lib/python2.7/distutils/cmd.py", line 326, in run_command
  File "/usr/lib/python2.7/distutils/dist.py", line 972, in run_command
  File "/usr/lib/python2.7/distutils/command/build.py", line 127, in run
  File "/usr/lib/python2.7/distutils/cmd.py", line 326, in run_command
  File "/usr/lib/python2.7/distutils/dist.py", line 972, in run_command
  File "/var/media/ftp/container/apps/cheetah/SetupTools.py", line 49, in run
    build_ext.run(self)
  File "/usr/lib/python2.7/distutils/command/build_ext.py", line 309, in run
  File "/usr/lib/python2.7/distutils/sysconfig.py", line 201, in customize_compiler
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
root@fritz:/var/media/ftp/container/apps/cheetah# 
Daraufhin habe ich die Umgebungsvariablen folgendermaßen angepasst

Code: Alles auswählen

export PATH=/usr/mips-linux-uclibc/bin:${PATH}
export CC=/var/media/ftp/container/apps/gcctarget/usr/usr/bin/mips-linux-uclibc-gcc
export LDFLAGS=-L/var/media/ftp/container/apps/gcctarget/usr/usr/mips-linux-uclibc/lib
export CPPFLAGS=-I/var/media/ftp/container/apps/gcctarget/usr/usr/mips-linux-uclibc/include
export CPP=/var/media/ftp/container/apps/gcctarget/usr/usr/bin/mips-linux-uclibc-cpp
export CROSS_COMPILE=mips-linux-uclibc- 
export ARCH=mips-linux
export BLDSHARED="${CC} -shared"
export LDSHARED="${BLDSHARED}"
export CFLAGS="-O2 -pipe -march=4kc -Wa,--trap -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64"
export OPT="-Os"
Was auch dazu führte, dass einige der Variablen erkannt wurden, aber egal was ich tue, OPT wird nicht akzeptiert.
Kann mir jemand helfen und sagen was ich falsch mache?

Danke und Grüsse,
Kiesel
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Wie kommst du darauf dass du diese Variablen setzen musst? Der Fehler ist einfach ein Fehler im Python-Quelltext, da steht offenbar sowas wie `foo + "abc"` und `foo` hat den Wert `None`.

An sich wuerde ich generell mal von Cheetah abraten und eher Mako oder Jinja2 nutzen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
kiesel
User
Beiträge: 7
Registriert: Montag 18. Februar 2013, 00:51

Das was ich eigentlich will, SABnzbd, braucht nunmal Cheetah :)

Und ich weiss, dass ich diese Umgebungsvariablen brauche weil ich den code in /usr/lib/python2.7/distutils/sysconfig.py gelesen habe und der liest genau diese Umgebungsvariablen.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ich bin mir gerade nicht sicher, dass es tatsächlich Umgebungsvariablen liest. Also, ja, es liest schon einige, also `CC`, `CXX`, `LDSHARED`, `CPP`, `LDFLAGS`, `CFLAGS`, `CPPFLAGS`, `AR` und `ARFLAGS`, aber nicht `OPT`. Ich vermute der Wert `opt` aus `/usr/lib/python2.7/distutils/sysconfig.py` kommt von irgendwo anders, genauer von nirgendwo und das ist auch genau das Problem. Ich nehme an, irgendwie muss wohl deine Python-Installation oder genauer die auf der Fritzbox nicht 100% in Ordnung sein.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
kiesel
User
Beiträge: 7
Registriert: Montag 18. Februar 2013, 00:51

Also python ist jetzt sicher nicht mein Spezialgebiet, aber OPT wird doch hier gelesen, oder? :)

Code: Alles auswählen

 if compiler.compiler_type == "unix":
        (cc, cxx, opt, cflags, ccshared, ldshared, so_ext, ar, ar_flags) = \ 
            get_config_vars('CC', 'CXX', 'OPT', 'CFLAGS',
                            'CCSHARED', 'LDSHARED', 'SO', 'AR',
                            'ARFLAGS')
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Schau mal wo in ``get_config_vars()`` OPT gelesen wird, ich hatte es nicht finden können.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
kiesel
User
Beiträge: 7
Registriert: Montag 18. Februar 2013, 00:51

Ich hätte jetzt gesagt hier, kann aber auch gut falsch sein, da das setzen der Umgebungsvariable ja leider nicht hilft

Code: Alles auswählen

552	n/a	    if args:
553	n/a	        vals = []
554	n/a	        for name in args:
555	n/a	            vals.append(_config_vars.get(name))
556	n/a	        return vals
557	n/a	    else:
558	n/a	        return _config_vars
Trotzdem wird der Fehler ja hier geworfen

Code: Alles auswählen

205	n/a	            cflags = opt + ' ' + os.environ['CFLAGS']
Ich bin leider am Ende mit meinem Latein, opt wird auch sonst nirgendwo angesprochen als in den obigen beiden Codezeilen...

Referenz von hier:
http://coverage.livinglogic.de/Lib/dist ... ig.py.html
BlackJack

@kiesel: Bei dem Quelltext ist dann die Frage wo die OPT-Umgebungsvariable in `_config_vars` hinein kommt. Denn wenn es da nicht drin ist, bekommt man von dem `get()`-Aufruf genau das `None` welches zu dem Problem führt.
kiesel
User
Beiträge: 7
Registriert: Montag 18. Februar 2013, 00:51

Da args nicht leer ist wird vals zurückgegeben, so lese ich es und args ist mit

Code: Alles auswählen

'CC', 'CXX', 'OPT', 'CFLAGS',
                            'CCSHARED', 'LDSHARED', 'SO', 'AR',
                            'ARFLAGS'
ja nicht leer :K
BlackJack

@kiesel: Ja aber es müssen ja nicht alle Schlüssel in `args` auch einen Wert in `_config_vars` haben. Und wenn da ein Wert nicht vorhanden ist, dann bekommt man für den Schlüssel `None`.
kiesel
User
Beiträge: 7
Registriert: Montag 18. Februar 2013, 00:51

Und genau deswegen dachte ich OPT setzen würde helfen :? Tut es nur leider nicht...
BlackJack

@kiesel: Nochmal: Die Frage ist doch ob die Umgebungsvariable OPT überhaupt jemals in dieses Wörterbuch gelangt. Dafür habe ich bis jetzt noch keinen Python-Code gesehen.
kiesel
User
Beiträge: 7
Registriert: Montag 18. Februar 2013, 00:51

Ah, sorry, da hab ich den Wald vor lauter Bäumen nicht gesehen. Ich werds mir mal ankucken.
Antworten