Rätt och fel sätt att ställa in Python 3 på MacOS
Jag har doppat min tå tillbaka i Python utveckling som jag gör mig redo att gå till PyCon oss. (Om du”är på väg dit också och vill dela din Python-historia, låt mig veta!) När jag installerade en modul för att tinker runt med, fick jag en påminnelse om att jag behövde installera Python 3 snart.
$ pip install todoist-python
DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won"t be maintained after that date. A future version of pip will drop support for Python 2.7.
Så, jag gjorde vad någon av oss skulle göra och googled runt letar efter en guide för att uppdatera min utvecklingsmiljö, som körs på Mac (MacOS operativsystem, tidigare känt som OS X)., Till min förvåning hittade jag bara en handfull StackOverflow-inlägg, och de pekade mig på partiella lösningar. Här är den fullständiga historien om hur du ställer in din miljö utan att bryta något inbyggt i MacOS operativsystem.
1. Installera pyenv
Moshe Zadka varnar för att göra detta fel kan resultera i en opålitlig uppfattning om vilken Python körs som beror alltför nära på skal laddar Alias. Jag visste att Moshe var bekant med Python, men vad jag inte visste är att han är författare till många Python-handledning samt en kommande bok om Python-utveckling på macOS., Han hjälpte 40 kollegor att utveckla Python säkert och konsekvent på macOS-system enligt en kärnprincip:
”den grundläggande förutsättningen för all Python-utveckling är att aldrig använda system Python. Du vill inte att Mac OS X ” default Python ”ska vara” python3.”Du vill aldrig bry sig om standard Python.”
hur slutar vi bry oss om standardinställningen? Moshe rekommenderar att du använder pyenv för att hantera Pythonmiljöer (för ett djupare dyk när du konfigurerar pyenv, se den här artikeln)., Detta verktyg hanterar flera versioner av Python och beskrivs som ”enkel, diskret, och följer Unix tradition av en enda syfte verktyg som gör en sak bra.”
medan andra installationsalternativ är tillgängliga, är det enklaste sättet att komma igång med Homebrew:
$ brew install pyenv
🍺 /usr/local/Cellar/pyenv/1.2.10: 634 files, 2.4MB
Installera Python
låt nu ” s installera den senaste Python-versionen (3.7.,3 från och med detta skrivande):
Ställ in din globala standard
Nu när Python 3 är installerat via pyenv vill vi ställa in den som vår globala Standardversion för pyenv-miljöer:
$ pyenv global 3.7.3
# and verify it worked
$ pyenv version
3.7.3 (set by /Users/mbbroberg/.pyenv/version)
kraften i pyenv kommer från dess kontroll över vår shell”s path. För att det ska fungera korrekt måste vi lägga till följande i vår konfigurationsfil (.zshrc för mig, möjligen .bash_profile för dig):
efter det kommandot, vår dotfile (.zshrc för zsh eller .,bash_profile för Bash) bör innehålla dessa rader:
if command -v pyenv 1>/dev/null 2>&1; then
eval "$(pyenv init -)"
fi
Nu vet vi säkert att vi”re använder Python 3.7.3 och pip kommer att uppdatera tillsammans med det utan manuell aliasing mellan versioner. Använda Moshe ” s rekommendation att använda en version manager (pyenv) gör det möjligt för oss att enkelt acceptera framtida uppgraderingar utan att bli förvirrad om vilken Python vi kör vid en given tidpunkt.
framgång
När du blir bekväm med detta arbetsflöde kan du använda pyenv för att hantera flera versioner av Python. Det är också viktigt, för beroendehantering, att använda virtuella miljöer., Jag nämner hur man använder den inbyggda venv bibliotek i artikeln, och Moshe rekommenderar virtualenvwrapper för att hantera virtuella miljöer.
förstå Python runtimes
Nu när du har dina Python-versioner fixade är det säkert att utforska varför detta problem förvirrar så många människor.
den version av Python som levereras med macOS är väl föråldrad från vad Python rekommenderar att använda för utveckling. Begrunda Python runtimes kan vara komiskt utmanande ibland, som noterats av XKCD.,
många användare har dussintals Python tolkar på sin dator redan, men har ingen aning om hur man hanterar dem effektivt. Alltför ofta, folk bara ladda ner den senaste Python release, flytta den till sin väg, och kalla det en dag (eller använda brew installera python3, vilket skulle göra något liknande). Detta kan orsaka avbrott ner linjen på frustrerande sätt som kan vara svårt att felsöka.,
vad man inte ska göra
min första idé om hur man gör Python 3 standard Python på mitt system var att flytta den gamla versionen och lägga till den nya:
mönstret följde vad/usr/ bin/vanligtvis gör mellan stora utgåvor av Python, men jag lärde mig snabbt att det var fel drag:
$ sudo mv /usr/bin/python /usr/bin/python2
mv: rename /usr/bin/python to /usr/bin/python2: Operation not permitted
Tack och lov skyddade macOS mig från att bryta något jag inte förstår helt. Ytterligare forskning visar att detta är precis vad vi inte borde göra.
en annan sak att inte försöka
nu när vi vet vad vi inte ska göra, låt oss titta på vad vi kunde göra., Det finns ett par alternativ när vi tänker på vanliga installationsmönster för applikationer på macOS.
använd Python 3 som MacOS standard
Python”s webbplats har en MacOS Python 3 installer vi kan ladda ner och använda. Om vi använder paketinstallationen kommer en python3-fyllning att finnas tillgänglig i / usr/local/bin/.
Aliasing är ett måste eftersom Python binär lagras i/usr/ bin / can”t ändras. Vad är trevligt med ett alias är att det är specifikt för vårt kommandoradsskal. Eftersom jag använder zsh som standard lägger jag följande i .,zshrc-fil:
om du använder standard Bash-skalet kan du lägga till samma text till din .bashrc:
den här strategin fungerar, men den är inte idealisk för framtida uppdateringar av Python. Det betyder att vi måste komma ihåg att kontrollera webbplatsen och ladda ner de nya filerna eftersom Python inte innehåller ett kommandorads sätt att uppdatera.
har Homebrew hantera Python 3
Homebrew projektet ger en fri och öppen källkod pakethanterare för macOS som många människor förlitar sig på. Det ger Apple-användare en kraft som liknar apt-get eller yum., Om du är en Homebrew användare kanske du redan har Python installerat. För att snabbt kontrollera, kör:
$ brew list | grep python
python
om Python dyker upp under kommandot är det installerat. Vilken version är det? Låt ” s check:
Okej, bra! Homebrew maintainers har uppdaterat standard Python-flaskan för att peka på den senaste versionen., Eftersom homebrew-underhållarna är mer pålitliga vid uppdatering av utgåvan än de flesta av oss kan vi använda Homebrew”s version av Python 3 med följande kommando:
nu vill vi peka vårt alias (ovanifrån) till kopian av Python som Homebrew hanterar:
# If you added the previous alias, use a text editor to update the line to the following
alias python=/usr/local/bin/python3
för att se till att sökvägen ovanför pekar på var Homebrew installerade Python i vår miljö kan vi köra brew info Python och leta efter väginformationen.,
denna metod, att använda Homebrew för att hantera vår Python-miljö, är en bra startplats, och det var meningsfullt för mig vid den tiden.
Vad händer om vi fortfarande behöver Python 2?
det är vettigt för någon ny till Python till att börja med Python 3., Men de av oss som fortfarande behöver Python 2—till exempel för att bidra till ett Python—projekt som”är endast tillgängligt i Python 2-kan fortsätta att använda standardmacos Python binär tillgänglig i /usr/bin/python:
$ /usr/bin/python
>>> print("This runtime still works!")
This runtime still works!
Homebrew är så underbart, det erbjuder även en annan formel för Python 2:
# If you need Homebrew"s Python 2.7 run
$ brew install python@2
när som helst kan vi ta bort Alias från vår Shell”s konfigurationsfil för att gå tillbaka till att använda standardkopian av Python på systemet.
glöm Inte att uppdatera pip till pip3!,
pip-kommandot är standardpakethanteraren speciellt för Python-paket. Även om vi ändrade vårt standard Python-kommando för att vara version 3, måste vi alias vårt pip-kommando separat om det är på den tidigare versionen. Först måste vi kontrollera vilken version vi är på:
för att säkerställa att vi”installerar paket som är kompatibla med vår nya version av Python, kommer vi att använda ett annat alias för att peka på den kompatibla versionen av pip. Eftersom vi ” använder Homebrew som vår pakethanterare i den här situationen vet vi att den installerade pip3 när vi installerade Python 3., Standardvägen ska vara densamma som Python 3, men vi kan bekräfta detta genom att be skalet att hitta det:
$ which pip3
/usr/local/bin/pip3
Nu när vi känner till platsen lägger vi till det i vår skalkonfigurationsfil, som vi gjorde tidigare:
$ echo "alias pip=/usr/local/bin/pip3" >> ~/.zshrc
# or for Bash
$ echo "alias pip=/usr/local/bin/pip3" >> ~/.bashrc
sist kan vi bekräfta att vi kör pip-poäng till pip3 genom att öppna ett nytt skal eller genom att återställa vårt nuvarande skal och se vad vi pekar på till:
# This command reloads the current shell without exiting the session
# Alternatively, exit the shell and start a new one
$ exec $0
# Now we can look to see where pip points us
$ which pip
pip: aliased to /usr/local/bin/pip3
vi kan undvika att använda homebrew för att uppdatera pip, men det kräver en mycket längre handledning från Python-dokumentationen.,
gör det direkt från början
om du just har börjat med Python-utveckling på en macOS, gör de nödvändiga konfigurationerna för att se till att du”använder rätt version av Python från början. Installera Python 3, med eller utan Homebrew, och med alias kan du börja koda, men det är inte en bra strategi på lång sikt. Använda pyenv som en enkel version management lösning för att få dig till en bra start.
den här artikeln publicerades ursprungligen i maj 2019 och har uppdaterats av redaktören.