Рубрики
Без рубрики

Пакеты Python – Создание и доступа к

Пакеты Python используются для организации модулей в каталог. Как создать и получить доступ к модулям пакета, пакет Python __init__.py, импортировать * из пакета.

Автор оригинала: Pankaj Kumar.

Пакеты Python – Создание и доступа к

Пакеты Python помогают нам управлять модулями и сценариями Python. Они являются нормальными каталогами с помощью скрипта init – __init__.py.

Как создать пакет Python?

Мы можем создать пакет, следуя под шагом.

  1. Создайте каталог пакета – Мы можем использовать Terminal или Python IDE для этого.
  2. Создать __init__.py file – Это требуется для преобразования обычного каталога в пакет Python. Этот файл используется для инициализации пакета и перечисляет все модули. В простейшей форме этот файл может быть пустым.

Что мы можем сохранить в пакете Python?

  • Файл инициализации
  • Модули Python
  • Сценарии Python
  • Любой другой тип файлов

Таким образом, в целом упаковка, как правило, является каталогом в наших компьютерных системах. Единственное отличие – это обязательное включение файла __init__.py.

Можем ли мы создать подпункты в Python?

Да, мы можем создать пакет внутри другого пакета. Мы должны следовать правилам упаковки, чтобы также создать подпобабку.

Примеры пакета Python

Давайте посмотрим на несколько примеров создания и использования пакетов.

1. Создание пакета

$ mkdir utilities
$ touch utilities/__init__.py
$ mkdir utilities/strings
$ mkdir utilities/strings/__init__.py
$ tree
.
└── utilities
    ├── __init__.py
    └── strings
        └── __init__.py

3 directories, 1 file
$ 
Пакеты Python

2. Добавление модулей в пакет

Допустим, у нас есть два модуля Python – Матем.пи и str_utils.py Отказ У них мало Функции Это будет использоваться в нашей программе.

Math.py:

def add(x, y):
    return x + y


def multiply(x, y):
    return x * y

str_utils.py:

def to_uppercase(s):
    s = str(s)
    return s.upper()


def reverse(s):
    s = str(s)
    return s[::-1]

Мы хотим добавить эти модули на наши пакеты. Просто скопируйте эти файлы в каталог пакетов, где вы хотите сохранить эти модули.

$ ls
math.py      str_utils.py utilities
$ mv math.py utilities 
$ mv str_utils.py utilities/strings 
$ tree
.
└── utilities
    ├── __init__.py
    ├── math.py
    └── strings
        ├── __init__.py
        └── str_utils.py

3 directories, 3 files
$ 
Добавление модулей в пакет Python

3. Импорт модулей из пакета

Синтаксис для импорта модуля Python внутри пакета:

import package.sub_package1.sub_package2.module
import package.sub_package1.sub_package2.module as module

Python использует sys.path Переменная для поиска пакетов и модулей. Текущий каталог является частью sys.path Переменная. Таким образом, мы будем держать наш сценарий Python в Python-пакеты каталог. В противном случае нам придется добавить местоположение пакета в sys.path Переменная.

$ cat my_script.py 
import sys

print(sys.path)
$ python3.7 my_script.py 
['/Users/pankaj/Desktop/python-packages', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python37.zip', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages']
$ 

Вот код my_script.py для доступа к модулям из пакетов и вызов их функциями.

import utilities.math as math
import utilities.strings.str_utils as str_utils

print(math.add(10, 20))
print(str_utils.reverse("ABC"))
Импорт пакетной модуль в Python

Мы также можем импортировать модуль, используя ниже синтаксис:

from package.sub_package1.sub_package2 import module

Вот обновленный пример для доступа к модулю «Math» и «STR_UTILS» в нашей программе.

from utilities import math
from utilities.strings import str_utils

print(math.add(10, 20))
print(str_utils.reverse("ABC"))
Python из модуля импорта пакета

4. Импорт * из пакета

Мы можем импортировать каждый модуль из пакета, используя следующий синтаксис.

from package.sub_package1.sub_package2 import *

В этом случае Python ищет sub_package2 для пакетов, модулей и функций. Это может создавать побочные эффекты, импортируя то, что вы не хотите. Кроме того, это очень много времени.

Мы можем определить список модулей, которые будут импортированы путем создания __All__ Переменная в файле __init__.py.

Утилиты/__ init__.py:

print('utilities package initialized')

__all__ = ['math']

Утилиты/строки/__ init__.py:

print('utilities.strings package initialized')

__all__ = ['str_utils']

Обновленный код my_script.py:

from utilities import *
from utilities.strings import *

print(math.add(10, 20))
print(str_utils.reverse("ABC"))

Выход:

$ python3.7 my_script.py 
utilities package initialized
utilities.strings package initialized
30
CBA
Python Package INIT INITAL Все списка модулей

Обратите внимание, что код Python в __init__.py выполняется сначала, когда пакеты инициализированы и импортируются.

Как добавить пакет на системный путь

Неиспользуется, чтобы всегда зависеть от иерархии каталога для импорта модулей пакетов. Мы можем добавить наш пользовательский пакет в переменную SYSSPATH, а затем импортировать их в любой скрипт.

import sys

sys.path.append("/Users/pankaj/Desktop/python-packages")

print(sys.path)

import utilities.math as math

print(math.add(1, 2))

Выход:

$ python3.7 my_script.py 
['/Users/pankaj', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python37.zip', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages', '/Users/pankaj/Desktop/python-packages']
utilities package initialized
3
$ 

Заключение

Пакеты в Python позволяют разделить наши прикладные модули и скрипты в логические модули. Это сохраняет нашу кодовую базу чистой и легко в обслуживании.

Использованная литература:

    P y t h o n . o r g D o c s .