Пакеты в Python

Пакеты в Python

Пространства имен это неотъемлемая часть программирования, так как позволяет избегать конфликтов имен при операциях импорта. В Python данную функцию выполняют пакеты. Пакет в Python — это папка с модулями и файлом init.py. Модули в Python, в свою очередь — это файлы кода, с расширением .py. Для более детального понимания сути сказанного, создадим папку с именем mypackage и рядом файл main.py. Это будет главный файл, с которого начнет выполняться программа. В папку mypackage поместим файлы module1 и module2 и определим в них переменные и методы:


# module1.py

a = 1
b = 2
c = 'myrusakov'

def do_some():
  pass

# module2.py

d = 5
e = 7
f = "website"

Теперь в главном файле main.py, находящимся на уровне папки mypackage попробуем импортировать наш будущий папку/пакет mypackage. Но прежде, напомню, что в Python есть несколько вариантов импорта. В зависимости от того импортируем мы сам пакет, модуль из него или же переменные и методы модуля


# в файле main.py все операции импорта

import mypackage

mypackage.module1

''' возникает ошибка, так как mypackage это пока что, просто папка а не пакет, и для нее справедлив такой вариант:'''  

import mypackage.module1

# так вызываем переменные из модуля 
print(mypackage.module1.a)

# вывод
1

Также можно обойтись без названия папки, путем импорта самих модулей или же переменной из модуля:


from mypackage import module1, module2

print(module.a)

from mypackage.module1 import a

print(a)

Но как мы знаем в Python можно импортировать пакет и все переменные модулей будут видны из одного места. Чтобы превратить нашу папку в пакет, в папке mypackage создадим файл init.py. И каждый раз при импорте модуля первым исполнится данный файл. Для проверки сказанного поместим в него print(«init«):

# main.py

import mypackage

# вывод 

#__init__

Так для чего это нужно. Как мы уже знаем при импорте кода в виде модуля из папки/пакета мы используем import mypackage.module1. И чтобы постоянно не обращаться ко всем модулям в папке, так как их может быть много мы и используем файл init.py


# __init__.py

from . module1 import a, b, с 

from . module2 import d, e, f

# точка здесь указывает путь относительно которого мы производим импорт, и означает  текущий каталог


# __init__.py
# оператор * значит импорт всего из 

from . import *

# main.py

import mypackage

mypackage.module2.d

Также в самих импортируемых файлах можно указать список разрешенный для импорта с помощью __all__. Посредством данного списка Вы ограничиваете набор экспортируемых констант, методов, классов.


# module1.py

__all__ = ['a', 'b']

a = 1
b = 2
c = 'myrusakov'

Таким образом в Python достаточно просто превратить папку с кодом в пакет, и тем самым повысив удобочитаемость импортируемого кода.

Источник

Просмотров:

Добавить комментарий

Adblock
detector