Komma igång med virtuella miljöer i Python

I den här artikeln får du lära dig hur du kommer igång med virtuella miljöer i Python, i både Windows och Linux operativsystem.

När du börjar arbeta med flera projekt i din lokala utvecklingsmiljö, stöter du ofta på beroendeproblem. Att skapa virtuella miljöer för vart och ett av dina projekt kan hjälpa dig att hantera beroenden och projektkrav bättre.

För att utnyttja fördelen med virtuella miljöer i Python, låt oss lära oss att skapa och aktivera virtuella miljöer. 👩🏽‍💻

Vad är virtuella miljöer?

Virtuella miljöer är isolerade och oberoende miljöer som innehåller koden och beroenden för ett projekt.

Men varför ska man använda virtuella miljöer?

Jo, virtuella miljöer låter dig installera och använda olika versioner av samma bibliotek för olika projekt. Att använda virtuella miljöer säkerställer också att det inte sker några avbrottsändringar när två eller flera projekt använder olika versioner. Låt oss förstå detta mer i detalj.

Installera paket i Python

Python-standardbiblioteket levereras med flera användbara moduler för enhetstestning, interaktion med operativsystemet, arbete med datum och tider och mer.

Men när du arbetar med Python-projekt behöver du ofta installera andra paket – utvecklade av Python-communityt. Detta gäller särskilt för applikationer som webbskrapning för datainsamling, maskininlärning och webbapplikationer.

För att installera och hantera dessa paket kan du använda conda eller pip.

Varje projekt kräver en specifik uppsättning paket som du behöver installera. Men när du installerar alla paket i din utvecklingsmiljö på din lokala dator delar alla projekt de globalt installerade paketen.

Så varför är detta ett problem?

Tja, du kanske har N-paket i din utvecklingsmiljö. Det kan dock hända att projektet du arbetar med för närvarande bara kräver tre av dem. När alla dina projekt delar gemensamma installationer är det mycket svårt att identifiera vilket av projekten som krävde vilket av de installerade paketen – beroenden som är associerade med varje projekt.

Det finns en annan begränsning för detta tillvägagångssätt. Anta att du har ett Django 2.2-projekt i ditt projektbibliotek. Du bestämmer dig för att börja arbeta med ett projekt som använder Django 4. Så du installerar den senaste versionen av Django i samma utvecklingsmiljö.

Vad händer med den befintliga installationen?

Den tas bort och ersätts av den version av Django du installerade. Med nyare stabila utgåvor kan vissa funktioner ha blivit utfasade. Och dina tidigare Django-projekt kanske inte fungerar som förväntat.

Sammanfattning av vår diskussion hittills: beroendehantering blir svårt när paketen är installerade i en gemensam miljö eftersom projekten kräver sin egen uppsättning bibliotek för att köras.

Hur virtuella miljöer fungerar

Hittills har vi sett de utmaningar som är förknippade med att installera paket i en global utvecklingsmiljö (systemomfattande installationer). Detta motiverar oss att förstå hur virtuella miljöer hanterar denna begränsning.

När du skapar och aktiverar en virtuell miljö för dina Python-projekt kan du bara installera de paket som krävs för det aktuella projektet.

Om du återgår till exempel på Django-projekt, med virtuella miljöer, kan du köra både Django 2.2- och Django 4-projekt – utan konflikter. Detta beror på att Django-installationerna inte längre är systemomfattande installationer utan är begränsade till respektive projekts virtuella miljöer.

I huvudsak: virtuella miljöer är isolerade miljöer som innehåller både koden och beroenden för ett projekt.

Fördelar med virtuella miljöer

Nu när du har lärt dig hur virtuella miljöer fungerar i Python, låt oss räkna upp fördelarna med att använda dem:

  • Virtuella miljöer tillhandahåller en isolerad utvecklingsmiljö för enskilda projekt som tillåter oss att installera endast de paket som krävs för det specifika projektet.
  • Eftersom de virtuella miljöerna för projekt är både oberoende och isolerade, kan olika projekt använda olika versioner av samma bibliotek – beroende på kraven. Med virtuella miljöer behöver du inte oroa dig för systembehörigheter för att installera bibliotek och ställa in utvecklingsmiljön.
  • När du har installerat paket i en virtuell miljö kan du fånga projektets beroenden i en requirements.txt-fil. Detta gör att andra utvecklare kan replikera projektets utveckling och miljö och installera de nödvändiga paketen med ett enda kommando.

Hittills har du lärt dig hur virtuella miljöer fungerar och fördelarna med att använda dem. Låt oss utforska några populära verktyg du kan använda för att skapa och hantera virtuella miljöer i Python.

#1. Virtualenv

Virtualenv är ett av de mycket använda verktygen för att skapa och hantera virtuella miljöer för Python-projekt. En delmängd av funktionaliteten hos virtualenv är tillgänglig i venv-paketet. Dock är virtualenv-paketet snabbare och utbyggbart jämfört med venv.

#2. Pipenv

Med pipnev har du både den virtuella miljöfunktionen hos virtualenv och pakethanteringsfunktionerna hos pip. Den använder hanterar pipfiler för att hantera projektberoenden inuti en virtuell miljö med hjälp av.

Du kan prova pipenv direkt från webbläsaren på denna Pipenv-lekplats.

#3. Conda

Om du använder Anaconda-distributionen av Python för utveckling, kan du använda conda för pakethantering och för att skapa virtuella miljöer.

För att lära dig mer, kolla in den här omfattande guiden om att hantera miljöer med conda.

#4. Poesi

Poesi är ett pakethanteringsverktyg som låter dig hantera beroenden över alla Python-projekt. För att börja använda Poetry måste du ha Python 3.7 eller en senare version installerad.

#5. Venv

Som nämnts erbjuder venv en delmängd av funktionaliteten hos virtualenv men den kommer med fördelen att den är inbyggd i Python-standardbiblioteket, från och med Python 3.3.

Det är lättillgängligt med Python-installationen – och kräver ingen installation av externa paket. Vi kommer att använda den i den här handledningen för att skapa och arbeta med virtuella miljöer. ✅

Hur man skapar en Python Virtual Environment i Ubuntu

💬 För att följa med resten av denna handledning måste du ha en lokal installation av Python 3. Se till att du kör Python 3.5 eller en senare version.

Det här avsnittet beskriver stegen för att skapa och aktivera virtuella miljöer i en Ubuntu Linux-maskin. Samma steg kan också användas på andra Linux-distros.

För enklare hantering, låt oss skapa en projektkatalog och cd i den; Vi skapar venv i den här katalogen.

$ mkdir my_project
$ cd my_project

Den allmänna syntaxen för att skapa en virtuell miljö för ditt Python-projekt är python3 -m venv . När du kör detta kommando kommer en virtuell miljö som heter my_env att skapas i den aktuella arbetskatalogen:

$ python3 -m venv my_env

Hur man aktiverar och installerar paket i en virtuell miljö

När du har skapat den virtuella miljön kan du aktivera den och installera nödvändiga paket i den. För att aktivera virtuell miljö kan du köra följande kommando:

$ source my_env/bin/activate

När du har aktiverat en virtuell miljö kan du köra kommandot pip list för att få listan över installerade paket:

$ pip list

Hittills har vi inte installerat något paket, så du bör kunna se installationsverktyg och pip – installerade som standard – i var och en av de skapade virtuella miljöerna.

Installationen av pip i den virtuella miljön låter dig installera paket som behövs för det specifika projektet; det är därför du har en oberoende utvecklingsmiljö för varje projekt.

Nu när du har aktiverat den virtuella miljön kan du installera projektspecifika paket i den med hjälp av pip. Som ett exempel, låt oss installera Python-förfrågningar, ett av de mest nedladdade Python-paketen, som ger flera användbara funktioner för att skicka HTTP-förfrågningar för att arbeta med webb-API:er.

$ pip install requests

När du installerar förfrågningsbiblioteket kommer du att se att förfrågningsbiblioteket installeras tillsammans med alla paket som krävs av det.

$ pip list

Du kan använda kommandot pip freeze och omdirigera utdata till en requirements.txt-fil, som visas:

$ pip freeze > requirements.txt

Om du undersöker innehållet i den aktuella projektkatalogen ser du att filen requirements.txt har skapats.

$ ls
# my_env requirements.txt

Du kan inaktivera den virtuella miljön efter att du har arbetat med projektet genom att köra följande kommando:

$ deactivate

Hur man skapar en Python Virtual Environment i Windows

I allmänhet är en Linux-miljö att föredra för utveckling. Om du använder en Windows-dator kan du överväga att använda Windows Subsystem for Linux (WSL) för att ställa in en Ubuntu-terminalmiljö för lokal utveckling.

Om du använder en Windows-dator kan du använda antingen Windows PowerShell eller kommandotolken och skapa virtuella miljöer med följande kommando:

> python -m venv <path-to-venv>

Hur man aktiverar en virtuell miljö

Att aktivera virtuella miljöer på en Windows-dator är olika beroende på om du arbetar med kommandotolken eller Windows PowerShell.

Om du är på kommandotolken, kör följande kommando för att aktivera den virtuella miljön:

> <path-to-venv>Scriptsactivate.bat

Alternativt, om du använder Windows PowerShell, kommer det här kommandot att aktivera den virtuella miljön:

> <path-to-venv>ScriptsActivate.ps1

Du kan installera alla nödvändiga paket i den virtuella miljön.

För att inaktivera virtuella miljöer kan du köra kommandot deaktivera – både på kommandotolken och Windows PowerShell.

Slutsats

I den här artikeln diskuterade vi begränsningarna för systemomfattande installationer och hur de försvårar beroendehantering över Python-projekt. Virtuella miljöer i Python ger ett sätt att hantera beroenden bättre samtidigt som de tillhandahåller en isolerad utvecklingsmiljö för enskilda projekt.

Bland de mycket använda verktygen för att skapa och hantera virtuella miljöer i Python, har du lärt dig hur du använder venv – som är inbyggt i Pythons standardbibliotek för att skapa och aktivera virtuella miljöer.

Inuti ett projekts dedikerade virtuella miljö kan versioner av bibliotek som är specifika för ett projekt installeras. Dessa krav kan sedan fångas in i en requirements.txt-fil, som gör att andra utvecklare enkelt kan replikera projektmiljön.

När du startar ditt nästa Python-projekt, se till att använda virtuella miljöer för bättre beroendehantering. Lycka till med kodningen!🎉