Python

Virtuele omgevingen in Python 3

Virtuele omgevingen in Python 3
Zoals de meeste mensen heb ik een hekel aan het installeren van onnodige pakketten op mijn werkstation. Nadat je klaar bent met ze, is het nooit genoeg om ze te verwijderen. Pakketten laten tonnen mappen en bestanden achter. Ze hebben veel andere (obscure) pakketten nodig die ook achterblijven in het kielzog van de dingen. Langzaam maar zeker stapelen deze dingen zich op in uw werkstation en hoewel ze geen aanzienlijk deel van uw schijfruimte in beslag nemen, kunnen ze andere problemen veroorzaken.

Oudere afhankelijkheden

Oudere pakketten kunnen blijven hangen en uw Python-code zal ze graag gebruiken. Dit is geen probleem als je Python-scripts bedoeld zijn om lokaal te draaien, en niet voor industriële doeleinden. Datawetenschappers, studenten en zelfs gewone mensen die hun dagelijkse taak automatiseren, kunnen zonder veel problemen de oudere pakketten blijven gebruiken.

Het probleem begint wanneer u uw code naar productie verzendt. Als je dat doet, is de kans groot dat je alleen je hoofdscript verzendt en niet alle pakketafhankelijkheden. Als u bijvoorbeeld een microservice hebt geschreven die moet worden verzonden als AWS Lambda-functie, kunnen de eerste paar regels de aanvraagmodule als volgt importeren:

importverzoek:

Het aanvraagpakket dat door AWS lambda wordt geleverd, zal anders zijn dan uw oudere en als gevolg daarvan kan het programma crashen.

conflicten

Er kunnen ook conflicten in beeld komen wanneer verschillende projecten verschillende versies van hetzelfde pakket gebruiken. Misschien hebben sommige van je oudere projecten de oudere pip-pakketten nodig. Maar misschien heb je het nieuwere pakket nodig voor andere projecten. Uitvoeren van pip install -U zal het pakket upgraden in uw besturingssysteem en problemen veroorzaken wanneer u teruggaat naar het onderhouden van uw oudere projecten.

Python virtuele omgevingen

Als u een versie van Python boven 3 . gebruikt.5, kunt u een ingebouwde module genaamd venv gebruiken om zogenaamde Python Virtual Environments te maken. Wat deze module doet, is een geïsoleerde map of map maken waar al je pip-pakketten en andere afhankelijkheden kunnen leven. De map bevat ook een 'activeer'-script erin. Wanneer u een bepaalde virtuele omgeving wilt gebruiken, voert u eenvoudig dit script uit, waarna alleen de pakketten in deze map toegankelijk zijn. Als je pip install uitvoert, worden de pakketten in deze map geïnstalleerd en nergens anders. Nadat u klaar bent met het gebruik van een omgeving, kunt u deze eenvoudig 'deactiveren' en zijn alleen de globale pip-pakketten voor u beschikbaar.

Als u Ubuntu 18 . gebruikt.04 en hoger, je hoeft niet eens de pip-pakketbeheerder op je hele systeem te installeren. Pip kan alleen in je virtuele omgeving bestaan ​​als je daar de voorkeur aan geeft.

Venv installeren en virtuele omgevingen maken

Ubuntu 18.04 LTS komt uit de doos met Python 3.6.x, maar de Python venv-module is niet geïnstalleerd, en pip . ook niet. Laten we gewoon venv . installeren.

$ apt install python3-venv

Vervolgens gaan we naar de map waarin u uw virtuele omgevingsmap wilt maken. Voor mij is het ~/project1

$ cd ~/project1

Maak je venv met het volgende commando, merk op dat de my-env gewoon de naam is van die omgeving, je kunt het noemen wat je maar wilt:

$ python3 -m venv mijn-env

Opmerking: sommige Python3-installaties, zoals die beschikbaar zijn op Windows, roept u de Python-interpreter aan met alleen python en niet python3, maar dat verandert van systeem tot systeem. Omwille van de consistentie zal ik alleen python3 gebruiken.

Nadat de opdracht is uitgevoerd, ziet u een nieuwe map ~/project1/my-evn. Om de my-env virtuele omgeving te activeren, moet u:

  1. Rennen,
    $source ~/project1/my-env/bin/activate als je Bash . gebruikt.
    Er zijn alternatieve scripts genaamd activeren.vissen en activeren.csh voor mensen die respectievelijk fish en csh shells gebruiken.
  2. Op Windows kan het script worden aangeroepen door het volgende uit te voeren:
    >.\mijn-env\Scripts\activeren.knuppel als u de opdrachtprompt gebruikt, of,
    >.\mijn-env\Scripts\activeren.ps1 als u PowerShell gebruikt.

Virtuele omgevingen gebruiken

Zodra je het script met succes hebt uitgevoerd, zul je merken dat de prompt verandert in iets als wat hieronder wordt weergegeven. Je kunt nu pakketten installeren met pip:

(mijn-env) $ pip3 installatieverzoeken
## We kunnen de geïnstalleerde pakketten weergeven met de opdracht 'pip freeze'
(mijn-env) $ pip3 bevriezen
certificeren==2018.10.15
chardet==3.0.4
idna==2.7
pkg-resources==0.0.0
verzoeken==2.20.1
urllib3==1.24.1

Zolang de virtuele omgeving actief is (zoals aangegeven door de prompt), worden alle pakketten alleen opgeslagen in de map van de virtuele omgeving (my-env), ongeacht waar u zich in het bestandssysteem bevindt.

Om uit de virtuele omgeving te komen, typt u deactivate in de prompt en u zult de systeembrede installatie van Python weer gebruiken. U kunt opmerken dat de nieuwe pakketten die we zojuist hebben geïnstalleerd niet worden weergegeven in de globale pip-installatie.

Om van de virtuele omgeving af te komen, verwijdert u eenvoudig de map my-env die is gemaakt na het uitvoeren van de module. U kunt zoveel van deze omgevingen maken als u wilt.

Conclusie

Met de venv-module zijn virtuele omgevingen nu beschikbaar als een standaardfunctie van Python, vooral als je installeert vanuit Python.org. Voorheen hadden we veel implementaties van derden genaamd virtualenv,pyenv,etc.

Dit leidde tot steeds meer opgeblazen software zoals Anaconda, vooral populair onder datawetenschappers. Het is goed om eindelijk een simplistische tool te hebben voor het beheren van Python-pakketten zonder een heleboel andere niet-gerelateerde rommel te hoeven installeren. U kunt hier meer lezen over venv.

Hoe u uw gamesessie op Linux kunt vastleggen en streamen
In het verleden werd het spelen van games alleen als een hobby beschouwd, maar met de tijd zag de game-industrie een enorme groei in termen van techno...
Beste spellen om te spelen met handtracking
Oculus Quest introduceerde onlangs het geweldige idee van handtracking zonder controllers. Met een steeds toenemend aantal games en activiteiten die f...
OSD-overlay tonen in Linux-apps en -games op volledig scherm
Het spelen van games op volledig scherm of het gebruik van apps in de modus volledig scherm zonder afleiding kan u afsnijden van relevante systeeminfo...