Jak mogę zmienić domyślną wersję Pythona w systemie Snow Leopard?


27

Niedawno zaktualizowałem system Mac OS X 10.5 Leopard do wersji 10.6 Snow Leopard, a wraz z nim pojawiła się zaktualizowana wersja Pythona 2.6.1 (zamiast 2.5.1). Teraz, kiedy piszę pythonw Terminalu, wciąż otrzymuję

Python 2.5.1 (r251:54869, Apr 18 2007, 22:08:04) 
[GCC 4.0.1 (Apple Computer, Inc. build 5367)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

Zajrzałem /usr/bin/i stwierdził, że aby uzyskać Python 2.6 muszę pisać python2.6.

Pytanie brzmi: jak zrobić pythonmapowanie poleceń na Python 2.6?

Odpowiedzi:


21

To łatwe:

defaults write com.apple.versioner.python Version 2.6

Zobacz man pythonpełne wyjaśnienie od Apple.

Ponadto, jeden problem: upewnij się, że używasz Pythona dostarczonego z komputerem, a nie innego, który zainstalowałeś. Zrób to, pisząc which pythonw wierszu polecenia. Powinien wskazywać /usr/bin/python. Wspominam o tym tylko dlatego, że mój domyślny system to Snow Leopard 2.6 (podczas korzystania z Leoparda było to 2.5). Zatem fakt, że otrzymujesz 2.5, może wskazywać, że na twojej drodze jest coś jeszcze.

Aktualizacja

Aby odpowiedzieć na poniższe uwagi:

To nie robi tego, o co pytają ludzie.

Robi to dla mnie w OS X 10.8.2. Po wykonaniu defaults write com.apple.versioner.python Version 2.6domyślna wersja Pythona to rzeczywiście 2.6. (I podobnie po zmianie z powrotem na 2.7.)

Dzieje się tak niezależnie od tego, czy uruchamiam pythonbezpośrednio, czy używam skryptu wykonywalnego zaczynającego się od #!/usr/bin/env python- Dostaję oczekiwaną wersję Pythona.

Nie rozwiązuje to dowiązania symbolicznego w /System/Library/Frameworks/Python.framework/Versions, gdzie Current wskazuje na 2.7, co może powodować problemy (ponieważ wciąż jest w sys.path z 2.6!)

Rzeczywiście, nie naprawia tego dowiązania symbolicznego.

Jednak uruchom krótki skrypt, który print()jest sys.pathi (przynajmniej w moim stosunkowo domyślnym ustawieniu) katalogi bibliotek 2.6 znajdują się na ścieżce, a katalogi 2.7 nie znajdują się na ścieżce. Nie ma też Currentdowiązania symbolicznego na ścieżce. Dlatego nie powinno stanowić problemu dla większości skryptów.

Możliwe jest jednak - nie przetestowałem - że Currentdowiązanie symboliczne jest używane przez jeden easy_installlub pip. To spowodowałoby problemy. Wydaje się, że to błąd, że dowiązanie symboliczne nie jest aktualizowane podczas aktualizacji wersji Pythona.


3
Miałeś rację. Dawno temu zainstalowałem MacPython i to spieprzyło moją zmienną PATH, tak pythonwskazaną /Library/Frameworks/Python.framework/Versions/Current/bin. Oczywiście nie zaktualizowano go do wersji 2.6. Zastąpiłem więc zmienną PATH domyślną zmienną znalezioną w Google i teraz usunę MacPython z mojego systemu.
SBSTN

@SBSTN Mam ten sam problem (ścieżka python wskazuje /Library/Frameworks/Python.framework/Versions/Current/bin) Jak to zmienić?
Zach

Nie działa z Xcode4, ponieważ nie ma już / Library / Frameworks / Python * ani też / usr / bin / python nie wskazuje nigdzie indziej. Jakieś pomysły? MacPorts byłby rozwiązaniem, ale nie chcę go instalować.
Alex

Zainstalowałem Xcode 4 i nadal działa zgodnie z opisem. /usr/bin/pythonjest plikiem wykonywalnym, a nie linkiem. /usr/bin/python2.6to link, który wskazuje ../../System/Library/Frameworks/Python.framework/Versions/2.6/bin/python2.6. Ponieważ plik wykonywalny Pythona jest w /System/Librarynim, powinien być dostępny niezależnie od tego, czy / jaka wersja Xcode jest zainstalowana.
Nate

To nie robi tego, o co pytają ludzie. Nie jestem pewien, dlaczego to odpowiedź.
010110110101

12

Sugerowałbym użycie portów Mac ...

Istnieje pakiet o nazwie python_select, który pozwala na równoległe używanie pytonów. Więc najpierw zainstaluj porty mac, jeśli jeszcze nie są zainstalowane.

Najpierw zainstaluj pakiet python_select:

sudo port install python_select

Już teraz możesz sprawdzić, które dystrybucje Pythona są dostępne w twoim systemie. Wystarczy wydać polecenie:

port select --list python     (MacPorts 2.x)
python_select -l              (MacPorts 1.x)

W moim przypadku jest drukowany w wersji Pythona najmniejszego która pochodzi domyślnie z systemem Snow Leopard: python26-apple.

port select --show python     (MacPorts 2.x)
python_select -s              (MacPorts 1.x)

pokazuje aktualnie wybraną wersję, np python26-apple. Widzisz, ten pakiet ładnie współpracuje z komputerem Mac. Więcej problemów z opcjami

port select                   (MacPorts 2.x)
python_select -h              (MacPorts 1.x)

Następnie możesz wyszukać dostępną wersję Pythona w repozytorium portów:

port search python

Spowoduje to utworzenie długiej listy dostępnych pytonów.

Aby zainstalować żądane pakiety, np. Uruchom Python 2.4:

sudo port install python24

Teraz python_select -spokaże również świeżo zainstalowany python. Aby przełączyć na problem z python 2.4:

sudo port select --set python python24  (MacPorts 2.x)
sudo python_select python24             (MacPorts 1.x)

To polecenie jest trwałe między powłokami.


5

Zakładając, że używasz bash, wpisz:

% type -a python

Spowoduje to wyświetlenie wszystkich plików wykonywalnych „python”, aliasów, wbudowanych powłok (prawdopodobnie żadnych) lub funkcji bash w zmiennej PATH.

To powinno pomóc ci lepiej określić, co się tutaj dzieje.


3

Chcesz utworzyć dowiązanie symboliczne do żądanej wersji.

cd /Library/Frameworks/Python.framework/Versions 
sudo rm Current 
sudo ln -s /Library/Frameworks/Python.framework/Versions/2.6 Current

Spowoduje to usunięcie bieżącego wskaźnika do domyślnej wersji języka Python i ustawienie go na wersję 2.6.


1
To jest podobne do tego, co zrobiłem. Zamiast tego umieściłem link w / usr / bin i nazwałem go „python” (przesłaniając stary plik wykonywalny „python”, który Apple tam umieścił). Tak: sudo ln -s /path/to/2.7 /usr/bin/python. Tak właśnie dzieje się w Linuksie i ma to po prostu sens.
Nacht

0

Nie idealne (IMO), ale to naprawiło wszystkie aplikacje, które szukają pythonw moim /usr/local/bin/.

sudo cp /usr/local/bin/python3 /usr/local/bin/python

Oczywiście po zainstalowaniu najnowszej wersji Pythona.


to naprawdę zły pomysł. Używanie dowiązania symbolicznego może być zrozumiałe, ale kopiowanie plików binarnych tam iz powrotem NIE jest dobrym pomysłem.
Jakuje

Rozumiem, po prostu chcę wpisać python w terminalu i niech wskaże na Python3.x ... nie za późno, aby to naprawić.
AGDM,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.