Python virtual environment venv

  • Författare
  • Meddelande
Online
Användarvisningsbild

mos

dbwebb

  • Inlägg: 11176
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Python virtual environment venv

Inlägg03 nov 2017, 15:29

När man jobbar i ett Python-projekt, eller i ett kursrepo, så vill man kunna installera program och moduler som endast ligger i projektet och inte krockar med övriga globala installationer på ens dator.

Till vår hjälp kommer Pythons virtual environment, venv. I senare utgåvor av Python är detta inkluderat i den exekverbara python3.

Här är en snabb variant och översikt till hur det fungerar. Som exempel används repot matmod. Jag visar hur du skapar den virtuella miljön med och utan makefilen som ligger i repot.

Skapa, aktivera och deaktivera en virtuell miljö.
Skapa den virtuella miljön i en viss katalog, här .venv.
Kod: Markera allt
# make python-venv
$ python3 -m venv .venv
$ ls -l .venv


Nu aktiverar vi den, man kan alltså ha flera virtuella miljöer liggande parallellt.
Kod: Markera allt
# Sourca dess miljö och prompten ändras
$ . .venv/bin/activate
(.venv) $ which python3
/home/mos/git/matmod/.venv/bin/python3


Jag har sedan tidigare ett alias för detta, allt för att förenkla.
Kod: Markera allt
$ alias activate
alias activate='. .venv/bin/activate'


Allt vi gör med Python kommer nu att gå mot de versioner som ligger installerade i vår virtuella miljö som vi aktiverat.

När vi är klara så deaktiverar vi den virtuella miljön och prompten går tillbaka till sin utsprungliga form och nu används den globala installationen istället.
Kod: Markera allt
(.venv) $ deactivate
$ which python3
/usr/bin/python3



Installera med pip från requirements.txt

Ett sätt att enkelt installera många paket på en gång är att lägga dem i en fil requirements.txt, så här.
Kod: Markera allt
pylint
sympy


Sedan kan man installera alla paketen via python3 -m pip install. I kursrepot har jag valt att döpa om filen till .requirements.txt så jag skriver python3 -m pip install --requirement .requirements.txt men jag tar också hjälp av makefilen och make python-install.
Kod: Markera allt
# Installera paket från requirements.txt
# make python-install
$ python3 -m pip install --requirement .requirements.txt


En fil requirements.txt är bra att ha i ett repo så att alla dependencies installeras per automatik.
...
..:
.... /mos

RichardNilsson

css-hackare

  • Inlägg: 20
  • Blev medlem: 28 aug 2018, 14:41

Re: Python virtual environment venv

Inlägg09 jan 2020, 07:49

Hej,

På sidan https://dbwebb.se/kunskap/python-virtuel-miljo så föreslås det att man lägger till följande i sin requirements.txt:

  • Flask ~= 1.0.2
  • Jinja2 ~= 2.10

Finns det någon anledningen till att vi inte använder senaste versionerna? För Flask gäller just nu version: 1.1.1 och min installerade version blev 1.0.4. För Jinja så installeras den senaste versionen (2.10.3).

En annan fråga:
I första kommentaren så referas till en makefil, skulle någon kunna utveckla detta? Jag förstår inte hur den används..
Användarvisningsbild

Zeldah

dbwebb

  • Inlägg: 504
  • Blev medlem: 02 mar 2016, 10:17

Re: Python virtual environment venv

Inlägg09 jan 2020, 08:34

Versioner av programmen är satta till vad det var när vi skrev texten. Det går nog bra att ändra till den senaste versionen, kan vara så att något har ändrats mellan versionerna men jag tror inte det är något större.

En Makefile är i grunden en fil som innehåller kommandon för att bygga/kompiler filer. Men nu används det också för att köra egna kommandon. Så i Mikaels exempel har han gjort ett kommando i en Makefile som skapar en virtuel miljö. När han skriver make python-venv så körs kommandot python3 -m venv .venv.
Du kan ignorera det i denna kursen. Men i andra kurser så kommer ni jobba med egna Makefiles.

PS när det kommer till oopython, jag gulmarkerade kursen igår för att jag tänkte uppdatera lite i den innan kursen startar. Kmom01 kommer nog vara sig väldigt likt vad det redan är men några saker ska uppdateras.

Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 14 gäster