Импортиране на модул в Python с примери

⚡ Умно обобщение

Импортиране в Python позволява на един файл да използва повторно променливите, функциите и класовете, дефинирани в друг. Модулът е просто .py файл, докато пакетът групира свързани модули в директория, маркирана с __init__.py файл.

  • 🔘 Какво е модул: Модулът е единичен .py файл, съдържащ променливи, функции или класове.
  • ☑️ ключова дума за импортиране: import зарежда цял модул; module_name.function_name извиква неговите членове.
  • ✅ Селективен импорт: from module import name изтегля само функциите или променливите, от които се нуждаете.
  • 🧪 Псевдоними: „import module as alias“ съкращава дългите имена; „from module import *“ показва всичко.
  • 🛠️ Пакети и пътища: __init__.py превръща папка в пакет; sys.path изброява местоположенията за търсене.
  • 🤖 Работни процеси с изкуствен интелект: Проектите за машинно обучение импортират NumPy, pandas и PyTorch като модули.

Импортиране на модул в Python

Разделите по-долу обясняват модулите, пакетите, различните стилове на импортиране и как работят абсолютният и относителният импорт в Python.

В какво се намират модулите Python?

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

Например, ако името на вашия файл е guru99.py, името на модула ще бъде гуру99. С функционалността на модула можете да разделите кода си на различни файлове, вместо да пишете всичко в един файл.

Каква е Python модул за импортиране?

Файлът се счита за модул в PythonЗа да използвате модула, трябва да го импортирате, използвайки внос ключова дума. Функциите или променливите, присъстващи във файла, могат да бъдат използвани в друг файл чрез импортиране на модула. Тази функционалност е достъпна и на други езици, като например TypeScript, Javaскрипт, Java, Ruby и др.

Как да създадете и импортирате модул в Python?

Сега ще създадем модул и ще го импортираме в друг файл.

Ето потока за създаване и импортиране на модула, както е показано на екранната снимка:

Създаване и импортиране на модул в 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 импортирайте файла test.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“, за да импортирате това, което искате.

Така че синтаксисът е

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, последвана от името на модула, т.е. името на файла или библиотеката, която ще се използва.

Синтаксис:

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)

Името на модула test се използва за обозначаване на функциите и променливите вътре в модула test.

Изход:

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__.py. __init__.py прави директорията пакет. Ето оформлението на пакета, върху който ще работим.

Пакети в Python

Името на пакета е моят пакетЗа да започнете работа с пакета, създайте директория, наречена mypackage/. Вътре в директорията създайте празен файл, наречен __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 се импортира и му се дава псевдоним като мод1По подобен начин можете да използвате другите модули module2.py и module3.py от mypackage.

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 попада име на модул за импортиране, интерпретаторът се опитва да намери модула. Той търси модула в списъка с вградени модули, а след това и във всички директории, дефинирани в sys.path.

За да обобщим, интерпретаторът прави следното търсене, за да намери модула:

  1. В текущата ви директория.
  2. В списъка с вградени модули.
  3. Вътре в директориите 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']

Можете също така да промените пътя и да запазите директориите според вашите изисквания.

Използване на псевдоним на модул при импортирането

Можете също да преобразувате името на модула в по-кратка форма, като му дадете псевдоним. Псевдонимът може да бъде създаден с помощта на as ключова дума.

Синтаксис:

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)

Псевдонимът, използван за модула test, е t. Така че функциите и променливите от test.py могат да бъдат използвани с помощта на псевдонима t.

Изход:

Welcome to Guru99 Tutorials!
All about Python!
Guru99
Mumbai

Абсолютен и относителен внос в Python

Вече знаете как да импортирате файл като модул в друг файл. Нека сега да видим как да управлявате наличните файлове в папки. Файловете в папките могат да бъдат импортирани чрез използване на абсолютно или относително импортиране.

Считайте, че имате структура на папките на вашия проект, както е показано по-долу:

Абсолютен и относителен внос в Python

Главната папка е myproject/. Тя има две подпапки 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()  

Предимства и недостатъци на използването на абсолютен внос

Ето предимствата на използването на абсолютен импорт:

  • Става лесно да tracвърнете модулите обратно за проверка на кода.
  • Лесен за използване и много ясен.
  • Ако проектът бъде преместен в друг път, импортирането ще остане същото.

Недостатъци на използването на абсолютен импорт

Ето недостатъците на използването на абсолютен импорт:

  • Пътят за импортиране може да стане много дълъг, в случай че модулите са вложени и имената на модулите са дълги.

Използване на относителен импорт

Като се има предвид същата структура на папките, спомената по-горе, ще видим как да импортираме същата, използвайки относително импортиране.

При относително импортиране, модулът, който ще бъде импортиран, е относително спрямо текущото местоположение, т.е. местоположението, където се намира операторът за импортиране.

Синтаксис

При относително импортиране трябва да добавите точка (.) преди името на модула, когато импортирате с помощта на от.

Ще има две точки (..) преди името на модула, ако модулът е едно ниво нагоре спрямо текущото местоположение.

Позовавайки се на фигурата на структурата на папките, спомената по-горе, имаме следните модули с техните функции, към които трябва да се обърнем.

  • В module1.py има функция, наречена myfunc1.
  • В module2.py има функция, наречена myfunc2.
  • В module3.py има функция, наречена myfunc3.
  • В module4.py има функция, наречена myfunc4.

За да работите с функцията myfunc1, ще трябва да я импортирате, както следва:

from  .module1  import  myfunc1

За да работите с функцията myfunc3, ще трябва да я импортирате, както следва:

from  .subpkg.module3  import  myfunc3

Предимства на относителния внос

  • Лесно се работи с относителен внос.
  • От текущото местоположение импортиранията могат да бъдат съкратени в сравнение с абсолютните импортирания.

Недостатъци на относителния внос

  • Използвайки относителен внос, е трудно да се tracобратно там, където се намира кодът.

Въпроси и Отговори

Python Не мога да намеря модула. Уверете се, че файлът е написан правилно, намира се в sys.path или в текущата папка и пакетът е инсталиран във вашата активна виртуална среда. Изпълнете pip install, последвано от името на пакета за модули на трети страни.

Инсталирайте го първо с пиукам- Python мениджър на пакети, например pip install pandas. След като го инсталирате във вашата среда, импортирайте го нормално с import pandas. Вградените модули като json не се нуждаят от инсталация.

Кръгов импорт се получава, когато два модула импортират един друг, оставяйки единия само частично зареден. Поправете го, като обедините споделен код, импортирате вътре във функцията, която се нуждае от него, или импортирате целия модул вместо конкретни имена.

Този предпазител изпълнява код само когато файлът се изпълнява директно, а не когато е импортиран. Без него, всеки импорт би изпълнявал повторно операторите от най-горно ниво на модула. Той държи функциите за многократна употреба отделно от тестовия код в стил скрипт.

Не. Python изпълнява модул веднъж, след което го кешира в sys.modules и използва повторно този обект за по-късни импорти. За да принудите презареждане по време на разработка, извикайте importlib.reload(module).

Използвайте importlib.import_module(“name”), когато името на модула е известно само по време на изпълнение, например при зареждане на плъгини. Връща обекта на модула, така че можете да получите достъп до функциите му като при нормален импорт.

Импортиране на код за машинно обучение в NumPy, pandas, scikit-learn, TensorFlow и PyTorch като модули. Екипите също така разделят собствените си конвейери на модули и пакети за многократна употреба, след което импортират споделени функции за предварителна обработка и обучение в скриптове.

Да. GitHub Copilot и агентските асистенти предлагат редове за импортиране, докато пишете, добавят липсващи импортирания и помагат за разрешаването на грешки при импортиране. Винаги проверявайте дали модулът е инсталиран и името му съответства на вашата среда, преди да се доверите на предложение.

Обобщете тази публикация с: