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.