2009-09-05 14 views
5

Se si installano più versioni di python (attualmente ho il 2.5 predefinito, installato 3.0.1 e ora installato 2.6.2), mette automaticamente le cose in /usr/local, e aggiusta anche il percorso per includere lo /Library/Frameworks/Python/Versions/theVersion/bin, ma qual è il punto di questo quando /usr/local è già sul PERCORSO e tutte le versioni installate (eccetto il 2.5 predefinito, che è in /usr/bin) sono in là? Ho rimosso i percorsi del framework python dal mio PERCORSO in .bash_profile e posso ancora digitare "python -V" => "Python 2.5.1", "python2.6 -V" => "Python 2.6.2", "python3 -V" => "Python 3.0.1". Mi chiedo semplicemente perché lo inserisce in /usr/local e cambia anche il PERCORSO. Ed è quello che ho fatto bene? Grazie.OS X - più versioni python, PATH e/usr/local

Inoltre, l'installazione 2.6 ha reso la 'corrente' uno, avendo .../Python.framework/Versions/Current punto 2.6., Le cose così semplici 'python' in /usr/local/bin punto a 2.6, ma non importa perché usr/bin viene prima e le cose con il stesso nome in là punto a 2.5 cose .. Comunque, 2.5 viene fornito con leopardo, ho installato 3.0.1 solo per avere l'ultima versione (che ha un file dmg), e ora ho installato 2.6.2 per l'uso con pygame.

EDIT: OK, ecco come lo capisco. Quando si installa, ad esempio, Python 2.6.2: Un gruppo di collegamenti simbolici viene aggiunto a /usr/local/bin, quindi, quando c'è uno script #! /usr/local/bin/python in uno script python, verrà eseguito e in /Applications/Python 2.6, l'applicazione di avvio Python viene eseguita come applicazione predefinita. i file py, che utilizza /usr/local/bin/pythonw e /Library/Frameworks/Python.framework/Versions/2.6/bin, vengono creati e aggiunti nella parte anteriore del percorso, quindi which python otterrà il python e anche lo #! /usr/bin/env python verrà eseguito correttamente.

+0

E il pacchetto virtualenv di python? sembra essere un modo abbastanza popolare di avere più installazioni python su una macchina. altri utenti hanno fatto questo sulle loro macchine os x? – Foofy

risposta

5

Non c'è alcuna garanzia a priori che/usr/local/bin rimarrà sul PERCORSO (in particolare non rimarrà necessariamente "davanti a"/usr/bin! -), quindi è perfettamente ragionevole che un programma di installazione garantisca la directory /Library/.../bin specificatamente necessaria ottiene il PERCORSO. Inoltre, potrebbe essere il caso che /Library/.../bin abbia roba supplementare che non viene simulata in/usr/local/bin, anche se credo che al momento non sia il caso delle recenti distribuzioni standard di Mac di Python.

Se sai che il modo in cui organizzerai il tuo percorso e l'insieme esatto di file eseguibili che utilizzerai, sono interamente soddisfatti da/usr/local/bin, quindi è abbastanza corretto rimuovere il/Cartelle/etc directory dal tuo percorso, ovviamente.

+0

Cosa succede se ho rimosso, ad esempio, Python 2.6?Potrei rimuoverlo da/Applications e /Library/..../Versions/2.6.2, ma per quanto riguarda/usr/local /? Un sacco di link simbolici non verranno lasciati indietro? E non vorrei gironzolare lì dentro cercando di individuare quelli 2.6.2 .. Non lo so .. – mk12

+0

Sì, dovresti rimuovere in modo specifico i (pochi) link simbolici specifici di 2.6, a meno che tu stiamo usando una distro che viene fornita con un "uninstall" (credo che quello standard di python.org non lo sia) - 'ls -l/usr/local/bin | grep 'Python. * 2.6'' li identificherà facilmente, ovviamente, quindi non c'è "confusione" o "tentativo di scegliere". –

+0

Non posso anche eliminare tutto in/usr/local/bin e semplicemente mettere /Python.framework/Versions/x.x.x/bin sul percorso nell'ordine che voglio? – mk12

0

Ho appena notato/riscontrato questo problema sul mio Mac. Ho Python 2.5.4, 2.6.2 e 3.1.1 sulla mia macchina, e stavo cercando un modo per cambiarli facilmente a piacimento. In quel momento ho notato tutti i collegamenti simbolici per i file eseguibili, che ho trovato sia in "/ usr/bin" che in "/ usr/local/bin". Ho strappato tutti i link simbolici non specifici della versione, lasciando python2.5, python2.6, etc e scritto uno script di shell bash che posso eseguire come root per cambiare un link simbolico che uso per indirizzare il percorso alla versione di mia scelta

'/Library/Frameworks/Python.framework/Versions/Current'

L'unica cosa negativa che strappa i link simbolici fuori, è che se qualche altra applicazione bisogno di loro per qualche motivo. La mia opinione sul motivo per cui questi collegamenti simbolici sono stati creati è simile alla valutazione di Alex, l'installatore sta cercando di coprire tutte le basi. Tutte le mie versioni sono state installate da un programma di installazione, anche se ho cercato di compilare il mio per abilitare il supporto completo a 64 bit e, durante la compilazione e l'installazione, è possibile scegliere di non creare i collegamenti simbolici o modificare il PATH durante installazione.