Увоз модула у Питхон са примерима

Преглед садржаја:

Anonim

Који су модули у Питхону?

Модул је датотека са питхон кодом. Код може бити у облику дефинисаних променљивих, функција или класе. Име датотеке постаје име модула.

На пример, ако је ваше име датотеке гуру99.пи, име модула биће гуру99 . Помоћу функционалности модула можете да разбијете свој код на различите датотеке уместо да пишете све унутар једне датотеке.

У овом упутству ћете научити:

  • Који су модули у Питхону?
  • Питхон импорт модул
  • Како створити и увести модул у Питхону?
  • Увоз класе у Питхон
  • Коришћење модула за увоз
  • Увоз свега из модула
  • Коришћење модула за увоз
  • Коришћење увоза *
  • Функција дир ()
  • Пакети
  • ПитхонМодулеСеарцхПатх
  • Коришћење замјенског имена модула у увозу
  • Апсолутни и релативни увоз у Питхон
  • УсингАбсолутеИмпортс
  • УсингРелативеИмпортс

Шта је Питхон модул за увоз?

Датотека се сматра модулом у питхону. Да бисте користили модул, морате га увести помоћу кључне речи импорт . Функција или променљиве присутне у датотеци могу се користити у другој датотеци увозом модула. Ова функционалност је доступна на другим језицима, попут типецрипта, ЈаваСцрипт-а, Јава-е, руби-а итд.

Како створити и увести модул у Питхону?

Сада ћемо створити модул и увести га у другу датотеку.

Ево тока креирања и увоза модула као што је приказано на снимку екрана:

Следите кораке дате за креирање модула у питхон-у.

Структура директоријума која се користи за тестирање кода је следећа:

modtest/test.pydisplay.py

Корак 1) Направите датотеку и назовите је тест.пи

Корак 2) Унутар тест.пи креирајте функцију која се зове дисплаи_мессаге ()

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

Корак 3) Сада креирајте другу датотеку дисплаи.пи.

Корак 4) Унутар дисплаи.пи увезите датотеку модулетест.пи, као што је приказано доле:

import test

Приликом увоза не морате да помињете тест.пи, већ само име датотеке.

Корак5)

Тада можете позвати функцију дисплаи_мессаге () из тест.пи унутар дисплаи.пи, требате користити модуле_наме.фунцтион_наме.

На пример тест.дисплаи_мессаге ().

Import testprint(test.display_message())

Корак 6)

Када извршите дисплаи.пи, добићете следећи излаз:

Welcome to Guru99 Tutorials!

Увоз класе у Питхон

Раније смо видели једноставан модул са функцијом. Овде ће се створити класа и упутити класа у другу датотеку.

Структура директоријума за тестирање кода је следећа:

myproj/Car.pydisplay.py

Направите датотеку под називом Цар.пи са следећим кодом:

Име датотеке: Цар.пи

class Car:brand_name = "BMW"model = "Z4"manu_year = "2020"def __init__(self, brand_name, model, manu_year):self.brand_name = brand_nameself.model = modelself.manu_year = manu_yeardef 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)

У датотеци Цар.пи налазе се атрибути бранд_наме, модел и ман_иеар. Функције дефинисане унутар класе су цар_детаилс (), гет_Цар_бранд (), гет_Цар_модел ().

Хајде да сада користимо датотеку Цар.пи као модул у другој датотеци која се назива дисплаи.пи.

Назив датотеке: дисплаи.пи

import Carcar_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())

Излаз:

BMWCar brand is BMWCar model is Z5Car manufacture year is 2020Car brand is BMWCar model is Z5

Тако можемо приступити свим променљивим и функцијама из Цар.пи користећи Цар модул.

Коришћење модула за увоз

Можете увести само мали део модула, тј. Само потребне функције и имена променљивих из модула уместо да увезете пуни код.

Када желите да се увезу само одређене ствари, можете да користите кључну реч „фром“ да бисте увезли оно што желите.

Дакле, синтакса је

from module import your function_name , variables,… etc.

Структура директоријума која се користи за тестирање кода је следећа:

modtest/test.pydisplay.py

У тест.пи постоје 2 функције као што је приказано:

Назив датотеке: тест.пи

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

Сада желите функцију дисплаи_мессаге (). Функцији или променљивој коју увозите можете директно приступити као што је приказано доле:

Назив датотеке: дисплаи.пи

from test import display_messageprint(display_message())

Излаз:

Welcome to Guru99 Tutorials!

Сада ако случајно користите функцију дисплаи_мессаге1 (), испашће грешка што функција није дефинисана како је приказано доле:

from test import display_messageprint(display_message1())

Излаз:

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

Увоз свега из модула

Увоз вам омогућава увоз целог модула коришћењем увоза, а затим имена модула, тј. Назива датотеке или библиотеке која ће се користити.

Синтакса:

Import module

Или помоћу

from module import *

Структура директоријума која се користи за тестирање кода је следећа:

modtest/test.pydisplay.py

Следе детаљи кода унутар тест.пи

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

Коришћење модула за увоз

Користећи само име модула за увоз, да би се позвао на променљиве и функције унутар модула, мора имати префикс са именом модула.

Пример

Назив датотеке: дисплаи.пи

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

Тест назива модула користи се за упућивање на функцију и променљиве унутар теста модула.

Излаз:

Welcome to Guru99 Tutorials!All about Python!Guru99Mumbai

Коришћење увоза *

Погледајмо пример користећи импорт * . Користећи импорт * , функције и променљиве су директно доступне, као што је приказано у примеру доле:

from test import *print(display_message())print(display_message1())print(my_name)print(my_address)

Излаз:

Welcome to Guru99 Tutorials!All about Python!Guru99Mumbai

Функција дир ()

Дир () је уграђена функција у питхон-у. Дир () враћа сва својства и методе, укључујући уграђена својства датог објекта.

Дакле, када се дир () користи на модулу, даће вам променљиве, функције које су присутне у модулу.

Ево радног примера дир () на модулу. Имамо класу Цар.пи, увезимо Цар и доделимо дир () да бисмо видели излаз.

Структура директоријума за тестирање кода биће следећа:

test prop/Car.pytest.py

Име датотеке: Цар.пи

class Car:brand_name = "BMW"model = "Z4"manu_year = "2020"def __init__(self, brand_name, model, manu_year):self.brand_name = brand_nameself.model = modelself.manu_year = manu_yeardef 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)

Име датотеке: тест.пи

import Carclass_contents = dir(Car)print(class_contents)

Излаз нам даје име класе и свих функција дефинисаних у Цар.пи.

Такође можете покушати да користите дир () на уграђеном модулу који је доступан у Питхону. Покушајмо исто на јсон модулу као што је приказано у примеру испод. Приказаће сва својства и методе доступне у јсон модулу.

Import jsonjson_details = dir(json)print(json_details)

Излаз:

['JSONDecodeError', 'JSONDecoder', 'JSONEncoder', '__all__', '__author__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__version__', '_default_decoder', '_default_encoder', 'codecs', 'decoder', 'detect_encoding', 'dump', 'dumps', 'encoder', 'load', 'loads', 'scanner']

Пакети

Пакет је директоријум са свим модулима дефинисаним у њему. Да би се Питхон тумач понашао као пакет, ваш директоријум треба да има датотеку инит.пи. Инит.пи прави директоријум као пакет. Ево изгледа пакета на којем ћемо радити.

Назив пакета је мој пакет . Да бисте започели рад са пакетом, креирајте директоријум који се зове пакет /. Унутар директоријума креирајте празну датотеку која се зове __инит__.пи. Направите још 3 датотеке модуле1.пи, модуле2.пи и модуле3.пи и дефинишите функције као што је приказано на снимку екрана. Ево детаља о модуле1.пи, модуле2.пи и модуле3.пи

модуле1.пи

def mod1_func1():print("Welcome to Module1 function1")def mod1_func2():print("Welcome to Module1 function2")def mod1_func3():print("Welcome to Module1 function3")

модуле2.пи

def mod2_func1():print("Welcome to Module2 function1")def mod2_func2():print("Welcome to Module2 function2")def mod2_func3():print("Welcome to Module2 function3")

модуле3.пи

def mod3_func1():print("Welcome to Module3 function1")def mod3_func2():print("Welcome to Module3 function2")def mod3_func3():print("Welcome to Module3 function3")

Пакет с спреман за употребу. Сада позовите пакет унутар било које датотеке, као што је приказано доле: тест.пи:

Овде се мипацкаге.модуле1 увози и даје му псеудоним као мод1. Слично томе, можете користити и друге модуле модуле2.пи и модуле3.пи из мог пакета.

import mypackage.module1 as mod1print(mod1.mod1_func1())print(mod1.mod1_func2())print(mod1.mod1_func2())

Излаз:

Welcome to Module1 function1NoneWelcome to Module1 function2NoneWelcome to Module1 function2None

Управо смо демонстрирали пакет са једноставним модулом са функцијама унутар њега. Према вашем пројекту, такође можете да се пакујете са под-пакетима. Подмапе / са модулима са дефинисаним класама.

Пут претраживања модула Питхон

Током извршавања, када питхон наиђе на име модула за увоз , тумач покушава да пронађе модул. Претражује модул на листи уграђених модула. Касније, директоријуми дефинисани унутар сис.патх.

Да резимирамо, тумач врши следећу претрагу да би пронашао модул:

  1. У вашем тренутном директоријуму.
  2. У на листи уграђених модула
  3. Унутар директоријума сис.патх

Појединости о сис.патх можете добити увозом сис модула и исписом сис.патх. Даће вам списак директорија као што је приказано доле:

importsysprint(sys.path)

Излаз:

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

Такође можете да измените путању и задржите директоријуме према вашим захтевима.

Коришћење замјенског имена модула у увозу

Такође можете претворити име модула у краћи облик тако што ћете му дати надимак. Псеудоним се може извршити помоћу кључне речи.

Синтакса:

import filename as alias name

Структура директоријума за тестирање кода биће следећа:

Mod test/test.pydisplay.py

Следи код унутар тест.пи

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

Сада ће користити псеудоним за тест.пи у дисплаи.пи

Import test as tprint(t.display_message())print(t.display_message1())print(t.my_name)print(t.my_address)

Алиас који се користи за тест модул је т. Дакле, функција и променљиве из тест.пи могу се упутити помоћу псеудонима т.

Излаз:

Welcome to Guru99 Tutorials!All about Python!Guru99Mumbai

Апсолутни и релативни увоз у Питхон

Сада знате како да датотеку увезете као модул из друге датотеке. Погледајмо сада како да управљамо датотекама доступним у директоријумима. Датотеке у фасциклама могу се увести коришћењем апсолутног или релативног увоза.

Узмите у обзир да имате структуру директоријума пројекта, као што је приказано доле:

Корен директоријум је мој пројекат /. Има две подмапе пакет1 и пакет2.

Фасцикла пацкаге1 има два модула, модуле1.пи и модуле2.пи.

Фасцикла пацкаге2 има једну класу мицласс.пи, потпакет субпкг са модуле3.пи и последњи модуле4.пи.

  • У модуле1.пи постоји функција звана мифунц1.
  • У модуле2.пи постоји функција која се назива мифунц2.
  • У модуле3.пи постоји функција која се зове мифунц3.
  • У модуле4.пи постоји функција која се зове мифунц4.

Коришћење апсолутног увоза

За апсолутни увоз, морате додати целу путању вашег модула директно из коренске фасцикле пројекта.

Погледајмо сада како искористити апсолутни увоз за позивање на функције присутне у сваком од модула.

Да бисте радили са функцијом мифунц1, мораћете да увезете на следећи начин:

from package1.module1 import myfunc1orfrom package1 import module1module1.myfunc1()

Да бисте радили са функцијом мифунц3, мораћете да увезете на следећи начин:

from package1.subpkg.module3 import myfunc3orfrom package1.subpkg import module3module3.myfunc3()

Предности и недостаци употребе апсолутног увоза

Ево предности коришћења апсолутног увоза:

  • Постаје лако пратити модуле за проверу кода.
  • Једноставан за употребу и врло директан.
  • Ако се пројекат пребаци на други пут, увоз ће и даље остати исти.

Мане употребе апсолутног увоза

Ево недостатака употребе апсолутног увоза:

Мане:

  • Путања увоза може у случају да буде врло дугачка, модули су угнежђени и ако је име модула предуго.

Коришћење релативног увоза

Узимајући у обзир исту структуру директоријума која је наведена у наставку, видећемо како да их увозимо користећи релативни увоз.

У релативном увозу, модул који се увози односи се на тренутну локацију која је локација на којој се налази изјава о увозу.

Синтакса:

У релативном увозу, морате додати тачку (.) Пре имена модула када увозите помоћу из .

Проћи ће 2 тачке (...) пре назива модула ако је модул на једном нивоу више од тренутне локације.

Позивајући се на горе поменуту слику структуре директоријума, имамо следеће модуле са њиховом функцијом, на које се морамо позвати.

  • У модуле1.пи постоји функција звана мифунц1.
  • У модуле2.пи постоји функција која се назива мифунц2.
  • У модуле3.пи постоји функција која се зове мифунц3.
  • У модуле4.пи постоји функција која се зове мифунц4.

Да бисте радили са функцијом мифунц1, мораћете да увезете на следећи начин:

from .module1 import myfunc1

Да бисте радили са функцијом мифунц3, мораћете да увезете на следећи начин:

from .subpkg.module3 import myfunc3

Предности релативног увоза

Предности:

  • Лако је радити са релативним увозом.
  • Са тренутне локације увоз се може скратити у поређењу са апсолутним увозом.

Мане релативног увоза

Мане:

  • Користећи релативни увоз, тешко је пратити где се код налази

Резиме:

  • Увоз у Питхон помаже вам да се упутите на код, тј. .Функције / објекте који су записани у другој датотеци. Такође се користи за увоз питхон библиотека / пакета који се инсталирају помоћу пип-а (питхон манагер пакета), а затим треба да користите у свом коду.
  • Функција увоза доступна је на другим језицима као што су типецрипт, ЈаваСцрипт, јава, руби итд.
  • Модул је питхон је код написан унутар датотеке, на пример (тест.пи). Унутар датотеке можете дефинисати променљиве, функције или класу. Цела датотека постаје модул и може се увести у другу датотеку да би се позвала на код.
  • Помоћу функционалности модула можете да разбијете свој код на различите датотеке уместо да пишете све унутар једне датотеке. Касније, користећи увоз, можете се позвати на код унутар датотеке која вам је потребна.
  • Питхон има уграђене модуле, а такође се спољне библиотеке / пакети инсталирани помоћу питхон менаџера пакета (пип), нпр. Панде, НумПи итд. Називају модулима.
  • Можете увести само мали део модула, тј. Само потребне функције и имена променљивих из модула уместо да увезете пуни код.
  • Такође можете претворити име модула у краћи облик тако што ћете му дати надимак. Псеудоним се може извршити помоћу кључне речи.
  • Пакет је директоријум са свим модулима дефинисаним у њему. Да би Питхон тумач третирао као пакет, ваш директоријум треба да има __инит.пифиле. Инит.пи прави директоријум као пакет. Ево изгледа пакета на којем ћемо радити.
  • Током извршавања, када питхон наиђе на име модула за увоз , тумач покушава да пронађе модул. Претражује модул на листи уграђених модула. Касније, директоријуми дефинисани унутар сис.патх.
  • За апсолутни увоз, морате додати целу путању вашег модула директно из коренске фасцикле пројекта.
  • У релативном увозу, модул који се увози односи се на тренутну локацију која је локација на којој се налази изјава о увозу.