Importer modul ind Python med eksempler

Hvad er modulerne i Python?

Et modul er en fil med python-kode. Koden kan vรฆre i form af variabler, funktioner eller klassedefinerede. Filnavnet bliver modulnavnet.

For eksempel, hvis dit filnavn er guru99.py, vil modulnavnet vรฆre guru 99. Med modulfunktionalitet kan du opdele din kode i forskellige filer i stedet for at skrive alt i รฉn fil.

Hvad er det Python import modul?

En fil betragtes som et modul i python. For at bruge modulet skal du importere det vha importen sรธgeord. Funktionen eller variablerne i filen kan bruges i en anden fil ved at importere modulet. Denne funktionalitet er tilgรฆngelig pรฅ andre sprog, sรฅsom typescript, JavaScript, java, ruby โ€‹โ€‹osv.

Sรฅdan opretter og importerer du et modul i Python?

Nu vil vi oprette et modul og importere det i en anden fil.

Her er flowet til at oprette og importere modulet som vist pรฅ skรฆrmbilledet:

Opret og importer et modul i Python

Fรธlg trinene for at oprette et modul i python.

Mappestrukturen, der bruges til at teste koden, er som fรธlger:

modtest/
	test.py
	display.py	

Trin 1) Opret en fil og navngiv den test.py

Trin 2) Inde i test.py opret en funktion kaldet display_message()

Def display_message():
    return "Welcome to Guru99 Tutorials!"

Trin 3) Opret nu endnu en fil display.py.

Trin 4) Inside display.py importer moduletest.py filen, som vist nedenfor:

import test

Mens du importerer, behรธver du ikke at nรฆvne test.py, men blot navnet pรฅ filen.

Trin 5) Sรฅ kan du kalde funktionen display_message() fra test.py inde i display.py, du skal gรธre brug af modul_navn.funktionsnavn.

For eksempel test.display_message().

Import test
print(test.display_message())

Trin 6) Nรฅr du udfรธrer display.py, fรฅr du fรธlgende Output:

Welcome to Guru99 Tutorials!

Import af en klasse i Python

Tidligere har vi set et simpelt modul med en funktion. Her vil der oprettes en klasse og henvise klassen til en anden fil.

Mappestrukturen til at teste koden er som fรธlger:

myproj/
	Car.py
	display.py

Opret en fil kaldet Car.py med fรธlgende kode:

Filnavn: Car.py

class Car:
	brand_name = "BMW"
	model = "Z4"
	manu_year = "2020"

	def __init__(self, brand_name, model, manu_year):
		self.brand_name = brand_name
		self.model = model
		self.manu_year = manu_year

	def car_details(self):
		print("Car brand is ", self.brand_name)
		print("Car model is ", self.model)
		print("Car manufacture year is ", self.manu_year)
			
			
	def get_Car_brand(self):
		print("Car brand is ", self.brand_name)

	def get_Car_model(self):
		print("Car model is ", self.model) 

I filen Car.py er der attributter brand_name, model og manu_year. Funktionerne defineret inde i klassen er car_details(), get_Car_brand(), get_Car_model().

Lad os nu bruge filen Car.py som et modul i en anden fil kaldet display.py.

Filnavn: display.py

import Car
car_det = Car.Car("BMW","Z5", 2020)
print(car_det.brand_name)
print(car_det.car_details())
print(car_det.get_Car_brand())
print(car_det.get_Car_model())

Output:

BMW
Car brand is  BMW
Car model is  Z5
Car manufacture year is  2020
Car brand is  BMW
Car model is  Z5

Sรฅ vi kan fรฅ adgang til alle variabler og funktioner fra Car.py ved hjรฆlp af bilmodulet.

Bruger fra til import modul

Du kan kun importere en lille del af modulet, dvs. kun de nรธdvendige funktioner og variabelnavne fra modulet i stedet for at importere fuld kode.

Nรฅr du kun vil have bestemte ting, der skal importeres, kan du bruge "fra" nรธgleord til at importere det, du รธnsker.

Sรฅ syntaksen er

from  module import your function_name , variables,... etc.

Mappestrukturen, der bruges til at teste koden, er som fรธlger:

modtest/
	test.py
	display.py	

I test.py er der 2 funktioner som vist:

Filnavn: test.py

defdisplay_message():
	return "Welcome to Guru99 Tutorials!"
	
def display_message1():
	return "All about Python!"

Nu vil du have display_message() funktion. Funktionen eller variabelen, som du importerer, kan tilgรฅs direkte som vist nedenfor:

Filnavn: display.py

from test import display_message
print(display_message())

Output:

Welcome to Guru99 Tutorials!

Hvis du nu tilfรฆldigvis bruger funktionen display_message1(), vil det give en fejl om, at funktionen ikke er defineret som vist nedenfor:

from test import display_message
print(display_message1())

Output:

Traceback (most recent call last):
File "display.py", line 3, in <module>
print(display_message1())
Name Error: name 'display_message1' is not defined

Importerer alt fra modulet

Import giver dig mulighed for at importere hele modulet ved at bruge import efterfulgt af modulnavn, dvs. filnavnet eller det bibliotek, der skal bruges.

Syntaks:

Import module

Eller ved at bruge

from module import *

Mappestrukturen, der bruges til at teste koden, er som fรธlger:

modtest/
	test.py
	display.py	

Fรธlgende er kodedetaljerne inde i test.py

my_name = "Guru99"
my_address = "Mumbai"

defdisplay_message():
	return "Welcome to Guru99 Tutorials!"
	
	
def display_message1():
	return "All about Python!"

Brug af importmodulet

Ved blot at bruge import modulnavn, for at henvise til variablerne og funktionerne inde i modulet, skal det prรฆfikses med modulnavn.

Eksempel

Filnavn: display.py

Import test
print(test.display_message())
print(test.display_message1())
print(test.my_name)
print(test.my_address)

Modulnavntesten bruges til at henvise til funktionen og variablerne i modultesten.

Output:

Welcome to Guru99 Tutorials!
All about Python!
Guru99
Mumbai

Brug af import *

Lad os se et eksempel ved hjรฆlp af import *. Ved brug af import *, er funktionerne og variablerne direkte tilgรฆngelige, som vist i eksemplet nedenfor:

from test import *

print(display_message())
print(display_message1())
print(my_name)
print(my_address)

Output:

Welcome to Guru99 Tutorials!
All about Python!
Guru99
Mumbai

Dir( )-funktionen

dir() er en indbygget funktion i python. dir() returnerer alle egenskaber og metoder, inklusive det givne objekts indbyggede egenskaber.

Sรฅ nรฅr dir() bruges pรฅ modulet, vil det give dig variablerne, funktioner der er til stede i modulet.

Her er et fungerende eksempel pรฅ dir() pรฅ et modul. Vi har en klasse kaldet Car.py, lad os importere Car og tildele til dir() for at se output.

Mappestrukturen til at teste koden vil vรฆre som fรธlger:

test prop/
	Car.py
	test.py	

Filnavn: Car.py

class Car:
	brand_name = "BMW"
	model = "Z4"
	manu_year = "2020"

	def __init__(self, brand_name, model, manu_year):
		self.brand_name = brand_name
		self.model = model
		self.manu_year = manu_year

	def car_details(self):
		print("Car brand is ", self.brand_name)
		print("Car model is ", self.model)
		print("Car manufacture year is ", self.manu_year)
			
			
	def get_Car_brand(self):
		print("Car brand is ", self.brand_name)

	def get_Car_model(self):
		print("Car model is ", self.model) 

Filnavn: test.py

import Car

class_contents = dir(Car)
print(class_contents)

Outputtet giver os navnet pรฅ klassen og alle de funktioner, der er defineret i Car.py.

Du kan ogsรฅ prรธve at bruge dir() pรฅ et indbygget modul tilgรฆngeligt i Python. Lad os prรธve det samme json modul som vist i eksemplet nedenfor. Det vil vise alle de egenskaber og metoder, der er tilgรฆngelige i json modul.

Import json
json_details = dir(json)
print(json_details)

Output:

['JSONDecodeError', 'JSONDecoder', 'JSONEncoder', '__all__', '__author__', '__bu
iltins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__pac
kage__', '__path__', '__spec__', '__version__', '_default_decoder', '_default_en
coder', 'codecs', 'decoder', 'detect_encoding', 'dump', 'dumps', 'encoder', 'loa
d', 'loads', 'scanner']

Pakker

En pakke er en mappe med alle moduler defineret inde i den. At lave en Python tolk behandler det som en pakke, skal dit bibliotek have init.pyfile. Init.py laver mappen som en pakke. Her er layoutet af pakken, som vi skal arbejde pรฅ.

Pakker ind Python

Pakkens navn er min pakke. For at begynde at arbejde med pakken skal du oprette en mappe kaldet package/. Inde i mappen skal du oprette en tom fil kaldet __init__.py. Opret yderligere 3 filer modul1.py, modul2.py og modul3.py og definer funktionerne som vist pรฅ skรฆrmbilledet. Her er detaljerne om modul1.py, modul2.py og modul3.py

modul1.py

def mod1_func1():
print("Welcome to Module1 function1")

def mod1_func2():
print("Welcome to Module1 function2")

def mod1_func3():
print("Welcome to Module1 function3")

modul2.py

def mod2_func1():
print("Welcome to Module2 function1")

def mod2_func2():
print("Welcome to Module2 function2")

def mod2_func3():
print("Welcome to Module2 function3")

modul3.py

def mod3_func1():
print("Welcome to Module3 function1")

def mod3_func2():
print("Welcome to Module3 function2")

def mod3_func3():
print("Welcome to Module3 function3")

pakkeer klar til brug. Kald nu pakken inde i enhver af dine filer som vist nedenfor :test.py:

Her importeres mypackage.module1 og fรฅr et aliasnavn som mod1. Pรฅ samme mรฅde kan du bruge andre moduler modul2.py og modul3.py fra min pakke.

import mypackage.module1 as mod1

print(mod1.mod1_func1())
print(mod1.mod1_func2())
print(mod1.mod1_func2())

Output:

Welcome to Module1 function1
None
Welcome to Module1 function2
None
Welcome to Module1 function2
None

Vi har netop demonstreret pakken med et simpelt modul med funktioner indeni. I henhold til dit projekt kan du ogsรฅ pakke med underpakker. Undermapper/ med moduler med definerede klasser.

Python Modulsรธgningssti

Under udfรธrelse, nรฅr python stรธder pรฅ import modulnavn, forsรธger tolken at lokalisere modulet. Den sรธger efter modulet i listen over indbyggede moduler. Later i alt de mapper, der er defineret inde i sys.path.

For at opsummere udfรธrer tolken fรธlgende sรธgning for at finde modulet:

  1. I din nuvรฆrende mappe.
  2. Ind i listen over indbyggede moduler
  3. Inde i sys.path bibliotekerne

Du kan fรฅ detaljerne om sys.path ved at importere sys-modulet og udskrive sys.path. Det vil give dig listen over mapper som vist nedenfor:

importsys
print(sys.path)

Output:

['Python Latest\\task2', 'Users\\AppData\\Local\\Programs\\Python\
\Python37\\python37.zip', 'Users\\AppData\\Local\\Programs\\Python\\P
ython37\\DLLs']

Du kan ogsรฅ รฆndre stien og beholde mapperne i henhold til dine krav.

Brug af modulalias i importen

Du kan ogsรฅ konvertere modulnavnet til en kortere form ved at give det et alias. Aliaset kan udfรธres ved hjรฆlp af nรธgleordet.

Syntaks:

import filename as alias name

Mappestrukturen til at teste koden vil vรฆre som fรธlger:

Mod test/
	test.py
	display.py	

Fรธlgende er koden inde i test.py

my_name = "Guru99"
my_address = "Mumbai"

def display_message():
	return "Welcome to Guru99 Tutorials!"	
	
def display_message1():
	return "All about Python!"

Nu vil bruge et alias for test.py i display.py

Import test as t

print(t.display_message())
print(t.display_message1())
print(t.my_name)
print(t.my_address)

Aliaset der bruges til testmodulet er t . Sรฅ funktionen og variablerne fra test.py kan henvises ved hjรฆlp af aliasset t.

Output:

Welcome to Guru99 Tutorials!
All about Python!
Guru99
Mumbai

Absolut og relativ import i Python

Du ved nu, hvordan du importerer en fil som et modul i en anden fil. Lad os nu se, hvordan man administrerer de tilgรฆngelige filer i mapper. Filerne i mapperne kan importeres enten ved at bruge absolut eller relativ import.

Overvej, at du har din projektmappestruktur, som vist nedenfor:

Absolut og relativ import i Python

Rodmappen er mit projekt/. Den har to undermapper pakke1 og pakke2.

Mappen pakke1 har to moduler, modul1.py og modul2.py.

Mappen pakke2 har en klasse myclass.py, en underpakke underpakke med modul3.py og sidste modul4.py.

  • I modul1.py er der en funktion kaldetmyfunc1.
  • I modul2.py er der en funktion kaldet myfunc2.
  • I modul3.py er der en funktion kaldet myfunc3.
  • I modul4.py er der en funktion kaldet myfunc4.

Brug af absolut import

For absolut import skal du tilfรธje hele stien til dit modul direkte fra projektets rodmapp.

Lad os nu se, hvordan man gรธr brug af absolut import til at henvise til funktionerne i hvert af modulerne.

For at arbejde med functionmyfunc1 skal du importere som fรธlger:

from package1.module1  import  myfunc1
or
from package1 import module1
module1.myfunc1()  

For at arbejde med funktionen myfunc3 skal du importere som fรธlger:

from package1.subpkg.module3  import  myfunc3
or
from package1.subpkg import module3
module3.myfunc3()  

Fordele og ulemper ved at bruge absolut import

Her er fordelene ved at bruge absolut import:

  • Det bliver nemt at spore modulerne tilbage til kodekontrol.
  • Nem at bruge og meget ligetil.
  • Hvis projektet flyttes til en anden vej, vil importen stadig forblive den samme.

Ulemper ved at bruge absolut import

Her er ulemperne ved at bruge absolut import:

Ulemper:

  • Importstien kan blive meget lang i tilfรฆlde af, at modulerne er indlejret, og hvis navnet pรฅ modulerne er langt.

Brug af relativ import

I betragtning af den samme mappestruktur, der er nรฆvnt nedenfor, vil vi se, hvordan du importerer den samme ved hjรฆlp af relative importer.

Ved relativ import er modulet, der skal importeres, i forhold til den aktuelle placering, som er den placering, hvor importerklรฆringen er til stede.

Syntaks

Ved relativ import skal du tilfรธje et punktum (.) fรธr modulnavnet, nรฅr du importerer vha fra.

Der vil gรฅ 2 perioder (..) fรธr modulnavnet, hvis modulet er i et niveau op fra den aktuelle placering.

Med henvisning til mappestrukturfiguren nรฆvnt ovenfor, har vi fรธlgende moduler med deres funktion, som vi skal henvise til.

  • I modul1.py er der en funktion kaldetmyfunc1.
  • I modul2.py er der en funktion kaldet myfunc2.
  • I modul3.py er der en funktion kaldet myfunc3.
  • I modul4.py er der en funktion kaldet myfunc4.

For at arbejde med functionmyfunc1 skal du importere som fรธlger:

from  .module1  import  myfunc1

For at arbejde med funktionen myfunc3 skal du importere som fรธlger:

from  .subpkg.module3  import  myfunc3

Fordele ved relativ import

fordele:

  • Det er nemt at arbejde med relativ import.
  • Fra den nuvรฆrende placering kan importen forkortes i forhold til absolut import.

Ulemper ved relativ import

Ulemper:

  • Ved hjรฆlp af relativ import er det svรฆrt at spore tilbage, hvor koden er

Resumรฉ

  • Importer ind Python hjรฆlper dig med at henvise til koden, dvs. .funktioner/objekter, der er skrevet i en anden fil. Det bruges ogsรฅ til at importere python-biblioteker/-pakker, der er installeret ved hjรฆlp af pip(python-pakkehรฅndtering), og du skal derefter bruge i din kode.
  • Importfunktionalitet er tilgรฆngelig pรฅ andre sprog sรฅsom typescript, JavaScript, java, ruby โ€‹โ€‹osv.
  • Et modul er python er koden skrevet inde i filen, for eksempel (test.py). Inde i din fil kan du have dine variabler, funktioner eller din klasse defineret. Hele filen bliver et modul og kan importeres i en anden fil for at referere til koden.
  • Med modulfunktionalitet kan du opdele din kode i forskellige filer i stedet for at skrive alt i รฉn fil. Later, ved at bruge import, kan du henvise til koden inde i den fil, du har brug for.
  • Python har sine indbyggede moduler, og ogsรฅ eksterne biblioteker/pakker installeret ved hjรฆlp af en python-pakkehรฅndtering (pip), fx pandaer, NumPy osv. omtales som moduler.
  • Du kan kun importere en lille del af modulet, dvs. kun de nรธdvendige funktioner og variabelnavne fra modulet i stedet for at importere fuld kode.
  • Du kan ogsรฅ konvertere modulnavnet til en kortere form ved at give det et alias. Aliaset kan udfรธres ved hjรฆlp af nรธgleordet.
  • En pakke er en mappe med alle moduler defineret inde i den. At lave en Python tolk behandler det som en pakke, skal dit bibliotek have __init.pyfile. Init.py laver mappen som en pakke. Her er layoutet af pakken, som vi skal arbejde pรฅ.
  • Under udfรธrelse, nรฅr python stรธder pรฅ import modulnavn, forsรธger tolken at lokalisere modulet. Den sรธger efter modulet i listen over indbyggede moduler. Later i alt de mapper, der er defineret inde i sys.path.
  • For absolut import skal du tilfรธje hele stien til dit modul direkte fra projektets rodmapp.
  • Ved relativ import er modulet, der skal importeres, i forhold til den aktuelle placering, som er den placering, hvor importerklรฆringen er til stede.

Opsummer dette indlรฆg med: