OS X Python 3 neben Python 2.7.x

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
seishin
User
Beiträge: 87
Registriert: Montag 19. Dezember 2011, 16:42

Hi,

ist es möglich unter OS X Python 3 neben Python 2.7.x zu installieren?
Gibt es da einen "manager" für? Wie bei Ruby?


Danke für eure Aufmerksamkeit.

Greatz
sei
webspider
User
Beiträge: 485
Registriert: Sonntag 19. Juni 2011, 13:41

Wenn man brew verwendet, ist es relativ unproblematisch (außer allen unterstützten Formeln) eine Menge Werkzeuge fürs Entwickeln auf aktuellem Stand zu halten, unter anderem auch Python 2 und 3.
seishin
User
Beiträge: 87
Registriert: Montag 19. Dezember 2011, 16:42

Super danke dir!
brave
User
Beiträge: 24
Registriert: Mittwoch 24. Februar 2016, 18:30

Hallo,
ich würde das Thema gerne mal wieder aufgreifen, da ich ein ähnliches Problem habe.

Normalerweise hole ich alle meine Tools über Homebrew auf den Mac, wenn sie dort verfügbar sind. Allerdings gefällt mir der Paketmanager 'conda' von Continuum Analytics sehr gut, weshalb ich meine Python 3.5 Installation in der Regel von dort beziehe.

Problem:
Ich will Python 3 als System Standard, also im PATH ganz oben. Kein Problem aber, dann meckert "brew doctor", dass es lieber Python 2 haben will, weil es sonst Konflikte giben kann.

Frage:
Wie schaffe ich es Python 3 als System default im PATH zu haben (ist schon) und gleichzeitig homebrew zu sagen, dass es von mir aus die OSX default python 2.7 installation in /usr/bin nutzen soll statt sich in der lokalen environment zu bedienen?

Hat Homebrew irgendwo ein Config file, wo man den Python-Path explizit spezifizieren kann?

Danke und Gruß
brave
BlackJack

@brave: Ich verstehe das Problem nicht so ganz. Bei Python 3 heisst der Interpreter ``python3`` wohingegen ``python`` *immer* Python 2 meint (Davon ausgehend das keiner der bei Verstand ist noch Python 1.x einsetzt.). Man kann also beide problemlos nebeneinander installieren.
brave
User
Beiträge: 24
Registriert: Mittwoch 24. Februar 2016, 18:30

Hm, irgendwie macht mich der ganze PATH und Python Versions Krempel fertig.
Wenn ich "python" in die Konsole tippe startet nach der Miniconda Installation die Python 3.5 Shell und nicht die 2.7. Das merkt auch "brew-doctor".
Erst wenn ich den Pfad in der bash-profile zur Miniconda-Installation rausnehme und das Terminal neu starte greift bei Eingabe con "python" die Standard 2.7 Shell.

Was muss ich denn jetzt wie ändern, damit es so ist wie ich mir das wünsche?
BlackJack

@brave: Ich würde sagen dann ist miniconda nicht ”nett” wenn das Python 3 als ``python`` zur Verfügung stellt. Das ist sehr überraschend.
brave
User
Beiträge: 24
Registriert: Mittwoch 24. Februar 2016, 18:30

OK, ich hab jetzt glaube ich rausgefunden woran das liegt.
1. Ich habe den Pfad zur miniconda-installation in meiner bash_profile nach hinten geschoben, also von

Code: Alles auswählen

export PATH="$HOME/bin/miniconda3/bin:$PATH"
nach

Code: Alles auswählen

export PATH="$PATH:$HOME/bin/miniconda3/bin"
meine path Liste sieht jetzt so aus:

Code: Alles auswählen

/Users/****/bin/scripts
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
/Users/****/bin/miniconda3/bin
Jetzt sucht das System zuerst in /usr/bin bevor es auf in der Miniconda Installation sucht und findet das alte Python shipped by OSX.

Tatsächlich linkt Miniconda zudem "python" auf "python3.5"
http://imgur.com/a/jv0Ng
Weiß nicht ob das schlau ist darin manuell jetzt herumzulinken.

Kannst du mir vielleicht noch erklären, was die python-config Skripte (grün eingerahmt) machen?
BlackJack

@brave: Diesen ``python`` auf ``python3.5`` Link würde ich löschen. 99% der Systeme haben unter `python` immer Python 2 auch wenn sie ausschliesslich Python 3 installiert haben. Unter Windows ist das so, unter allen Linux-Distributionen die ich kenne (es gibt wohl eine Ausnahme, da weiss ich aber gerade nicht welche das war), und bei OS X sollte das ganz dringend auch so sein weil ja das System-Python ein 2er ist und damit tatsächlich Probleme mit systemrelevanten Skripten auftreten können wenn die unter ``python`` plötzlich ein 3er bekommen.

Auch wenn das so als Standard nicht explizit festgelegt ist, so wird das durch das Python-Launcher-PEP für Windows indirekt doch nahegelegt. Der Launcher versucht anhand der She-Bang-Zeile, die unter Windows ja eigentlich keine besondere Bedeutung hat, die richtige Python-Version zu starten. Und der erkennt das nach dem Muster (vereinfacht) 'python[x[.y[.z]]]' und geht bei 'python' ohne Nummer von Python 2 aus. Mit der Begründung, dass das auf Systemen wo der She-Bang relevant ist, so üblich ist. Und solange Python 3 nicht deutlich übernommen hat und Python 2 damit so exotisch geworden ist, dass man keine Rücksicht mehr darauf nehmen muss, macht das ja auch Sinn, dass man die beiden Versionen ohne diesen Konflikt parallel installieren kann.

Edit: `python-config` kann von Buildsystemen verwendet werden um zu erfahren wo die C-Bibliotheken liegen und mit welchen Argumenten der Compiler aufgerufen werden muss, wenn man Module installieren/kompilieren will die in C geschrieben sind. Beispielaufrufe auf 'nem Raspberry Pi:

Code: Alles auswählen

$ python-config 
Usage: /usr/bin/python-config --prefix|--exec-prefix|--includes|--libs|--cflags|--ldflags|--extension-suffix|--help|--configdir
$ python-config --libs
-lpython2.7 -lpthread -ldl  -lutil -lm 
$ python-config --cflags
-I/usr/include/python2.7 -I/usr/include/arm-linux-gnueabihf/python2.7  -fno-strict-aliasing -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security  -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

@brave: Anaconda und Miniconda klinken sich im Pfad immer vorne ein, verbergen also das System-Python. Wenn dieses noch auf Python 2 basiert, was zumeist der Fall ist, dann nutze die 2.7 Installationen von Anaconda/Miniconda; das verträgt sich dann, solange Du kein irgendwie exotisches System hast. Aus diesen Conda-Installationen kannst Du später jede andere Python-Version in eigenen Environments installieren.
Selbst standardmäßig Python3 verwenden, wohingegen das System stets nur Python2 sehen soll, geht leider nicht. Aber dafür hast dann die Environments.
Antworten