Python

Virtuelle miljøer i Python 3

Virtuelle miljøer i Python 3
Som de fleste mennesker hader jeg at installere unødvendige pakker på min arbejdsstation. Når du er færdig med dem, er det aldrig nok at afinstallere dem. Pakker efterlader ton mapper og filer. De kræver mange andre (obskure) pakker, der også efterlades i kølvandet på tingene. Langsomt men sikkert opbygges disse ting i din arbejdsstation, og selvom de muligvis ikke hæver nogen væsentlig del af din diskplads, kan de forårsage andre problemer.

Ældre afhængigheder

Ældre pakker kan blive hængende rundt, og din Python-kode bruger dem med glæde. Dette er ikke et problem, hvis dine Python-scripts er beregnet til at køre lokalt og ikke til industrielle formål. Dataforskere, studerende og endda almindelige mennesker, der automatiserer deres daglige opgave, kan bare fortsætte med at bruge de ældre pakker uden meget af et problem.

Problemet begynder, når du sender din kode til produktion. Når du gør det, er chancerne for, at du bare sender dit hoved script og ikke alle pakkeafhængigheder. For eksempel, hvis du har skrevet en mikroservice, der skal sendes som AWS Lambda-funktion, importerer de første par linjer muligvis anmodningsmodul som dette:

importanmodning

Den anmodningspakke, der leveres af AWS lambda, adskiller sig fra din ældre, og som et resultat kan programmet gå ned.

Konflikter

Konflikter kan også komme ind i billedet, hvor forskellige projekter bruger forskellige versioner af den samme pakke. Måske har nogle af dine ældre projekter brug for de ældre pip-pakker. Men du har muligvis brug for den nyere pakke til andre projekter. Kører pipinstallation -U opgraderer pakken på tværs af dit operativsystem, hvilket forårsager problemer, når du går tilbage til at vedligeholde dine ældre projekter.

Python virtuelle miljøer

Hvis du bruger en hvilken som helst version af Python over 3.5, kan du bruge et indbygget modul kaldet venv til at skabe det, der kaldes Python Virtual Environments. Hvad dette modul gør er at oprette en isoleret mappe eller mappe, hvor alle dine pip-pakker og andre afhængigheder kan leve. Mappen indeholder også et 'aktiver' script i det. Når du vil bruge et bestemt virtuelt miljø, skal du blot køre dette script, hvorefter kun pakkerne indeholdt i denne mappe er tilgængelige. Hvis du kører pipinstall, installeres pakkerne i denne mappe og ingen andre steder. Når du er færdig med at bruge et miljø, kan du blot 'deaktivere' det, og så er kun de globale pip-pakker tilgængelige for dig.

Hvis du bruger Ubuntu 18.04 og derover behøver du ikke engang at installere pip-pakkehåndtering på tværs af hele dit system. Pip kan kun eksistere i dit virtuelle miljø, hvis du foretrækker det på den måde.

Installation af venv og oprettelse af virtuelle miljøer

Ubuntu 18.04 LTS kommer ud af kassen med Python 3.6.x, men Python venv-modulet er ikke installeret, heller ikke pip. Lad os installere bare venv.

$ apt installer python3-venv

Dernæst går vi til den mappe, hvori du vil oprette din Virtual Environment-mappe. For mig er det ~ / project1

$ cd ~ / projekt1

Opret din venv med følgende kommando, bemærk at my-env bare er navnet på det miljø, du kan navngive det, hvad du vil:

$ python3 -m venv my-env

Bemærk: Nogle Python3-installationer, som dem, der er tilgængelige i Windows, kalder du Python-tolken ved hjælp af bare python og ikke python3, men det skifter fra system til system. Af hensyn til konsistensen bruger jeg kun python3.

Når kommandoen er afsluttet, vil du bemærke en ny mappe ~ / project1 / my-evn. For at aktivere det virtuelle miljø for my-env skal du:

  1. Løb,
    $ kilde ~ / projekt1 / min-env / bin / aktivere hvis du bruger Bash.
    Der er alternative scripts kaldet aktivere.fisk og aktiver.csh for folk, der bruger henholdsvis fisk og csh-skaller.
  2. På Windows kan scriptet påberåbes ved at køre:
    >.\ my-env \ Scripts \ aktiver.flagermus hvis du bruger kommandoprompt, eller,
    >.\ my-env \ Scripts \ aktiver.ps1 hvis du bruger PowerShell.

Brug af virtuelle miljøer

Når du først har kørt scriptet med succes, vil du bemærke, at prompten ændres til noget som det, der vises nedenfor, du kan nu installere pakker ved hjælp af pip:

(min-env) $ pip3 installationsanmodninger
## Vi kan liste de installerede pakker ved hjælp af kommandoen 'pip freeze'
(min-env) $ pip3 fryser
certifi == 2018.10.15
chardet == 3.0.4
idna == 2.7
pkg-ressourcer == 0.0.0
anmodninger == 2.20.1
urllib3 == 1.24.1

Så længe det virtuelle miljø er aktivt (som angivet af prompten) gemmes alle pakker kun i det virtuelle miljøkatalog (my-env), uanset hvor du er i filsystemet.

For at komme ud af det virtuelle miljø kan du skrive deaktiver i prompt, og du vil vende tilbage til at bruge den systemdækkende installation af Python. Du kan bemærke, at de nye pakker, vi lige har installeret, ikke vises i den globale pipinstallation.

For at slippe af med det virtuelle miljø skal du blot slette den my-env-mappe, der blev oprettet efter kørsel af modulet. Du kan oprette så mange af disse miljøer, som du vil.

Konklusion

Med venv-modulet er virtuelle miljøer nu tilgængelige som en standardfunktion i Python, især hvis du installerer fra Python.org. Tidligere havde vi mange tredjepartsimplementeringer kaldet virtualenv, pyenv osv.

Dette gav anledning til mere og mere oppustet software som Anaconda, især populær blandt dataforskere. Det er godt at endelig have et forenklet værktøj til styring af Python-pakker uden at skulle installere en masse andet ikke-relateret junk. Du kan læse mere om venv her.

Bedste apps til Gamepad Mapping til Linux
Hvis du kan lide at spille spil på Linux med en gamepad i stedet for et typisk tastatur- og musesystem, er der nogle nyttige apps til dig. Mange pc-sp...
Nyttige værktøjer til Linux-spillere
Hvis du kan lide at spille spil på Linux, er chancerne for, at du måske har brugt apps og hjælpeprogrammer som Wine, Lutris og OBS Studio for at forbe...
HD Remastered-spil til Linux, der aldrig tidligere havde haft en Linux-udgivelse
Mange spiludviklere og udgivere kommer med HD-remaster af gamle spil for at forlænge franchisens levetid. Venligst fans, der anmoder om kompatibilitet...