- Создание, импорт и установка пакетов
- Установка пакетов (pip)
- Видео по теме
- Пакеты Python — создание и доступ
- Как создать пакет Python?
- Что мы можем сохранить в пакете?
- Можно ли создавать подпакеты?
- Примеры
- 1. Создание пакета
- 2. Добавление модулей
- 3. Импорт пакета
- 4. Импорт * из пакета
- Как добавить пакет в системный путь
Создание, импорт и установка пакетов
На предыдущем занятии мы с вами рассматривали способы создания и импортирования отдельных модулей в Python. Здесь углубимся в эту тему и поговорим о пакетах и способах их импорта.
Пакет (package) – это специальным образом организованный подкаталог с набором модулей, как правило, решающих сходные задачи.
Например, можно создать пакет для моделирования случайных значений с разными законами распределения. Для этого создадим каталог (придумываем имя сами):
в котором разместим следующие файлы (модули):
- exp.py – для моделирования экспоненциальных величин;
- normal.py – для моделирования нормальных величин;
- rel.py – для моделирования релеевских значений;
- funcs.py – набор вспомогательных функций.
и еще добавим специальный файл
который должен присутствовать в каждом пакете и в котором происходит его начальная инициализация (если она, конечно, нужна). В самом простом случае это может быть пустой файл. Но мы туда запишем одну переменную:
И обратите внимание. Для корректной обработки модулей в пакете, все файлы следует создавать с кодировкой UTF-8.
Остальные файлы пакета будут хранить следующую информацию (см. видео). Все, мы сформировали пакет и теперь можем его импортировать в нашу программу. Для этого записывается ключевое слово import и указывается имя пакета (название подкаталога):
Давайте посмотрим, что в итоге было импортировано:
Мы видим имя нашей переменной NAME и вспомогательные переменные, которые были созданы автоматически средой Python:
[‘NAME’, ‘__builtins__’, ‘__cached__’, ‘__doc__’, ‘__file__’, ‘__loader__’, ‘__name__’, ‘__package__’, ‘__path__’, ‘__spec__’]
Выведем значение переменной NAME:
И в консоли отображается строчка, прописанная в файле __init__.py. Но все остальные модули при этому недоступны. Чтобы получить к ним доступ, необходимо их явно импортировать:
И далее, вызвать функцию этого модуля:
Либо, использовать второй вариант импорта через from:
и обращаться к функции непосредственно по ее имени:
Все эти способы импортирования называются абсолютными, так как здесь указывается полный путь к данным. Есть еще относительный импорт. И мы сейчас увидим как он работает. Но для начала посмотрим, как модули внутри пакета могут импортировать различные данные. Например, мы хотим внутри модуля exp.py выполнить импорт модуля funcs.py. Как это сделать? Если просто прописать:
и запустить основную программу, то возникнет ошибка, что данный модуль не найден. Почему? Дело в том, что этот модуль находится внутри пакета (каталога) packrand и это явно нужно указать. Или так:
Но здесь возникает один тонкий момент. Что если название пакета в последствие поменяется? Тогда нам придется менять соответствующие импорты внутри модулей? Вот как раз здесь нам на помощь приходит относительный способ импортирования данных. Вместо явного указания пакета packrand, поставим точку:
Эта точка означает текущий пакет, и теперь мы никак не связаны с его именем. Или, можно записать так:
здесь мы из модуля funcs текущего пакета импортируем функцию getRand. И так далее. Благодаря этой точке мы уходим от привязки к названию пакета и можем не беспокоиться об его изменении в будущем. Вот в этом преимущество относительного импорта. Однако, в основной программе лучше использовать абсолютную форму записи, т.к. это способствует лучшей читабельности текста программы, а это очень важно при разработке крупных проектов.
При работе с пакетами появляется особенность импортирования данных через звездочку:
В результате будет импортированы только данные из модуля __init__.py, то есть, переменная NAME:
а вот остальные модули будут недоступны:
Чтобы среда Python «знала» что импортировать при указании *, следует импортируемые данные перечислить в модуле __init__.py в виде такого списка:
Здесь используется специальная переменная __all__, которая должна ссылаться на список с именами модулей, переменных, функций, которые мы предполагаем импортировать при таком синтаксисе. Теперь, запуская программу, она выполняется без ошибок, т.к. необходимые модули были успешно добавлены.
Установка пакетов (pip)
Все рассмотренные способы импортов модулей и пакетов будут работать только для стандартных пакетов, либо созданных самостоятельно. Однако, существует большое количество полезных сторонних разработок, которые также можно использовать в своей работе. Здесь я вкратце расскажу каким образом осуществляется установка таких сторонних пакетов в ОС Windows.
Сначала открываем командное окно (нажимаем Win+R и набираем команду cmd). Далее, используя пакетный менеджер питона (pip) (он, обычно, ставится автоматически при установке Python). Чтобы убедиться, что он работает, просто наберите pip и нажмите Enter. Если у вас появится вот такая информация, то значит, он установлен и работает. Далее, с помощью команды:
можно увидеть список установленных модулей. Если ничего не отображается, значит, сторонние модули еще не устанавливались.
Для инсталляции нового пакета, нужно набрать:
Давайте для примера установим пакет flask – популярный мини-web фреймворк. Запишем команду:
pip install flask
после этого начнется установка этого пакета последней версии.
И, далее, выполняя команду pip freeze, увидим следующий список:
click==7.1.1
Flask==1.1.1
itsdangerous==1.1.0
Jinja2==2.11.1
MarkupSafe==1.1.1
Werkzeug==1.0.0
То есть, у нас установилась версия Flask 1.1.1. Как видите, для установки необходимо знать, что устанавливать – имена модулей. Все популярные сторонние разработки можно найти на специальном сайте
В строке поиска можно указать интересующую вас тему, например, vk и появится список модулей, связанных с работой ВКонтакте. Например, выберем любой модуль и вверху появится подсказка как инсталлировать этот модуль.
После инсталляции этот модуль можно импортировать и вызывать соответствующие функции.
Видео по теме
Python 3 #1: установка и запуск интерпретатора языка
Python 3 #2: переменные, оператор присваивания, типы данных
Python 3 #3: функции input и print ввода/вывода
Python 3 #4: арифметические операторы: сложение, вычитание, умножение, деление, степень
Python 3 #5: условный оператор if, составные условия с and, or, not
Python 3 #6: операторы циклов while и for, операторы break и continue
Python 3 #7: строки — сравнения, срезы строк, базовые функции str, len, ord, in
Python 3 #8: методы строк — upper, split, join, find, strip, isalpha, isdigit и другие
Python 3 #9: списки list и функции len, min, max, sum, sorted
Python 3 #10: списки — срезы и методы: append, insert, pop, sort, index, count, reverse, clear
Python 3 #11: списки — инструмент list comprehensions, сортировка методом выбора
Python 3 #12: словарь, методы словарей: len, clear, get, setdefault, pop
Python 3 #13: кортежи (tuple) и операции с ними: len, del, count, index
Python 3 #14: функции (def) — объявление и вызов
Python 3 #15: делаем «Сапер», проектирование программ «сверху-вниз»
Python 3 #16: рекурсивные и лямбда-функции, функции с произвольным числом аргументов
Python 3 #17: алгоритм Евклида, принцип тестирования программ
Python 3 #18: области видимости переменных — global, nonlocal
Python 3 #19: множества (set) и операции над ними: вычитание, пересечение, объединение, сравнение
Python 3 #20: итераторы, выражения-генераторы, функции-генераторы, оператор yield
Python 3 #21: функции map, filter, zip
Python 3 #22: сортировка sort() и sorted(), сортировка по ключам
Python 3 #23: обработка исключений: try, except, finally, else
Python 3 #24: файлы — чтение и запись: open, read, write, seek, readline, dump, load, pickle
Python 3 #25: форматирование строк: метод format и F-строки
Python 3 #26: создание и импорт модулей — import, from, as, dir, reload
Python 3 #27: пакеты (package) — создание, импорт, установка (менеджер pip)
Python 3 #28: декораторы функций и замыкания
Python 3 #29: установка и порядок работы в PyCharm
Python 3 #30: функция enumerate, примеры использования
© 2021 Частичное или полное копирование информации с данного сайта для распространения на других ресурсах, в том числе и бумажных, строго запрещено. Все тексты и изображения являются собственностью сайта
Пакеты Python — создание и доступ
Пакеты Python помогают нам управлять модулями и скриптами Python. Это обычные каталоги со сценарием инициализации — __init__.py.
Как создать пакет Python?
Мы можем создать пакет, выполнив следующие шаги.
- Создайте каталог пакета – для этого мы можем использовать terminal или Python IDE.
- Создать __init__.py файл — это необходимо для преобразования обычного каталога в пакет python. Этот файл используется для инициализации пакета и перечисления всех модулей. В самом простом виде этот файл может быть пустым.
Что мы можем сохранить в пакете?
- Файл инициализации;
- Модули;
- Скрипты;
- Любой другой тип файлов.
В общем, пакет — это каталог в наших компьютерных системах. Единственное отличие — это обязательное включение файла __init__.py.
Можно ли создавать подпакеты?
Да, мы можем создать пакет внутри другого пакета. Мы также должны следовать правилам упаковки, чтобы создать подпакет.
Примеры
Давайте рассмотрим несколько примеров создания и использования пакетов.
1. Создание пакета
2. Добавление модулей
Допустим, у нас есть два модуля Python — math.py и str_utils.py. У них есть несколько функций, которые будут использоваться в нашей программе.
Мы хотим добавить эти модули в наши пакеты. Просто скопируйте эти файлы в каталог пакетов, где вы хотите сохранить эти модули.
3. Импорт пакета
Синтаксис для импорта модуля Python внутри пакета:
Python использует переменную sys.path для поиска пакетов и модулей. Текущий каталог является частью переменной sys.path . Поэтому мы будем хранить наш скрипт python в каталоге python-packages. В противном случае нам придется добавить местоположение пакета в переменную sys.path .
Вот код my_script.py для доступа к модулям из пакетов и вызова их функций.
Мы также можем импортировать модуль, используя синтаксис ниже:
Вот обновленный пример доступа к модулям «math» и «str_utils» в нашей программе.
4. Импорт * из пакета
Мы можем импортировать каждый модуль из пакета, используя следующий синтаксис.
В этом случае Python ищет в sub_package2 пакеты, модули и функции. Это может вызвать побочные эффекты из-за импорта того, чего вы не хотите. Кроме того, это очень долгий процесс.
Мы можем определить список импортируемых модулей, создав переменную __all__ в файле __init__.py.
утилиты / __ init__.py:
утилиты / строки / __ init__.py:
Обновленный код my_script.py:
Обратите внимание, что код python в __init__.py выполняется первым, когда пакеты инициализируются и импортируются.
Как добавить пакет в системный путь
Невозможно всегда зависеть от иерархии каталогов для импорта модулей пакета. Мы можем добавить наш собственный пакет в переменную sys.path, а затем импортировать их в любой скрипт.
Пакеты в Python позволяют нам разделить наши прикладные модули и скрипты на логические модули. Это сохраняет нашу базу кода чистой и простой в обслуживании.