Uvezi modul u Python s Primjerima

U ฤemu se nalaze moduli Python?

Modul je datoteka s python kodom. Kod moลพe biti u obliku varijabli, funkcija ili definirane klase. Naziv datoteke postaje naziv modula.

Na primjer, ako je naziv vaลกe datoteke guru99.py, naziv modula bit ฤ‡e guru99. S funkcionalnoลกฤ‡u modula, moลพete rastaviti svoj kod na razliฤite datoteke umjesto da sve piลกete unutar jedne datoteke.

ล to je Python uvozni modul?

Datoteka se u pythonu smatra modulom. Da biste koristili modul, morate ga uvesti pomoฤ‡u uvoz kljuฤna rijeฤ. Funkcija ili varijable prisutne unutar datoteke mogu se koristiti u drugoj datoteci uvozom modula. Ova je funkcija dostupna na drugim jezicima, poput pisaฤ‡eg teksta, JavaSkripta, java, ruby โ€‹โ€‹itd.

Kako izraditi i uvesti modul Python?

Sada ฤ‡emo izraditi modul i uvesti ga u drugu datoteku.

Evo tijeka za izradu i uvoz modula kao ลกto je prikazano na snimci zaslona:

Stvorite i uvezite modul Python

Slijedite navedene korake za izradu modula u pythonu.

Struktura mape koja se koristi za testiranje koda je sljedeฤ‡a:

modtest/
	test.py
	display.py	

Korak 1) Napravite datoteku i nazovite je test.py

Korak 2) Unutar test.py stvorite funkciju pod nazivom display_message()

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

Korak 3) Sada stvorite drugu datoteku display.py.

Korak 4) Unutar display.py uvezite datoteku moduletest.py, kao ลกto je prikazano u nastavku:

import test

Prilikom uvoza ne morate spominjati test.py veฤ‡ samo naziv datoteke.

Korak 5) Zatim moลพete pozvati funkciju display_message() iz test.py unutar display.py, morate koristiti module_name.function_name.

Na primjer test.display_message().

Import test
print(test.display_message())

Korak 6) Kada izvrลกite display.py, dobit ฤ‡ete sljedeฤ‡e Izlaz:

Welcome to Guru99 Tutorials!

Uvoz razreda Python

Ranije smo vidjeli jednostavan modul s funkcijom. Ovdje ฤ‡e se stvoriti klasa i uputiti je u drugu datoteku.

Struktura mape za testiranje koda je sljedeฤ‡a:

myproj/
	Car.py
	display.py

Napravite datoteku pod nazivom Car.py sa sljedeฤ‡im kodom:

Naziv datoteke: 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) 

U datoteci Car.py postoje atributi brand_name, model i manu_year. Funkcije definirane unutar klase su car_details(), get_Car_brand(), get_Car_model().

Iskoristimo sada datoteku Car.py kao modul u drugoj datoteci pod nazivom display.py.

Naziv datoteke: 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())

Izlaz:

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

Dakle, moลพemo pristupiti svim varijablama i funkcijama iz Car.py koristeฤ‡i modul Car.

Koriลกtenje modula from to import

Moลพete uvesti samo mali dio modula, tj. samo potrebne funkcije i imena varijabli iz modula umjesto uvoza cijelog koda.

Kada ลพelite da se uvezu samo odreฤ‘ene stvari, moลพete koristiti kljuฤnu rijeฤ "from" za uvoz onoga ลกto ลพelite.

Dakle, sintaksa je

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

Struktura mape koja se koristi za testiranje koda je sljedeฤ‡a:

modtest/
	test.py
	display.py	

U test.py postoje 2 funkcije kao ลกto je prikazano:

Naziv datoteke: test.py

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

Sada ลพelite funkciju display_message(). Funkciji ili varijabli koju uvozite moลพe se izravno pristupiti kao ลกto je prikazano u nastavku:

Naziv datoteke: display.py

from test import display_message
print(display_message())

Izlaz:

Welcome to Guru99 Tutorials!

Sada ako sluฤajno koristite funkciju display_message1(), izbacit ฤ‡e pogreลกku da funkcija nije definirana kao ลกto je prikazano u nastavku:

from test import display_message
print(display_message1())

Izlaz:

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

Uvoz svega iz modula

Import vam omoguฤ‡uje uvoz cijelog modula koriลกtenjem importa iza kojeg slijedi naziv modula, tj. naziv datoteke ili biblioteke koja ฤ‡e se koristiti.

Sintaksa:

Import module

Ili koriลกtenjem

from module import *

Struktura mape koja se koristi za testiranje koda je sljedeฤ‡a:

modtest/
	test.py
	display.py	

Slijede detalji koda unutar test.py

my_name = "Guru99"
my_address = "Mumbai"

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

Koriลกtenje modula za uvoz

Koristeฤ‡i naziv samo uvoznog modula, za upuฤ‡ivanje na varijable i funkcije unutar modula, mora imati prefiks s nazivom modula.

Primjer

Naziv datoteke: display.py

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

Test naziva modula koristi se za upuฤ‡ivanje na funkciju i varijable unutar testa modula.

Izlaz:

Welcome to Guru99 Tutorials!
All about Python!
Guru99
Mumbai

Koriลกtenje uvoza *

Pogledajmo primjer pomoฤ‡u uvoz *, koristeฤ‡i uvoz *, funkcije i varijable su izravno dostupne, kao ลกto je prikazano u primjeru u nastavku:

from test import *

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

Izlaz:

Welcome to Guru99 Tutorials!
All about Python!
Guru99
Mumbai

Funkcija dir().

Dir() je ugraฤ‘ena funkcija u python. Dir() vraฤ‡a sva svojstva i metode, ukljuฤujuฤ‡i ugraฤ‘ena svojstva zadanog objekta.

Dakle, kada se dir() koristi na modulu, on ฤ‡e vam dati varijable, funkcije koje su prisutne unutar modula.

Ovdje je radni primjer dir() na modulu. Imamo klasu koja se zove Car.py, uvezimo Car i dodijelimo dir() da vidimo izlaz.

Struktura mape za testiranje koda bit ฤ‡e sljedeฤ‡a:

test prop/
	Car.py
	test.py	

Naziv datoteke: 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) 

Naziv datoteke: test.py

import Car

class_contents = dir(Car)
print(class_contents)

Izlaz nam daje naziv klase i sve funkcije definirane u Car.py.

Takoฤ‘er moลพete pokuลกati koristiti dir() na ugraฤ‘enom modulu dostupnom u Python. Hajde da probamo isto JSON modul kao ลกto je prikazano u primjeru u nastavku. Prikazat ฤ‡e sva svojstva i metode dostupne u JSON modul.

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

Izlaz:

['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']

Paketi

Paket je direktorij sa svim definiranim modulima unutar njega. Za izradu a Python interpreter tretira kao paket, vaลก direktorij bi trebao imati init.pyfile. Init.py ฤini imenik kao paket. Ovdje je izgled paketa na kojem ฤ‡emo raditi.

Paketi u Python

Naziv paketa je moj paket. Za poฤetak rada s paketom kreirajte direktorij pod nazivom package/. Unutar direktorija stvorite praznu datoteku pod nazivom __init__.py. Napravite joลก 3 datoteke module1.py, module2.py i module3.py i definirajte funkcije kao ลกto je prikazano na snimci zaslona. Ovdje su detalji o module1.py,module2.py i module3.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")

The paketspreman je za upotrebu. Sada pozovite paket unutar bilo koje datoteke kao ลกto je prikazano u nastavku :test.py:

Ovdje se mypackage.module1 uvozi i dobiva pseudonim kao mod1. Sliฤno, moลพete koristiti druge module module2.py i module3.py iz mog paketa.

import mypackage.module1 as mod1

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

Izlaz:

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

Upravo smo demonstrirali paket s jednostavnim modulom s funkcijama unutar njega. Prema vaลกem projektu, takoฤ‘er moลพete pakirati s pod-paketima. Podmape/s modulima s definiranim klasama.

Python Put traลพenja modula

Tijekom izvoฤ‘enja, kada naiฤ‘e python naziv modula uvoza, prevoditelj pokuลกava locirati modul. Pretraลพuje modul na popisu ugraฤ‘enih modula. Later u svemu, direktoriji definirani unutar sys.path.

Ukratko, tumaฤ radi sljedeฤ‡u pretragu kako bi locirao modul:

  1. U vaลกem trenutnom imeniku.
  2. U popisu ugraฤ‘enih modula
  3. Unutar direktorija sys.path

Detalje sys.path-a moลพete dobiti uvozom sys modula i ispisom sys.path-a. Dat ฤ‡e vam popis direktorija kao ลกto je prikazano u nastavku:

importsys
print(sys.path)

Izlaz:

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

Takoฤ‘er moลพete promijeniti putanju i zadrลพati direktorije prema svojim zahtjevima.

Koriลกtenje pseudonima modula u uvozu

Takoฤ‘er moลพete pretvoriti naziv modula u kraฤ‡i oblik tako da mu date pseudonim. Alias โ€‹โ€‹se moลพe napraviti pomoฤ‡u kljuฤne rijeฤi.

Sintaksa:

import filename as alias name

Struktura mape za testiranje koda bit ฤ‡e sljedeฤ‡a:

Mod test/
	test.py
	display.py	

Slijedi kod unutar test.py

my_name = "Guru99"
my_address = "Mumbai"

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

Sada ฤ‡e koristiti alias za test.py u display.py

Import test as t

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

Pseudonim koji se koristi za testni modul je t. Dakle, funkcija i varijable iz test.py mogu se referirati pomoฤ‡u aliasa t.

Izlaz:

Welcome to Guru99 Tutorials!
All about Python!
Guru99
Mumbai

Apsolutni i relativni uvoz u Python

Sada znate kako uvesti datoteku kao modul unutar druge datoteke. Pogledajmo sada kako upravljati datotekama dostupnim u mapama. Datoteke u mapama mogu se uvesti pomoฤ‡u apsolutnog ili relativnog uvoza.

Smatrajte da imate strukturu mape projekta, kao ลกto je prikazano u nastavku:

Apsolutni i relativni uvoz u Python

Korijenska mapa je moj projekt/. Ima dvije podmape package1 i package2.

Mapa package1 ima dva modula, module1.py i modul2.py.

Mapa package2 ima jednu klasu myclass.py, podpaket subpkg s module3.py i posljednji module4.py.

  • U module1.py postoji funkcija koja se zove myfunc1.
  • U module2.py postoji funkcija koja se zove myfunc2.
  • U module3.py postoji funkcija koja se zove myfunc3.
  • U module4.py postoji funkcija koja se zove myfunc4.

Koriลกtenje apsolutnog uvoza

Za apsolutni uvoz morate dodati cijeli put svog modula izravno iz korijenske mape projekta.

Pogledajmo sada kako iskoristiti apsolutne uvoze za upuฤ‡ivanje na funkcije prisutne u svakom od modula.

Za rad s funkcijommyfunc1 morat ฤ‡ete uvesti sljedeฤ‡e:

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

Za rad s funkcijom myfunc3 morat ฤ‡ete izvrลกiti uvoz na sljedeฤ‡i naฤin:

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

Prednosti i nedostaci koriลกtenja apsolutnog uvoza

Evo prednosti koriลกtenja apsolutnog uvoza:

  • Postaje lako pratiti module za provjeru koda.
  • Jednostavan za koriลกtenje i vrlo jednostavan.
  • Ako se projekt premjesti na drugu putanju, uvozi ฤ‡e i dalje ostati isti.

Nedostaci koriลกtenja apsolutnog uvoza

Evo nedostataka koriลกtenja apsolutnog uvoza:

Nedostaci:

  • Put uvoza moลพe biti jako dug u sluฤaju da su moduli ugnijeลพฤ‘eni i ako je naziv modula dugaฤak.

Koriลกtenje relativnih uvoza

Uzimajuฤ‡i u obzir istu strukturu mapa spomenutu u nastavku, vidjet ฤ‡emo kako je uvesti pomoฤ‡u relativnog uvoza.

U relativnom uvozu, modul koji se uvozi je relativan u odnosu na trenutnu lokaciju koja je lokacija na kojoj je prisutna izjava uvoza.

Sintaksa

U relativnom uvozu morate dodati toฤku (.) ispred naziva modula kada uvozite pomoฤ‡u iz.

Bit ฤ‡e 2 toฤke (..) ispred naziva modula ako je modul na razini viลกe od trenutne lokacije.

Pozivajuฤ‡i se na gore spomenutu sliku strukture mape, imamo sljedeฤ‡e module s njihovom funkcijom na koje se moramo pozvati.

  • U module1.py postoji funkcija koja se zove myfunc1.
  • U module2.py postoji funkcija koja se zove myfunc2.
  • U module3.py postoji funkcija koja se zove myfunc3.
  • U module4.py postoji funkcija koja se zove myfunc4.

Za rad s funkcijommyfunc1 morat ฤ‡ete izvrลกiti uvoz na sljedeฤ‡i naฤin:

from  .module1  import  myfunc1

Da biste radili s funkcijom myfunc3, morat ฤ‡ete izvrลกiti uvoz na sljedeฤ‡i naฤin:

from  .subpkg.module3  import  myfunc3

Prednosti relativnog uvoza

Prednosti:

  • Lako je raditi s relativnim uvozom.
  • S trenutne lokacije, uvozi se mogu skratiti u usporedbi s apsolutnim uvozima.

Nedostaci relativnog uvoza

Nedostaci:

  • Koristeฤ‡i relativne uvoze, teลกko je uฤ‡i u trag gdje se kรดd nalazi

Rezime

  • Uvezi u Python pomaลพe vam u referiranju na kod, tj. .funkcije/objekte koji su napisani u drugoj datoteci. Takoฤ‘er se koristi za uvoz python biblioteka/paketa koji su instalirani pomoฤ‡u pip-a (python package manager), a zatim ih morate koristiti u svom kodu.
  • Funkcija uvoza dostupna je na drugim jezicima kao ลกto su pisaฤ‡i tekst, JavaSkripta, java, ruby โ€‹โ€‹itd.
  • Modul je python kod napisan unutar datoteke, na primjer (test.py). U svojoj datoteci moลพete definirati svoje varijable, funkcije ili klasu. Cijela datoteka postaje modul i moลพe se uvesti u drugu datoteku za referencu koda.
  • S funkcionalnoลกฤ‡u modula, moลพete rastaviti svoj kod na razliฤite datoteke umjesto da sve piลกete unutar jedne datoteke. Later, koristeฤ‡i import, moลพete se pozvati na kod unutar datoteke koja vam je potrebna.
  • Python ima svoje ugraฤ‘ene module, a takoฤ‘er i vanjske biblioteke/pakete instalirane pomoฤ‡u a python upravitelj paketa (pip), npr. pande, NumPy itd. nazivaju se modulima.
  • Moลพete uvesti samo mali dio modula, tj. samo potrebne funkcije i imena varijabli iz modula umjesto uvoza cijelog koda.
  • Takoฤ‘er moลพete pretvoriti naziv modula u kraฤ‡i oblik tako da mu date pseudonim. Alias โ€‹โ€‹se moลพe napraviti pomoฤ‡u kljuฤne rijeฤi.
  • Paket je direktorij sa svim definiranim modulima unutar njega. Za izradu a Python interpreter tretira kao paket, vaลก direktorij bi trebao imati __init.pyfile. Init.py ฤini imenik kao paket. Ovdje je izgled paketa na kojem ฤ‡emo raditi.
  • Tijekom izvoฤ‘enja, kada naiฤ‘e python naziv modula uvoza, prevoditelj pokuลกava locirati modul. Pretraลพuje modul na popisu ugraฤ‘enih modula. Later u svemu, direktoriji definirani unutar sys.path.
  • Za apsolutni uvoz morate dodati cijeli put svog modula izravno iz korijenske mape projekta.
  • U relativnom uvozu, modul koji se uvozi je relativan u odnosu na trenutnu lokaciju koja je lokacija na kojoj je prisutna izjava uvoza.

Saลพmite ovu objavu uz: