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
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-venvVervolgens gaan we naar de map waarin u uw virtuele omgevingsmap wilt maken. Voor mij is het ~/project1
$ cd ~/project1Maak 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-envOpmerking: 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:
- 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. - 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.