How To Create and Use Python Modules?
![]()
Python programming language is one of the most popular language nowadays. It has numerous applications and developers are switching over to python for the implementation it provides us with. The modular programming approach where the code is broken down into separate parts is where python modules come into the picture. This article will help you understand the above topic in detail.
Following are the topics that will be covered in this article:
- What Are Python Modules?
- How To Create Python Modules?
- How To Use Python Modules?
- Built-in Modules In Python
What Are Python Modules?
Modules are simply a ‘program logic’ or a ‘python script’ that can be used for a variety of applications or functions. We can declare functions, classes, etc in a module.
The focus is to break down the code into different modules so that there will be no or minimum dependencies on one another. Using modules in a code helps to write a lesser line of codes, a single procedure developed for reuse of the code as well. It also eliminates the need to write the same logic again and again.
One more advantage of using modules is that the programs can be designed easily since a whole team works only on a part or module of the entire code.
Let us try to understand this with an example:
Suppose you want to make a program for a calculator. There will be operations like addition, subtraction, multiplication, division, etc.
We will break the code into separate parts, we can simply create one module for all these operations or separate modules for each of the operations. And then we can call these modules in our main program logic.
The idea is to minimize the code, and if we create modules, it doesn’t mean we can only use it for this program, we can even call these modules for other programs as well.
Now that we have understood the concept of modules, let us try to understand how we can create a module in python.
How To Create Modules In Python?
Creating a module in python is similar to writing a simple python script using the .py extension. For the above example, lets try to make a module for the various operations.
Save the above code in a file Calc.py. This is how we create a module in python. We have created different functions in this module. We can use these modules in our main file, let us take a look at how we are going to use them in a program.
How To Use Python Modules?
We will use the import keyword to incorporate the module into our program, from keyword is used to get only a few or specific methods or functions from a module. Let us see what are different methods to use a module in your program.
Let us say we have our file with a name main.py.
In the above code, we have created an alias using the “as” keyword. The output of the above code will be the addition of the two numbers a and b using the logic specified in the add function in the calc.py module.
Let us take a look at another approach.
In the above code, we have imported all the functions using the asterisk and we can simply mention the function name to get the results.
Python Module Path
When we import a module, the interpreter looks for the module in the build-in modules directories in sys.path and if not found, it will look for the module in the following order:
When you run the above code, you will get the list of directories. You can make changes in the list to create your own path.
Built-in modules are written in C and integrated with python interpreter. Each built-in module contains resources for certain specific functionalities like Operating system management, disk input/output etc.
The standard library also has many python scripts containing useful utilities. There are several built-in modules in python at our disposal that we can use whenever we want.
To get the list of all the modules in python, you can write the following command in the python console.
You will get a list of all the modules in python. Below are a few modules in python.
dir( ) Built-in Function
It returns a sorted list of strings containing the names defined in a module. The list contains the names of all the variables, functions, classes, etc.
You will get the list output like this:
Similarly, you can get the names defined in any module using the dir( ) function.
In this article, we have learned about modules in python, how we can create a module and use it in the program. We have also learned about the built-in modules in python. Python programming language has enormous applications and with the use of modules, the task becomes easier, maintainable and efficient. If you wish to check out more articles on the market’s most trending technologies like Artificial Intelligence, DevOps, Ethical Hacking, then you can refer to Edureka’s official site.
Do look out for other articles in this series which will explain the various other aspects of Python and Data Science.
Модули в Python
Модуль — это файл, который содержит код для выполнения определенной задачи. Модуль может содержать переменные, функции, классы и т.д. Для создания модуля следует создать файл с расширением .py . Для импортирования модуля в Python используется ключевое слово import. Стандартная библиотека Python содержит более 200 модулей.
Что такое модуль?
Модуль — это файл, который содержит код для выполнения определенной задачи. Модуль может содержать переменные, функции, классы и т.д.
Давайте создадим модуль. Напишите следующий код и сохраните его как файл example.py:
Здесь мы определили функцию add() внутри модуля с именем example. Функция принимает два числа и возвращает их сумму.
Импорт модулей в Python
Мы можем импортировать определения из одного модуля в другой или в интерактивный интерпретатор Python. Для этого используется ключевое слово import. Чтобы импортировать наш ранее определенный модуль example, нужно использовать следующую команду:
Эта строка кода не импортирует имена функций, определенных в модуле example, напрямую в нашу программу. Эта строка импортирует только имя модуля example.
Используя имя модуля, мы можем получить доступ к функциям модуля с помощью точки . . Например:
Примечания:
Python имеет множество стандартных модулей, с которыми вы можете ознакомиться в документации Python.
Стандартные модули можно импортировать так же, как мы импортируем наши собственные (пользовательские) модули.
Импорт модулей из Cтандартной библиотеки Python
Стандартная библиотека Python содержит более 200 модулей. Предположим, мы хотим получить значение числа Пи. Для этого нужно импортировать модуль math, а затем использовать вызов math.pi . Например:
The value of pi is 3.141592653589793
Переименование модуля в Python
В Python мы также можем переименовать импортируемый модуль. Например:
Здесь мы переименовали модуль math в m. В некоторых случаях это может сэкономить нам время при наборе кода.
Обратите внимание, что после переименования имя math не распознается в нашей области видимости. Следовательно, math.pi не будет работать, а m.pi — будет работать.
from … import в Python
Мы можем импортировать определенные имена из модуля, не импортируя модуль целиком. Например:
Здесь мы импортировали только объект pi из модуля math.
Импортируем все имена из модуля
В Python мы можем импортировать все имена (определения) из модуля, используя следующую конструкцию:
Здесь мы импортировали все определения из модуля math. Импорт всего содержимого модуля не является хорошей практикой в программировании. Это может привести к дублированию определений идентификаторов. Это также может затруднить читаемость кода.
Встроенная функция dir() в Python
В Python мы можем использовать функцию dir() для вывода списка всех имен функций в модуле. Например, ранее мы определили функцию add() в модуле example. Мы можем использовать функцию dir() с модулем example следующим образом:
[‘__builtins__’,
‘__cached__’,
‘__doc__’,
‘__file__’,
‘__initializing__’,
‘__loader__’,
‘__name__’,
‘__package__’,
‘add’]
Здесь мы видим отсортированный список идентификаторов (вместе с функцией add() ) модуля example. Имена, начинающиеся со знака подчеркивания, являются атрибутами Python (не пользовательские), ассоциируемые с модулем.
Например, атрибут __name__ содержит имя модуля:
Все имена, определенные в нашем текущем пространстве имен, можно узнать с помощью функции dir(), просто не указывая аргументы:
Урок 5.
Модули и пакеты в Python. Импорт. Виртуальная среда venv.
Рассматриваем модули и пакеты из стандартной библиотеки Python и PyPI. Учимся использовать инструкции import и from..import и различать абсолютный и относительный импорт. Разбираемся с виртуальными пространствами venv. Создаем собственные модули.


Программы на Python содержат тысячи, десятки тысяч и сотни тысяч строк кода (есть проекты с миллионами). В таких условиях одним файлом с кодом не обойдёшься — его нужно разбивать на части. И с целью получения доступа к коду, который находится в других файлах, в Python реализован механизм модулей.
Что такое модуль в терминологии Python? Официальная документация дает следующее определение:

- Имеет расширение *.py (имя файла без расширения является именем модуля).
- Может быть импортирован.
- Может быть многократно использован.
- Позволяет вам логически организовать ваш код на Python.

Идем дальше. Если начать делить код достаточно большого проекта на модули, то довольно быстро может возникнуть желание сгруппировать несколько близких по тематике модулей. Или же мы захотим вынести часть модулей из проекта, чтобы их можно было использовать в других проектах. И тут нам на помощь приходят пакеты(packages) в Python, которые служат для объединения модулей в группы.
Вот что на эту тему говорит документация Python:

- Именем пакета является название данного каталога.
- С версии Python 3.3 любая папка (даже без __init__.py ) считается пакетом.
- Пакет может быть импортирован(так же как и модуль).
- Пакет может быть многократно использован(так же как и модуль).

- Стандартная библиотека Python (англ. Standard Library).
- Сторонние модули (англ. 3rd Party Modules)
- Пользовательские модули

Поговорим о каждой из групп немного подробнее — расскажем, где найти модули в каждом случае, и приведем примеры самых популярных и полезных из них.
1. Стандартная библиотека Python
- Встроенные модули. Входят в состав интерпретатора и написаны на языке С, что позволяет им обеспечивать эффективный доступ к функциональности на уровне ОС — например, к системе ввода-вывода данных. Многие из встроенных модулей являются платформозависимыми. Например, модуль winreg , предназначенный для работы с реестром ОС Windows, устанавливается только на соответствующей ОС.
- Модули расширения. Написаны на Python. Представляют собой стандартные способы решения наиболее часто встречающихся задач программирования. Сюда входят модули для работы со многими сетевыми протоколами и форматами интернета, регулярными выражениями, текстовыми кодировками, мультимедийными форматами, криптографическими протоколами, архивами, а также для сериализации данных, поддержки юнит-тестирования и др.
2. Сторонние модули (англ. 3rd Party Modules)
Это модули и пакеты, которые не входят в дистрибутив Python и могут быть установлены из каталога пакетов Python с помощью пакетного менеджера (например, pip или easy_install ).
PyPI (Python Package Index) — главный каталог библиотек на Python. Содержит более 200 000 пакетов.
Приведем несколько примеров популярных пакетов из каталога PyPI.


Чтобы воспользоваться функционалом модуля или пакета, необходимо его импортировать внутрь вашей программы. При импорте интерпретатор сначала ищет встроенный модуль с заданным именем. Если такого модуля нет, то идёт поиск файла <имя_модуля>.py в списке директорий, определённых в переменной sys.path .
- рабочую директорию скрипта (основного модуля);
- переменную окружения PYTHONPATH и пути инсталляции Python
Посмотреть данный список можно следующим образом:
После ключевого слова import указывается название модуля. Одной инструкцией можно подключить несколько модулей, хотя этого не рекомендуется делать, так как это снижает читаемость кода. Правильным тоном считается располагать новый импорт на новой строке.
После импортирования модуля его название становится переменной, через которую можно получить доступ к атрибутам модуля. Если название модуля слишком длинное, или оно вам не нравится по каким-то другим причинам, то для него можно создать псевдоним с помощью ключевого слова as . При использовании псевдонима доступ ко всем атрибутам модуля осуществляется только с помощью переменной-псевдонима, а переменной с оригинальным именем модуля в этой программе уже не будет (если, конечно, вы после этого не напишете import <модуль> , тогда модуль будет доступен как под именем-псевдонимом, так и под оригинальным именем).
Модули в Python
Модули – это организационная единица самого высокого уровня в Python. Если вы хотя бы немного знакомы с Python, вероятно уже использовали готовые модули или создали свои. Что же такое модуль? Модули – это программные единицы, хранящие код и данные, обеспечивающие повторное использование кода для Python проектов и также полезны при разбиении пространств имён в автономных пакетах. Они автономны, потому что получить доступ к атрибутам модуля только после их импорта. Их также можно рассматривать, как пакеты имён, которые при импорте становятся атрибутами импортированного модуля. Фактически, любой файл Python с расширением *.py является модулем.
Создание модуля
Для создания модуля в Python достаточно определить файл с суффиксом .py. Хотя не каждый файл Python предназначен для импорта в качестве модуля. Файлы Python, которые используются для работы в качестве автономного приложения Python (файлы верхнего уровня), обычно предназначены для запуска в виде скриптов, а импорт их, фактически запускает команды внутри скрипта.
Модули, которые предназначены для импорта другим кодом, не будут выполнять какое-либо действия, а только предоставят доступ к своим переменным и функциям в качестве атрибутов импортируемого объекта. Также возможно создавать двухрежимные модули, которые могут быть использованы для импорта и запуска в качестве сценария верхнего уровня.
Хотя правила создания модулей довольно условные, существует одно правило для именования модулей. Поскольку имена файлов модулей становятся именами переменных в Python при импорте не разрешается называть модули зарезервированными словами Python. Например, модуль for.py может быть создан, но не может быть импортирован, поскольку «for» – зарезервированное слово. Проиллюстрируем всё вышесказанной примером с «Hello world!».
My_module.py представлен как модуль, код которого может быть импортирован и повторно использован в других файлах Python. Он не требует какого-либо дополнительных действий, просто определяет функции и переменные. «my_script.py» разработан как скрипт верхнего уровня, который явно вызывает функцию hello_printer и печатает значение переменной.
Запустим файл my_script.py в терминале:
Как отмечалось ранее, важный вывод из этого первого базового примера – это то, что важны имена файлов модулей. После импорта они становятся переменными/объектами в модуле импортера. Все определения верхнего уровня в модуле становятся атрибутами этой переменной.
Под «верхним уровнем» подразумевается любая другая функция или переменная, которая не вложена внутри другой функции или класса. Затем эти атрибуты можно получить с помощью стандартного оператора <object>.<Attribute>.
Архитектура программы
Любая нетривиальная программа будет представлена несколькими файлами, связанными друг с другом импортами. Python, как и большинство других языков программирования, использует модульную структуру программы, где функциональные возможности группируются в многократно используемые единицы. Различают три типа файлов в многофайловом приложении:
- Файл верхнего уровня. Python скрипт, который является основной точкой входа в программу. Используется для запуска приложения.
- Пользовательские модули. Файлы Python, которые импортируются в файл верхнего уровня или между собой, определяющие отдельные функции. Такие файлы обычно не запускаются непосредственно из командной строки и создаются для решения узкоспециализированных задач проекта.
- Модули стандартной библиотеки. Модули, встроенные в установочный пакет Python, такие как независимые от платформы инструменты для системных интерфейсов, сценарии работы с Интернет протоколами, построение графических интерфейсов и другие.

На этом рисунке модуль top_module.py – это файл Python верхнего уровня, который импортирует функции, определенные в модуле module1, но также имеет доступ к функциям в module2 через module1. Два пользовательских модуля используют ресурсы друг друга, а также другие модули из стандартной библиотеки Python. Цепочка импорта может идти настолько глубоко, насколько нужно – нет ограничений в количестве импортированных файлов, и они могут импортировать друг друга, хотя нужно быть осторожным с циклическими импортами.
В приведенном выше примере top_module.py – это модуль верхнего уровня, который будет запускаться пользователем, и он импортирует инструменты из других модулей через module1.py. module1 и module2 являются определяемыми пользователем модулями, а модуль math импортируется из стандартной библиотеки. При запуске скрипта верхнего уровня получаем:
$ python top_module.py k = 2 n = 5
10.0
Когда запускается файл Python верхнего уровня, его операторы исходного кода и операторы в импортированных модулях компилируются в промежуточный формат, известный как байт код, который является независимым от платформы. Файлы байт кода импортированных модулей хранятся с расширением .pyc в том же каталоге, что и .py-файл для версий Python до 3.2, и в каталоге pycache/ в текущем каталоге программы в Python 3.2+.
Двухрежимный код
Как упоминалось ранее, файлы Python также могут быть разработаны как импортируемые модули, так и сценарии верхнего уровня. То есть при запуске модуль Python запускается как автономная программа, а при импорте он будет работать как импортируемый модуль.
Это легко сделать, используя атрибут name, который автоматически встроен в каждый модуль. Если модуль запущен как скрипт верхнего уровня, атрибут name будет равен строке «main», иначе, если импортирован, он будет содержать имя фактического модуля.
Пример двухрежимного кода:
Если файл запускается как отдельная программа, то такая же функция вызывается автоматически. Разница здесь, по сравнению с примером my_script.py в разделе main, заключается в том, что когда hiprinter.py импортируется, он не будет запускать код, вложенный в оператор if name == ‘main‘.
Двухрежимный код очень распространен на практике и особенно полезен для юниттестов, т. е. в то время как переменные и функции определяются как имена файла верхнего уровня, часть внутри оператора if может служить в качестве тестовых значений вышеописанных имён.
Оператор import
Основное различие между import и from заключается в том, что import загружает весь модуль в виде единого объекта, а from загружает определенные свойства и функции из модуля. Импорт имен с помощью оператора from может быть использован непосредственно в модуле импортера без вызова имени импортируемого объекта.
Использование инструкции from разрешено только в файле верхнего уровня модуля в Python 3.x, а не внутри функции. Python 2.x позволяет использовать его в функции, но выдает предупреждение. Оператор from медленнее import, поскольку он выполняет всю работу, которую выполняет import через весь контент импортированного модуля, а затем выполняет дополнительные действия при выборе соответствующих имён для импорта.
Существует также третий оператор импорта *, который используется для импорта всех имен в верхний уровень из импортированного модуля и использования их непосредственно в классе импортера. Например:
Код импортирует все имена (переменные и функции) из файла module2.py. Этот подход не рекомендуется из-за возможного дублирования имен, импортированные имена могут перезаписывать уже существующие имена в модуле импортера.
Каталог поиска модуля
Одним из важных аспектов при написании модульных приложений Python является поиск импортируемых модулей. Хотя модули стандартной библиотеки Python настроены на глобальную доступность, импорт пользовательских модулей за границей каталога может усложниться.
Python использует внутренний список каталогов, в которых он ищет модули, известные как путь поиска. Путь поиска состоит из каталогов, построенных в следующем порядке:
- Домашняя директория программы. Расположение сценария верхнего уровня. Обратите внимание, что домашний каталог может не совпадать с текущим рабочим каталогом.
- Каталоги, перечисленные в переменной окружения PYTHONPATH.
- Стандартные библиотечные каталоги. Каталоги автоматически устанавливаются с установкой Python и в них всегда выполняются поиск.
- Каталоги, перечисленные в .pth файлах. Этот вариант является альтернативой PYTHONPATH, и он добавляет ваши каталоги, указанные по одному в строке, в текстовый файл с суффиксом .pth, который должен быть помещен в каталог установки Python, который обычно является /usr/local/lib/python3.6/ в Unix или C:\Python36\ в Windows.
- Каталог site-packages. В этом каталоге автоматически располагаются все сторонние расширения.
PYTHONPATH, вероятно, является наиболее предпочтительным способом. Вы можете легко проверить, установлена ли переменная на вашем компьютере выполнив в командной строке:
Чтобы создать переменную на компьютере с Windows, вы должны использовать инструкции в «Панель управления -> Система -> Дополнительно», в то время как в MacOS и других Unix-системах проще всего добавить следующую строку в
/. bash_profile, где каталоги конкатенируются символом двоеточия («:»).
После того, как все каталоги поиска во время запуска программы будут определены, они сохраняются в списке, который можно увидеть с помощью sys.path. Также можно добавить каталог в sys.path, а затем импортировать свои модули, которые будут изменять каталоги поиска во время выполнения программы.
В любом случае параметры PYTHONPATH и .pth позволяют обеспечить более долговременное хранение каталогов поиска. Важно знать, что Python сканирует строку каталога поиска слева направо, поэтому модули в левых каталогах могут переписаны именами с одним и тем же именем в правой части. Обратите внимание, что каталоги поиска модулей необходимы только для импорта модулей, находящихся в разных каталогах.
Как показано в следующем примере, пустая строка в начале списка определяет текущий каталог:
В заключение, организация программы Python в нескольких взаимосвязанных модулях будет простой, если программа хорошо структурирована.
Перезагрузка модуля
Благодаря кэшированию модуль может быть импортирован процессом только один раз. Поскольку язык Python интерпретируемый, он запускает код импортированного модуля, когда достигнет инструкции import. Следующий import в рамках одного процесса (например, тот же интерпретатор Python) повторно не будет запускать код импортированного модуля. Он просто извлечет модуль из кеша.
Например, импортируем код в my_module.py в интерпретаторе Python, затем изменим файл и снова импортируем.
Чтобы отключить кеширование и включить повторный импорт модулей, Python предоставляет функцию reload. Повторим пример:
Функция reload изменяет модуль на месте. То есть, не затрагивая другие объекты, ссылающиеся на импортированный модуль. Обращаем ваше внимание, что функция также возвращает сам модуль, указывая его имя и путь к файлу. Эта функция особенно полезна на этапе разработки крупных проектов.
Например, для программ, которым требуется постоянная связь с сервером, гораздо сложнее перезапустить все приложение, чем выполнять динамическую перезагрузку для выполнения во время разработки.
Пакеты модулей
При импорте имен модулей фактически загружаются файлы Python, хранящиеся где-то в файловой системе. Как уже упоминалось ранее, импортированные модули должны находиться в каталоге, который указан в пути поиска модуля (sys.path). В Python есть нечто большее, чем «импорт имен» – вы можете импортировать весь каталог, содержащий файлы Python, в виде пакета модулей. Этот импорт известен как импорт пакетов.
Как импортировать пакеты модулей? Давайте создадим каталог с именем mydir, который включает в себя модуль mod0.py и два подкаталога subdir1 и subdir2, содержащий модули mod1.py и mod2.py соответственно. Структура каталогов выглядит так:
Обычный подход, который объяснялся до сих пор, заключался в том, чтобы добавить пути mydir, subdir1 и subdir2 к каталоги поиска модуля (sys.path), чтобы иметь возможность импортировать mod0.py, mod1. py и mod2.py. Это может привести к большим накладным расходами, если модули распределены по множеству разных подкаталогов. В любом случае, импорт пакетов будет предпочтительнее, потому что работают с импортом имени самой папки.
Недопустимая инструкция, приводящая к ошибке InvalidSyntax:
Правильный способ выполнить это – установить каталог /Users/Code/Projects/ в путь поиска модуля (добавив его в переменную среды PYTHONPATH или указав её в файле .pth), а затем импортировать модули, используя точечный синтаксис.
Вы, наверное, уже замечали, что некоторые Python каталоги содержат файл init.py. Это было фактически требование в Python2.x, чтобы сообщить Python, что ваш каталог является пакетым модулем. Файл init.py также является обычным файлом Python, который запускается всякий раз, когда этот каталог импортируется, и подходит для инициализации значений, например, для подключения к базе данных.
В большинстве случаев эти файлы просто пусты. В Python3.x эти файлы являются необязательными, и их можно использовать, если это необходимо. Следующие несколько строк показывают, как имена, определенные в init.py, становятся атрибутами импортируемого объекта (имя каталога, содержащего его).
Еще одна важная тема, когда речь идёт о пакетных модулях – относительный импорт. Относительный импорт полезен при импорте модулей внутри самого пакета. В этом случае Python будет искать импортированный модуль внутри пакета, а не в путях поиска модуля.
Строка импорта mod2 сообщает Python о поиске модуля mod2 в sys.path, и поэтому он не увенчался успехом. В данном случае нам поможет относительный импорт. Следующий оператор относительного импорта использует двойную точку («..»), которая обозначает родительский элемент текущего пакета (‘mydir /’). Для создания полного относительного пути к модулю mod2 необходимо включить следующий subdir2.
Относительный импорт – это огромная тема, которая может занять целую книгу. Они также сильно отличаются между версиями Python2.x и 3.x. Поддержка Python 2.x заканчивается в 2020 году, поэтому в тех случаях, когда существует большая разница между версиями Python, например, в относительном импорте, лучше сосредоточиться на версии 3.x.
Публикация пакета в PyPi
На текущий момент вы узнали, как писать модули Python, различать импортируемые модули и высокоуровневые, использовать определенные пользователем модули в границах каталога, изменять путь поиска модулей и, кроме всего прочего, создавать/импортировать пакеты модулей. После создания полезного программного обеспечения, упакованного в пакет модулей, вы можете поделиться им с большим сообществом Python. Пакетный индекс Python (PyPi) – это программный репозитарий, в настоящее время содержащий более 120 тыс. пакетов (на момент написания этой статьи). Возможно, вы уже устанавливали модули из репозитория с помощью команды pip.
Например, следующая строка загрузит и устанавливать библиотеку Numpy:
Как опубликовать свой пакет в репозитарии? Во-первых, он должен удовлетворять требованиям к упаковке и распространению. Необходимо выполнить два условия: установить pip, setuptools, wheel и установить twine, который используется для загрузки проекта в PyPi.
Следующим шагом будет настройка вашего проекта. В общем, это означает добавление нескольких файлов Python в проект, которые будут содержать информацию о конфигурации, руководства по использованию и т. д. Далее перечислены самые важные файлы, которые нужно добавить: setup.py. Этот файл необходимо добавить в корень проекта и использовать в качестве интерфейса установки из командной строки. Он должен содержать функцию setup(), которая будет принимать в качестве аргумента информацию, такую как: имя проекта, версия, описание, лицензия, зависимости проекта и т. д. README.rst: текстовый файл, описывающий пакет. licence.txt: текстовый файл, содержащий лицензию на программное обеспечение.
Наиболее востребованным форматом пакета является wheel. Запуск одной из следующих команд приведет к созданию каталога dist/ в корне вашего проекта, который содержит файлы в пакет для загрузки в PyPi.
Последний шаг – загрузка вашего дистрибутива в PyPi. Для этого нудно создать учетную запись на сайте PyPi и загрузить содержимое каталога dist/, созданного на предыдущем шаге.
Для получения дополнительной информации обратитесь к официальному сайту PyPi.