Virtuelle miljøer i Python 3

Virtuelle miljøer i Python 3
Som de fleste hater jeg å installere unødvendige pakker på arbeidsstasjonen min. Etter at du er ferdig med dem, er det aldri nok å avinstallere dem. Pakker etterlater tonn mapper og filer. De krever mange andre (obskure) pakker også etterlatt i kjølvannet av ting. Sakte men sikkert bygger disse tingene opp i arbeidsstasjonen din, og selv om de kanskje ikke hogger opp noen betydelig del av diskplassen din, kan de forårsake andre problemer.

Eldre avhengigheter

Eldre pakker kan somle seg rundt og python -koden din vil gjerne bruke dem. Dette er ikke et problem hvis Python -skriptene dine er ment å løpe lokalt, og ikke for industrielle formål. Dataforskere, studenter og til og med vanlige mennesker som automatiserer sin daglige oppgave, kan bare fortsette å bruke de eldre pakkene uten mye av problemet.

Problemet begynner når du sender koden din til produksjon. Når du gjør det, er sjansen stor for at du bare sender hovedskriptet ditt og ikke alle pakkeavhengighetene. Hvis du for eksempel har skrevet en mikroservice som skal sendes som AWS Lambda -funksjon, kan de første linjene importere forespørselsmodul som dette:

Importforespørsel

Forespørselspakken levert av AWS Lambda vil være forskjellig fra din eldre, og som et resultat kan programmet krasje.

Konflikter

Konflikter kan også komme inn i bildet der forskjellige prosjekter bruker forskjellige versjoner av samme pakke. Kanskje noen av de eldre prosjektene dine trenger de eldre pip -pakkene. Men du trenger kanskje den nyere pakken for andre prosjekter. Kjører Pip Install -U vil oppgradere pakken på tvers av OS som forårsaker problemer når du går tilbake til å opprettholde dine eldre prosjekter.

Python virtuelle miljøer

Hvis du bruker noen versjon av Python over 3.5, kan du bruke en innebygd modul som heter Venv for å lage det som kalles python virtuelle miljøer. Hva denne modulen gjør er å lage en isolert mappe eller katalog der alle PIP -pakker og andre avhengigheter kan leve. Mappen inneholder også et "aktivering" -skript i den. Hver gang du vil bruke et bestemt virtuelt miljø, kjører du ganske enkelt dette skriptet, hvoretter bare pakkene i denne mappen kan nås. Hvis du kjører Pip -installasjon, blir pakkene installert i denne mappen og ingen andre steder. Etter at du er ferdig med et miljø, kan du ganske enkelt 'deaktivere' det, og da vil bare de globale PIP -pakkene være tilgjengelige for deg.

Hvis du bruker Ubuntu 18.04 og over trenger du ikke engang å installere Pip Package Manager over hele systemet. Pip kan bare eksistere i det virtuelle miljøet ditt hvis du foretrekker det på den måten.

Installere Venv og lage virtuelle miljøer

Ubuntu 18.04 LTS kommer ut av boksen med Python 3.6.X, men Python Venv -modulen er ikke installert, og heller ikke PIP. La oss installere bare Venv.

$ apt installer python3-venv

Deretter går vi til katalogen som du vil at din virtuelle miljøkatalog skal opprettes. For meg er det ~/Project1

$ CD ~/Project1

Lag din VENV med følgende kommando, legg merke til at My-ENV bare er navnet på det miljøet, du kan nevne det hva du vil:

$ python3 -m venv my -env

Merk: Noen Python3 -installasjoner, som de som er tilgjengelige på Windows, kaller du Python -tolken ved å bruke Just Python og ikke Python3, men det endres fra system til system. For konsistens skyld vil jeg bare bruke Python3.

Etter at kommandoen er ferdig med utførelsen, vil du legge merke til en ny mappe ~/Project1/My-EVN. For å aktivere det virtuelle My-Env-miljøet, må du:

  1. Løpe,
    $ Kilde ~/Project1/My-ENV/BIN/Aktiver Hvis du bruker bash.
    Det er alternative skript som kalles Activate.fisk og aktiverer.CSH for mennesker som bruker henholdsvis FISH- og CSH -skjell.
  2. På Windows kan skriptet påberopes ved å kjøre:
    >.\ my-env \ skript \ aktivere.flaggermus Hvis du bruker ledetekst, eller,
    >.\ my-env \ skript \ aktivere.PS1 Hvis du bruker PowerShell.

Bruke virtuelle miljøer

Når du har kjørt skriptet vellykket, vil du legge merke til at hurtigheten endres til noe som det som vises nedenfor, kan du nå installere pakker ved hjelp av PIP:

(my-env) $ pip3 installasjonsforespørsler
## Vi kan liste opp de installerte pakkene ved å bruke 'Pip Freeze' -kommando
(my-env) $ pip3 frys
Certifi == 2018.10.15
Chardet == 3.0.4
idna == 2.7
PKG-resources == 0.0.0
Forespørsler == 2.20.1
urllib3 == 1.24.1

Så lenge det virtuelle miljøet er aktivt (som indikert av ledeteksten), vil alle pakkene bare lagres i Virtual Environment Directory (MY-ENV), uansett hvor du er i filsystemet.

For å komme deg ut av det virtuelle miljøet, kan du skrive deaktivere inn i ledeteksten, og du vil være tilbake til å bruke den systemomfattende installasjonen av Python. Du kan merke at de nye pakkene vi nettopp installerte ikke vil bli vist i den globale PIP -installasjonen.

For å bli kvitt det virtuelle miljøet, slett bare My-Env-mappen som ble opprettet etter å ha kjørt modulen. Du kan lage så mange av disse miljøene du vil.

Konklusjon

Med Venv -modul er virtuelle miljøer nå tilgjengelig som en standardfunksjon i Python, spesielt hvis du installerer fra Python.org. Tidligere har vi pleide å ha mange tredjepartsimplementeringer kalt Virtualenv, Pyenv, etc.

Dette ga opphav til mer og mer oppblåst programvare som Anaconda, spesielt populært blant dataforskere. Det er bra å endelig ha et forenklet verktøy for å administrere Python -pakker uten å måtte installere mye annet ikke -relatert søppel. Du kan lese mer om Venv her.