[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