Bibliotek
Ofta när man programmerar stöter man på ett stort problem som eller som man inte vill lösa själv men man misstänker att någon annan redan har löst. I många fall kan man då hitta ett externt bibliotek och använda det istället för att skriva koden själv.
Moduler, datastrukturer, klasser och funktioner
En modul är en grupp av funktioner och klasser (används i kursen) som tillsammans löser specifika uppgifter. Alla externa bibliotek är uppdelade i minst en modul, och om man vill dela upp sin python-kod i flera filer delas den också upp i moduler.
Funktioner i en modul körs genom att skriva module_name.function_name(...)
.
Detta har fördelen att två moduler som tolkar data kan definiera funktioner med samma namn
och fortfarande användas tillsammans. Om man importerar modulen med from module_name import function_name...
behöver man inte skriva modulnamnet vid anrop till function_name
Import
För att utnyttja funktioner från andra bibliotek eller filer i python används nyckelordet import
.
Det vanligaste sättet att använda import är att skriva import library
vilket importerar modulen
library
.
I vissa fall har biblioteket ett långt och jobbigt namn som man inte vill skriva varje gång man ska använda funktioner i biblioteket. Det finns då två andra sätt att importera koden.
Man kan skriva import library as lb
där lb
är ett annat namn man vill ha på biblioteket.
Om man importerat biblioteket så kan man skriva lb.function(...)
för att anropa function
.
I vissa fall vill man bara använda några enstaka funktioner i biblioteket och då kan man
använda from library import function, function2, ...
. Med den typen av import kan man kalla
på function
och function2
utan något library innan.
Vad bör man använda
Eftersom det finns tre olika sätt att importera bibliotek kan det vara svårt att veta
vilket av dem man ska använda. Oftast är det tydligast att bara använda import
eftersom
det då är helt uppenbart var funktioner kommer ifrån för någon som läser koden.
Om många funktioner i ett bibliotek används väldigt ofta kan det vara en idé att importera den
med ett kortare namn. Biblioteket numpy
brukar till exempel importeras som np
. Detta har dock
nackdelen att det blir lite otydligare vad np
faktiskt är så det bör inte göras för ofta.
Till slut, om man har ett bibliotek där man bara använder några enstaka funktioner väldigt ofta så kan det vara
lika bra att använda from x import y
. Det bör dock inte göras om man använder många funktioner eftersom
det då blir mycket svårare att se att en funktion kommer från ett externt bibliotek.
from x import *
En specialfunktion med from x import
-syntaxen är att man kan importera alla funktioner ur ett bibliotek
genom att skriva from x import *
. Detta bör man dock undvika eftersom man inte har koll på alla
funktioner i biblioteket och kan råka 'överskrida' funktioner från andra imports eller från sin egen kod.
Se följande exempel för att se varför:
equation.py
def parse(data):
"""Parses data as an equation"""
...
natural_language.py
def synonym(word):
"""Returns a synonym to `word`"""
...
def parse(sentence, language):
"""Returns the meaning of sentence in language"""
main.py
from equation import parse
# Will "shadow" the parse function from the equation module
from natural_language import *
# What we actually want to use the natural language module for
def get_synonyms():
...
def calculate_equation():
eq=input()
parse(eq) # Will return an error because we call the wrong parse function
Språkfunktioner, standardbibliotek och externa bibliotek
De flesta programmeringsspråken som finns, inklusive python, är uppdelade i en liten språkkärna, ett större standardbibliotek och flera externa bibliotek som inte skapas av språkskaparna.
Språkkärnan
I pythons språkkärna finns de vanligaste funktionerna som används, till exempel map
och print
och datastrukturer som list
, string
och dictionary
.
Dessa funktioner brukar kallas inbyggda (eng. built-in) och behöver inte importeras med import. De går att använda direkt.
Standardbiblioteket
Standardbiblioteket innehåller många fler funktioner och datastrukturer som ofta gör mer specifika
eller nichade saker än de inbyggda funktionerna. Här finns funktioner för att behandla datum och tid,
matematikfunktioner, filhantering med mera. Eftersom många projekt inte behöver använda alla funktionerna
måste modulerna importeras med import
. En lista och dokumentation för alla moduler som ingår i
standardbiblioteket kan hittas här: https://docs.python.org/3/library/index.html
När man söker efter dokumentation om pytons standardbibliotek kan man ibland hamna på sidorna för
python 2 istället för 3. Dokumentationen för python 2 har ofta en blå sidebar istället för vit och
om man inser att man hittat en sådan sida kan man byta /2/
i URL:en till /3/
.
Externa bibliotek
Externa bibliotek är skrivna av andra utvecklare och utför ofta mer avancerade och specifika uppgifter än de moduler som finns i standardbiblioteket. I kursen kommer vi till exempel att använda biblioteket OpenCV som används för bildbehandling av olika slag. Det skrevs från början av Intel och underhålls nu av en egen organisation.
Att installera externa bibliotek
Som namnet antyder så följer externa bibliotek inte med i en pythoninstallation utan de måste installeras separat.
Pip
Det enklaste sättet att installera ett externt bibliotek är att använda verktyget pip
som brukar
följa med python-installationer. Pip hämtar och installerar bibliotek från en central källa och ser
till att paketen går att importera med python.
Paketen som installeras med pip kommer ifrån python package index (pypi) https://pypi.python.org/pypi.
Om man är intresserad av att installera ett paket och inte vet om det finns i pypi brukar man
kunna söka på biblioteksnamnet pip
och få instruktioner för hur man installerar det.
Kompilera själv
Tyvärr finns inte alla paket i pypi och då kan man behöva kompilera och installera paketet själv. OpenCV har till exempel inte någon officiell version i pypi och den versionen som finns saknar mycket funktionalitet.
Instruktionerna för att kompilera paket manuellt brukar skilja sig mellan olika bibliotek, men ofta
är det inte svårare än att hämta koden och köra python3 setup.py
.
Import och projekt med fler filer
Vi har sett hur import används för att importera delar av externa bibliotek, men det används även för att importera kod som finns i andra filer i samma projekt. Att dela upp projekt i mindre filer eller moduler är en väldigt bra idé när koden blir större än några enstaka funktioner. Det låter en separera delar av koden som gör olika saker och gör det lättare att hitta de funktioner man letar efter.
Filer
Det enklaste sättet att dela upp koden är att bara ha olika filer. För att importera kod från en annan
fil anvädner man import <modulnamn>
där modulnamnet är filnamnet utan .py
. Precis som med bibliotek läggs de nya funktionerna i en egen modul och man måste skriva modulnamn.function()
för att använda dem.
Undermappar
Ibland vill man även dela upp koden i undermappar vilket är lite mer komplext. För att python ska
känna igen en mapp som en projektmapp måste det finnas en fil som heter __init__.py
i mappen. Denna fil kan vara tom. För att importera en fil från en mapp används import mappnamn.modulnamn
och för
att anropa en funktion i filen används mappnamn.modulnamn.function()
.
Virtualenv
Ibland använder man en dator som man inte har administratörsrättigheter på, till exempel datorerna på universitetet. Då kan det vara svårt att installera paket eftersom de oftast vill bli installerade på systemnivå. Ett sätt att komma runt det och installera paketen lokalt är med verktyget virutalenv.
Virtualenv skapar en virtuell pythonmiljö där paket kan installeras utan att påverka resten av systemet. Det gör också att man kan ha flera olika versioner av samma bibliotek i olika projekt.
Du kan läsa mer om virtualenv här: https://virtualenv.pypa.io/en/stable/.
Sidansvarig: Peter Dalenius
Senast uppdaterad: 2021-12-03