[Python-de] Umstellen von Python2.6 auf 2.7 unter MacOS - setuptools installieren geht auch nicht

Alexander Schlarb alexander255 at lavabit.com
Do Jul 12 19:27:05 CEST 2012


On Don, 2012-07-12 at 18:32 +0200, Yu-Fang Helena Wang wrote:
> 
> Hallo Thomas,
> 
> Vielen Dank für deine Antwort. 
> 
> Am 12.07.12 13:38, schrieb Thomas Waldmann:
> 
> > > sh setuptools-0.6c11-py2.7.egg
> > > Das war das einzige egg, das passte. Fehlermeldung:
> > > 
> > > 
> > > *setuptools-0.6c11-py2.7.egg: line 3: exec: python2.7: not found*
> > Also ich kenn mich mit Python auf Mac nicht so aus, aber das hoert sich
> > eher so an, als ob das python2.7 Binary nicht im Suchpfad (PATH) ist.
> > 
> > Tipp doch mal auf einer Shell "python2.7<enter>" ein.
> 
> OK, getippt:
> $ python2.7
> Python 2.7.3 (default, Jul 11 2012, 17:37:48) 
> [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
> Type "help", "copyright", "credits" or "license" for more information.
> >>> 
> 
> Vorher hatte ich mit "pythonbrew switch 2.7.3" auf das neu
> installierte Python umgeschaltet.
> 
> Was sollte denn im .bash_profile drinstehen? (Das heißt in MacOS so,
> unter Linux glaub ich .bashrc)
> Python war zum Zeitpunkt des Tests in der Tat auf 2.6 gestellt. Das
> ist der Inhalt von .bash_profile für Python2.7:
> 
> #!/bin/bash
> 
> PATH="/Library/Frameworks/Python.framework/Versions/2.7/bin:${PATH}"
> export PATH
> 
> PYTHONPATH =
> "$/Library/Python/2.7/site-packages:/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7:/Library/Frameworks/Python.framework/Versions/2.7/lib:/Library/Frameworks/Python.framework/Versions/2.7/lib/site-packages:/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin:/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac:/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages:/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk:/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload$PYTHONPATH"
> export PYTHONPATH
> 
> 
> [[ -s "$HOME/.pythonbrew/etc/bashrc" ]] && source
> "$HOME/.pythonbrew/etc/bashrc"
> 
> Das gibt folgenden Fehler:
> 
> $ source .bash_profile
> -bash: PYTHONPATH: command not found
> 
> Komischerweise funktioniert die gleiche Syntax für Python2.6.
> 
> Im Internet wurde folgendes vorgeschlagen, führt aber zu derselben
> Fehlermeldung:
> PYTHONPATH = "$
> {PYTHONPATH} : /Library/Python/2.7/site-packages:/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7:/Library/Frameworks/Python.framework/Versions/2.7/lib:/Library/Frameworks/Python.framework/Versions/2.7/lib/site-packages:/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin:/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac:/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages:/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk:/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload"
> 
> Was ist denn nun richtig, um den Pfad für Python 2.7 zu setzen??
> Danach kann ich hoffentlich endlich mit setuptools weitermachen.
> 
> PS: meine Güte, geht das langsam...Ich wollte schon letzte Woche
> Python 2.7 mit Django und South installiert haben. 
> 
> Grüße + danke,
> Suesssauer
> 
> 
> > 
> > > Das ist ja kein Wunder, ich hab ja schließlich Python2.7.3
> > > installiert.
> > Das Binary heisst trotzdem nur "python2.7" (bzw. "python").
> > 
> > .3 ist ja nur ne Bugfix-Release und ansonsten kompatibel.
> > 
> > > Was tue ich denn bitte jetzt? Ich will nach wie vor neue Pakete
> > > installieren und zwar mindestens Django und South. Aber natürlich auch
> > > alles andere. Bringt mir da virtualenv was?
> > > 
> > virtualenv ist immer nett, um verschiedene Umgebungen separat (auch
> > separat vom System) zu installieren. pip ist auch sehr nuetzlich (bei
> > virtualenv dabei neuerdings iirc).
> > 
> > 
> > 
> > 
> > _______________________________________________
> > python-de maillist  -  python-de at python.org
> > http://mail.python.org/mailman/listinfo/python-de
> 
> 
> _______________________________________________
> python-de maillist  -  python-de at python.org
> http://mail.python.org/mailman/listinfo/python-de


Hallo,

Hier sind die Probleme mit deinem Shell Script: (gekürzt mit [...])

PYTHONPATH = "$ {PYTHONPATH} : /Library/Python/2.7/si[...]"
__________^_^__^____________^_^

Leerzeichen haben in Shell-Skript eine strikte Bedeutung: Sofern sie nicht
maskiert sind (") gelten sind IMMER als Parametertrenner.

Eine Shell (in diesem Falle bash) interpretiert immer den ersten Ausdruck, der kein ist-gleich (=) enthält, als auszuführenden Befehl.

In deinem Beispiel bedeutet, das das "PYTHONPATH" (auf das anschließende
Leerzeichen achten!) als Befehl interpretiert wird. Daher auch die
entsprechende Fehlermeldung:
>-bash: PYTHONPATH: command not found

Wenn wir nun allerdings nun schreiben würden:
PYTHONPATH= "$ {PYTHONPATH} : /Library/Python/2.7/si[...]"
Wäre dies immer noch nicht korrekt da er nun der Variable $PYTHONPATH den Wert ""
zuweist (anschließendes Leerzeichen!) und daher dann den nächsten
Parameter mit $PYTHONPATH als Umgebungsvariable ausführt (bedingt durch die Maskierung
wäre das: "$ {PYTHONPATH} : /Library/Python/2.7/si[...]", ohne Anführungszeichen und Kürzung)

Korrekt (rein Zuweisungstechnisch) wäre daher:
PYTHONPATH="$ {PYTHONPATH} : /Library/Python/2.7/si[...]"
Nun wird der Shell-Variable $PYTHONPATH der Wert "$
{PYTHONPATH} : /Library/Python/2.7/si[...]" zugewiesen, da keine
Parameter ohne ein ist-gleich folgen wird der Wert in einer
Shell-internen Liste gespeichert. Das anschließende "export PYTHONPATH"
setzt die Variable, dann als Umgebungsvarible für alle folgenden
Befehlsaufrufe.


Allerdings gibt jetzt immernoch 2 Probleme:
 1. Das Leerzeichen in "$ {PYTHONPATH}"
Da hier eine Variable (mit dem vorherigen Wert von $PYTHONPATH)
eingefügt werden soll muss das Leerzeichen entfernt werden damit die
Shell dies erkennt. (Korrekt: "${PYTHONPATH}" oder "$PYTHONPATH")
 2. Die Leerzeichen um den ersten Doppelpunkt herum (" : ")
Ich weiß jetzt nicht wie Python diese Dinge handhabt aber vermutlich
werden Leerzeichen um Dateinamen nicht automatisch gelöscht. Daher wird
Python vermutlich nach einem Verzeichnis
" /Library/Python/2.7/site-packages" suchen. Da es im aktuellen
Verzeichnis vermutlich keinen Ordner Namens " " geben wird (oder jener
nicht die entsprechenden Unterordner enthalten wird) wird dies
Fehlschlagen.

Korrekt wäre daher:
PYTHONPATH="${PYTHONPATH}:/Library/Python/2.7/site-packages:/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7:/Library/Frameworks/Python.framework/Versions/2.7/lib:/Library/Frameworks/Python.framework/Versions/2.7/lib/site-packages:/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin:/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac:/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages:/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk:/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload"


LG ALexander

PS: Ich hoffe dies war ein interessanter Exkurs in die
Shell-Programmierung 




Mehr Informationen über die Mailingliste python-de