Pytonorm

Virtuella miljöer i Python 3

Virtuella miljöer i Python 3
Som de flesta människor hatar jag att installera onödiga paket på min arbetsstation. När du är klar med dem räcker det aldrig med att avinstallera dem. Paketen lämnar ton mappar och filer. De kräver många andra (obskyra) paket som också lämnas i kölvattnet. Långsamt men säkert byggs dessa saker upp på din arbetsstation och även om de kanske inte tar upp någon betydande del av ditt diskutrymme kan de orsaka andra problem.

Äldre beroenden

Äldre paket kan dröja kvar och din Python-kod använder dem gärna. Det här är inte ett problem om dina Python-skript är avsedda att köras lokalt och inte för industriella ändamål. Dataforskare, studenter och till och med vanliga människor som automatiserar sin vardagliga uppgift kan bara fortsätta använda de äldre paketen utan mycket problem.

Problemet börjar när du skickar din kod till produktion. När du gör det är chansen att du bara skickar ditt huvudskript och inte alla paketberoenden. Till exempel, om du har skrivit en mikrotjänst som ska skickas som AWS Lambda-funktion, kan de första raderna importera förfrågningsmodul så här:

importförfrågan

Förfrågningspaketet som tillhandahålls av AWS lambda kommer att skilja sig från det äldre och därför kan programmet krascha.

Konflikter

Konflikter kan också komma in i bilden där olika projekt använder olika versioner av samma paket. Kanske behöver några av dina äldre projekt de äldre pip-paketen. Men du kan behöva det nyare paketet för andra projekt. Kör pipinstallation -U kommer att uppgradera paketet över ditt operativsystem som orsakar problem när du går tillbaka till att underhålla dina äldre projekt.

Python virtuella miljöer

Om du använder någon version av Python över 3.5 kan du använda en inbyggd modul som heter venv för att skapa vad som kallas Python Virtual Environments. Vad den här modulen gör är att skapa en isolerad mapp eller katalog där alla dina pip-paket och andra beroenden kan leva. Mappen innehåller också ett "aktivera" -skript i den. När du vill använda en viss virtuell miljö kör du bara det här skriptet, varefter endast paketen som finns i den här mappen kan nås. Om du kör pipinstall kommer paketen att installeras i den här mappen och ingen annanstans. När du är klar med en miljö kan du helt enkelt 'inaktivera' den och då är bara de globala pip-paketen tillgängliga för dig.

Om du använder Ubuntu 18.04 och senare behöver du inte ens installera pip-pakethanteraren över hela ditt system. Pip kan bara finnas i din virtuella miljö om du föredrar det på det sättet.

Installera venv och skapa virtuella miljöer

Ubuntu 18.04 LTS kommer ur lådan med Python 3.6.x, men Python venv-modulen är inte installerad, inte heller pip. Låt oss installera just venv.

$ apt installera python3-venv

Därefter går vi till den katalog där du vill att din Virtual Environment-katalog ska skapas. För mig är det ~ / project1

$ cd ~ / projekt1

Skapa din venv med följande kommando, lägg märke till att my-env bara är namnet på den miljön, du kan namnge det vad du vill:

$ python3 -m venv my-env

Obs! Vissa Python3-installationer, som de som finns i Windows, kallar du Python-tolk med bara python och inte python3, men det ändras från system till system. För konsekvensens skull använder jag bara python3.

När kommandot har slutförts kommer du att märka en ny mapp ~ / project1 / my-evn. För att aktivera den virtuella miljön my-env måste du:

  1. Springa,
    $ source ~ / project1 / my-env / bin / aktivera om du använder Bash.
    Det finns alternativa skript som kallas aktivera.fisk och aktivera.csh för personer som använder fisk respektive csh-skal.
  2. På Windows kan skriptet åberopas genom att köra:
    >.\ my-env \ Scripts \ aktivera.fladdermus om du använder kommandotolken, eller,
    >.\ my-env \ Scripts \ aktivera.ps1 om du använder PowerShell.

Använda virtuella miljöer

När du väl har kört skriptet framgångsrikt kommer du att märka att meddelandet ändras till något som visas nedan, du kan nu installera paket med pip:

(min-env) $ pip3 installationsförfrågningar
## Vi kan lista de installerade paketen med kommandot 'pip freeze'
(min-env) $ pip3 frysa
certifiering == 2018.10.15
chardet == 3.0.4
idna == 2.7
pkg-resurser == 0.0.0
förfrågningar == 2.20.1
urllib3 == 1.24.1

Så länge den virtuella miljön är aktiv (som anges av uppmaningen) sparas alla paket endast i katalogen för virtuell miljö (my-env), oavsett var du befinner dig i filsystemet.

För att komma ut ur den virtuella miljön kan du skriva inaktivera i prompten och du kommer tillbaka till att använda den systemomfattande installationen av Python. Du kan märka att de nya paketen som vi just installerade inte kommer att visas i den globala pipinstallationen.

För att bli av med den virtuella miljön raderar du helt enkelt den my-env-mapp som skapades efter att köra modulen. Du kan skapa så många av dessa miljöer som du vill.

Slutsats

Med venv-modulen är virtuella miljöer nu tillgängliga som en standardfunktion i Python, särskilt om du installerar från Python.org. Tidigare hade vi många implementationer från tredje part som heter virtualenv, pyenv, etc.

Detta gav upphov till mer och mer uppblåst programvara som Anaconda, särskilt populär bland datavetenskapare. Det är bra att äntligen ha ett förenklat verktyg för att hantera Python-paket utan att behöva installera många andra orelaterade skräp. Du kan läsa mer om venv här.

Installera senaste Dolphin Emulator för Gamecube & Wii på Linux
Dolphin Emulator låter dig spela dina valda Gamecube & Wii-spel på Linux Personal Computers (PC). Eftersom Dolphin Emulator är en fritt tillgänglig o...
Hur man använder GameConqueror Cheat Engine i Linux
Artikeln täcker en guide om hur du använder GameConqueror-fuskmotorn i Linux. Många användare som spelar spel på Windows använder ofta applikationen "...
Bästa spelkonsolemulatorer för Linux
Den här artikeln listar populära spelkonsolemuleringsprogram som finns tillgängliga för Linux. Emulation är ett mjukvarukompatibilitetsskikt som emule...