Импортиране на модул в Python с примери
В какво се намират модулите Python?
Модулът е файл с код на Python. Кодът може да бъде под формата на променливи, функции или дефиниран клас. Името на файла става име на модула.
Например, ако името на вашия файл е guru99.py, името на модула ще бъде гуру99. С функционалността на модула можете да разделите кода си на различни файлове, вместо да пишете всичко в един файл.
Каква е Python модул за импортиране?
Файлът се счита за модул в python. За да използвате модула, трябва да го импортирате с помощта на вносът ключова дума. Функцията или променливите във файла могат да се използват в друг файл чрез импортиране на модула. Тази функционалност е достъпна на други езици, като машинопис, JavaСкрипт, java, ruby и др.
Как да създадете и импортирате модул в Python?
Сега ще създадем модул и ще го импортираме в друг файл.
Ето потока за създаване и импортиране на модула, както е показано на екранната снимка:
Следвайте дадените стъпки, за да създадете модул в python.
Структурата на папките, използвана за тестване на кода, е следната:
modtest/ test.py display.py
Стъпка 1) Създайте файл и го наименувайте test.py
Стъпка 2) Вътре в test.py създайте функция, наречена display_message()
Def display_message(): return "Welcome to Guru99 Tutorials!"
Стъпка 3) Сега създайте друг файл display.py.
Стъпка 4) Вътре в display.py импортирайте файла moduletest.py, както е показано по-долу:
import test
Докато импортирате, не е нужно да споменавате test.py, а само името на файла.
Стъпка 5) След това можете да извикате функцията display_message() от test.py вътре в display.py, трябва да използвате module_name.function_name.
Например test.display_message().
Import test print(test.display_message())
Стъпка 6) Когато изпълните display.py, ще получите следното Изход:
Welcome to Guru99 Tutorials!
Импортиране на клас в Python
По-рано видяхме прост модул с функция. Тук ще създадете клас и ще препратите класа в друг файл.
Структурата на папките за тестване на кода е както следва:
myproj/ Car.py display.py
Създайте файл с име Car.py със следния код:
Име на файла: 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)
Във файла Car.py има атрибути brand_name, model и manu_year. Функциите, дефинирани вътре в класа, са car_details(), get_Car_brand(), get_Car_model().
Нека сега използваме файла Car.py като модул в друг файл, наречен display.py.
Име на файл: 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())
Изход:
BMW Car brand is BMW Car model is Z5 Car manufacture year is 2020 Car brand is BMW Car model is Z5
Така че можем да имаме достъп до всички променливи и функции от Car.py с помощта на модул Car.
Използване на модул от за импортиране
Можете да импортирате само малка част от модула, т.е. само необходимите функции и имена на променливи от модула, вместо да импортирате целия код.
Когато искате да се импортират само конкретни неща, можете да използвате ключовата дума „от“, за да импортирате това, което искате.
Така че синтаксисът е
from module import your function_name , variables,... etc.
Структурата на папките, използвана за тестване на кода, е следната:
modtest/ test.py display.py
В test.py има 2 функции, както е показано:
Име на файла: test.py
defdisplay_message(): return "Welcome to Guru99 Tutorials!" def display_message1(): return "All about Python!"
Сега искате функцията display_message(). Функцията или променливата, която импортирате, може да бъде директно достъпна, както е показано по-долу:
Име на файла: display.py
from test import display_message print(display_message())
Изход:
Welcome to Guru99 Tutorials!
Сега, ако се случи да използвате функцията display_message1(), тя ще изведе грешка, че функцията не е дефинирана, както е показано по-долу:
from test import display_message print(display_message1())
Изход:
Traceback (most recent call last): File "display.py", line 3, in <module> print(display_message1()) Name Error: name 'display_message1' is not defined
Импортиране на всичко от модула
Импортирането ви позволява да импортирате пълния модул чрез импортиране, последвано от името на модула, т.е. името на файла или библиотеката, която ще се използва.
Синтаксис:
Import module
Или с помощта на
from module import *
Структурата на папките, използвана за тестване на кода, е следната:
modtest/ test.py display.py
Следват подробностите за кода в test.py
my_name = "Guru99" my_address = "Mumbai" defdisplay_message(): return "Welcome to Guru99 Tutorials!" def display_message1(): return "All about Python!"
Използване на модула за импортиране
Използвайки само името на модула за импортиране, за да се обърнете към променливите и функциите вътре в модула, то трябва да има префикс с името на модула.
Пример
Име на файл: display.py
Import test print(test.display_message()) print(test.display_message1()) print(test.my_name) print(test.my_address)
Тестът за име на модул се използва за обозначаване на функцията и променливите в теста на модула.
Изход:
Welcome to Guru99 Tutorials! All about Python! Guru99 Mumbai
Използване на импортиране *
Нека да видим пример за използване импортиране *, Използвайки импортиране *, функциите и променливите са директно достъпни, както е показано в примера по-долу:
from test import * print(display_message()) print(display_message1()) print(my_name) print(my_address)
Изход:
Welcome to Guru99 Tutorials! All about Python! Guru99 Mumbai
Функцията dir().
dir() е вградена функция в python. Dir() връща всички свойства и методи, включително вградените свойства на дадения обект.
Така че, когато dir() се използва в модула, той ще ви даде променливите, функциите, които присъстват в модула.
Ето работещ пример за dir() на модул. Имаме клас, наречен Car.py, нека импортираме Car и да присвоим на dir(), за да видим изхода.
Структурата на папките за тестване на кода ще бъде както следва:
test prop/ Car.py test.py
Име на файла: 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)
Име на файла: test.py
import Car class_contents = dir(Car) print(class_contents)
Резултатът ни дава името на класа и всички функции, дефинирани в Car.py.
Можете също да опитате да използвате dir() на вграден модул, наличен в Python. Нека опитаме същото JSON модул, както е показано в примера по-долу. Той ще покаже всички свойства и методи, налични в JSON модул.
Import json json_details = dir(json) print(json_details)
Изход:
['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']
Услуги
Пакетът е директория с всички модули, дефинирани в нея. За да направите a Python интерпретаторът го третира като пакет, вашата директория трябва да има init.pyfile. Init.py прави директорията като пакет. Ето оформлението на пакета, върху който ще работим.
Името на пакета е моят пакет. За да започнете да работите с пакета, създайте директория, наречена package/. Вътре в директорията създайте празен файл, наречен __init__.py. Създайте още 3 файла module1.py, module2.py и module3.py и дефинирайте функциите, както е показано на екранната снимка. Ето подробностите за module1.py,module2.py и module3.py
module1.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")
module2.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")
module3.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")
- пакете готов за употреба. Сега извикайте пакета във всеки ваш файл, както е показано по-долу :test.py:
Тук mypackage.module1 се импортира и му се дава псевдоним като mod1. По подобен начин можете да използвате други модули module2.py и module3.py от моя пакет.
import mypackage.module1 as mod1 print(mod1.mod1_func1()) print(mod1.mod1_func2()) print(mod1.mod1_func2())
Изход:
Welcome to Module1 function1 None Welcome to Module1 function2 None Welcome to Module1 function2 None
Току-що демонстрирахме пакета с прост модул с функции вътре в него. Според вашия проект можете също да пакетирате с под-пакети. Подпапки/ с модули с дефинирани класове.
Python Път за търсене на модул
По време на изпълнение, когато python се натъкне име на модул за импортиране, интерпретаторът се опитва да намери модула. Той търси модула в списъка с вградени модули. Later общо взето директориите, дефинирани в sys.path.
За да обобщим, интерпретаторът прави следното търсене, за да намери модула:
- В текущата ви директория.
- В списъка с вградени модули
- Вътре в директориите sys.path
Можете да получите подробности за sys.path, като импортирате sys модул и отпечатате sys.path. Той ще ви даде списък с директории, както е показано по-долу:
importsys print(sys.path)
Изход:
['Python Latest\\task2', 'Users\\AppData\\Local\\Programs\\Python\ \Python37\\python37.zip', 'Users\\AppData\\Local\\Programs\\Python\\P ython37\\DLLs']
Можете също така да промените пътя и да запазите директориите според вашите изисквания.
Използване на псевдоним на модул при импортирането
Можете също така да преобразувате името на модула в по-кратка форма, като му дадете псевдоним. Псевдонимът може да се направи с помощта на ключовата дума.
Синтаксис:
import filename as alias name
Структурата на папките за тестване на кода ще бъде както следва:
Mod test/ test.py display.py
Следва кодът в test.py
my_name = "Guru99" my_address = "Mumbai" def display_message(): return "Welcome to Guru99 Tutorials!" def display_message1(): return "All about Python!"
Сега ще използва псевдоним за test.py в display.py
Import test as t print(t.display_message()) print(t.display_message1()) print(t.my_name) print(t.my_address)
Псевдонимът, който се използва за тестов модул е t. Така че функцията и променливите от test.py могат да бъдат препратени с помощта на псевдонима t.
Изход:
Welcome to Guru99 Tutorials! All about Python! Guru99 Mumbai
Абсолютен и относителен внос в Python
Вече знаете как да импортирате файл като модул в друг файл. Нека сега да видим как да управлявате наличните файлове в папки. Файловете в папките могат да бъдат импортирани чрез използване на абсолютно или относително импортиране.
Считайте, че имате структура на папките на вашия проект, както е показано по-долу:
Основната папка е моят проект/. Има две подпапки package1 и package2.
Папката package1 има два модула, module1.py и module2.py.
Папката package2 има един клас myclass.py, подпакет subpkg с module3.py и последния module4.py.
- В module1.py има функция, наречена myfunc1.
- В module2.py има функция, наречена myfunc2.
- В module3.py има функция, наречена myfunc3.
- В module4.py има функция, наречена myfunc4.
Използване на абсолютен импорт
За Абсолютно импортиране трябва да добавите целия път на вашия модул направо от основната папка на проекта.
Нека сега да видим как да използваме абсолютни импортирания, за да се позоваваме на функциите, налични във всеки от модулите.
За да работите с функцията myfunc1, ще трябва да импортирате, както следва:
from package1.module1 import myfunc1 or from package1 import module1 module1.myfunc1()
За да работите с функцията myfunc3 ще трябва да импортирате както следва:
from package1.subpkg.module3 import myfunc3 or from package1.subpkg import module3 module3.myfunc3()
Предимства и недостатъци на използването на абсолютен внос
Ето предимствата на използването на абсолютен импорт:
- Става лесно да се проследят обратно модулите за проверка на кода.
- Лесен за използване и много ясен.
- Ако проектът бъде преместен на различен път, импортиранията ще останат същите.
Недостатъци на използването на абсолютен импорт
Ето недостатъците на използването на абсолютен импорт:
Недостатъци:
- Пътят за импортиране може да стане много дълъг в случай, че модулите са вложени и ако името на модулите е дълго.
Използване на относителен импорт
Имайки предвид същата структура на папките, спомената по-долу, ще видим как да импортираме същата с помощта на относителни импорти.
При относителното импортиране модулът, който трябва да се импортира, е относително към текущото местоположение, което е местоположението, където присъства операторът за импортиране.
Синтаксис
При относително импортиране трябва да добавите точка (.) преди името на модула, когато импортирате с помощта на от.
Ще има 2 точки (..) преди името на модула, ако модулът е на едно ниво по-горе от текущото местоположение.
Позовавайки се на фигурата на структурата на папките, спомената по-горе, имаме следните модули с тяхната функция, към които трябва да се обърнем.
- В module1.py има функция, наречена myfunc1.
- В module2.py има функция, наречена myfunc2.
- В module3.py има функция, наречена myfunc3.
- В module4.py има функция, наречена myfunc4.
За да работите с функциятаmyfunc1 ще трябва да импортирате както следва:
from .module1 import myfunc1
За да работите с функцията myfunc3, ще трябва да импортирате, както следва:
from .subpkg.module3 import myfunc3
Предимства на относителния внос
Предимства:
- Лесно се работи с относителен внос.
- От текущото местоположение импортиранията могат да бъдат съкратени в сравнение с абсолютните импортирания.
Недостатъци на относителния внос
Недостатъци:
- Използвайки относителен импорт, е трудно да се проследи обратно къде се намира кодът
Oбобщение
- Импортиране в Python ви помага да се обърнете към кода, т.е. .функции/обекти, които са записани в друг файл. Използва се и за импортиране на библиотеки/пакети на python, които са инсталирани чрез pip (мениджър на пакети на python), и след това трябва да използвате във вашия код.
- Функцията за импортиране е налична на други езици като машинопис, JavaСкрипт, java, ruby и др.
- Модулът е python е кодът, написан във файла, например (test.py). Във вашия файл можете да дефинирате вашите променливи, функции или клас. Целият файл става модул и може да бъде импортиран в друг файл, за да се препрати към кода.
- С функционалността на модула можете да разделите кода си на различни файлове, вместо да пишете всичко в един файл. Later, използвайки import, можете да се обърнете към кода във файла, от който се нуждаете.
- Python има своите вградени модули, както и външни библиотеки/пакети, инсталирани с помощта на a мениджър на пакети на python (pip), напр. pandas, NumPy и т.н. се наричат модули.
- Можете да импортирате само малка част от модула, т.е. само необходимите функции и имена на променливи от модула, вместо да импортирате целия код.
- Можете също така да преобразувате името на модула в по-кратка форма, като му дадете псевдоним. Псевдонимът може да се направи с помощта на ключовата дума.
- Пакетът е директория с всички модули, дефинирани в нея. За да направите a Python интерпретаторът го третира като пакет, вашата директория трябва да има __init.pyfile. Init.py прави директорията като пакет. Ето оформлението на пакета, върху който ще работим.
- По време на изпълнение, когато python се натъкне име на модул за импортиране, интерпретаторът се опитва да намери модула. Той търси модула в списъка с вградени модули. Later общо взето директориите, дефинирани в sys.path.
- За Абсолютно импортиране трябва да добавите целия път на вашия модул направо от основната папка на проекта.
- При относителното импортиране модулът, който трябва да се импортира, е относително към текущото местоположение, което е местоположението, където присъства операторът за импортиране.