Автор оригинала: Pankaj Kumar.
Пакеты Python – Создание и доступа к
Пакеты Python помогают нам управлять модулями и сценариями Python. Они являются нормальными каталогами с помощью скрипта init – __init__.py.
Как создать пакет Python?
Мы можем создать пакет, следуя под шагом.
- Создайте каталог пакета – Мы можем использовать Terminal или Python IDE для этого.
- Создать __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 $
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 $
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"))
Мы также можем импортировать модуль, используя ниже синтаксис:
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"))
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 в __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 .