JavaRush /Курсы /Модуль 1: Python Core /Создание своего пакета

Создание своего пакета

Модуль 1: Python Core
11 уровень , 1 лекция
Открыта

2.1 Знакомство с пакетами

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

Пример структуры пакета/директории


mypackage/
    __init__.py
    module1.py
    module2.py
Содержимое файла __init__.py

# __init__.py
from .module1 import func1
from .module2 import func2
Содержимое файла module1.py

# module1.py
def func1():
    return "Function 1"
Содержимое файла module2.py

# module2.py
def func2():
    return "Function 2"

Пример кода, который использует функции данного пакета:


import mypackage

print(mypackage.func1())  # Вывод: Function 1
print(mypackage.func2())  # Вывод: Function 2

Давайте ниже попробуем написать свой собственный пакет, заодно и разберемся, как работают чужие.

2.2 Создаем свой пакет пошагово

Шаг 1: Создание структуры пакета

Первым шагом является создание структуры каталогов и файлов для вашего пакета. В качестве примера мы создадим пакет под названием mypackage, содержащий два модуля: module1.py и module2.py.

Пример структуры пакета:


mypackage/
    __init__.py
    module1.py
    module2.py

Описание файлов:

  • __init__.py: Этот файл может быть пустым или содержать код инициализации пакета. Он нужен для того, чтобы Python рассматривал каталог как пакет.
  • module1.py и module2.py: Эти файлы содержат функции, классы и переменные, которые вы хотите включить в свой пакет.

Шаг 2: Написание кода для модулей

Напишем простой код для наших модулей.

module1.py


def func1():
    return "Function 1 from module1"

module2.py


def func2():
    return "Function 2 from module2"

__init__.py

Чтобы импортировать функции из наших модулей на уровень пакета, добавим их в __init__.py.


from .module1 import func1
from .module2 import func2

Теперь, когда вы импортируете пакет, функции func1 и func2 будут доступны напрямую.

Шаг 3: Тестирование пакета

Создайте файл test.py в том же каталоге, где находится каталог mypackage, и используйте пакет в этом файле для тестирования.

test.py


import mypackage

print(mypackage.func1())  # Вывод: Function 1 from module1
print(mypackage.func2())  # Вывод: Function 2 from module2

Запустите test.py, чтобы убедиться, что ваш пакет работает правильно.

2.3 Использование функции dir()

Когда вы импортируете модуль или пакет, вы можете использовать функцию dir() для получения списка всех доступных атрибутов и методов в этом модуле. Это особенно полезно, если вы работаете с новым или незнакомым модулем и хотите быстро узнать, какие функции и классы он предоставляет.

Пример: Исследование стандартного модуля math

Рассмотрим пример использования dir() для исследования стандартного модуля math.


import math

print(dir(math))

Этот код импортирует модуль math и выводит список всех доступных атрибутов и методов. Результат будет выглядеть примерно так:


['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan',
'atan2', 'atanh', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'expm1', 
'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf',
'isnan', 'isqrt', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'perm', 'pi', 'pow', 'prod',
'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']

Этот список включает все функции и константы, определенные в модуле math, такие как sin, cos, tan, pi и другие.

Использование dir() для пользовательских модулей

Вы также можете использовать dir() для пользовательских (своих) модулей. Допустим, у вас есть файл mymodule.py со следующим содержимым:


# mymodule.py
def greet(name):
    return f"Hello, {name}!"
            
pi = 3.14159

Вы можете импортировать этот модуль и использовать dir() для исследования его содержимого:


import mymodule

print(dir(mymodule))

Результат будет следующим:


['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 
'greet', 'pi']

Список включает 8 служебных атрибутов (обрамлены подчеркиванием) модуля mymodule, и в конце идут ваш метод greet и переменная pi.

2
Задача
Модуль 1: Python Core, 11 уровень, 1 лекция
Недоступна
Создание простого пакета
Создание простого пакета
2
Задача
Модуль 1: Python Core, 11 уровень, 1 лекция
Недоступна
Исследование модуля
Исследование модуля
Комментарии (10)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Slevin Уровень 64
7 июля 2025
В описании 1 задания нигде не указано, что импортировать нужно именно конкретные функции из пакета и вызывать их. mypackage.function_1() - не пропускается.
Александр Уровень 19 Expert
18 мая 2025
в первой задаче выдавало ошибку "нет такого пакета" и в браузере и в пайчарме, пока не удалил написанное от руки import mypackage и не набрал то-же самое в ide с помощью автоподстановки, и все заработало...
Max Pridan Уровень 30
19 апреля 2025
Первая задача. mypackage - это папка в вашем проекте которую вам нужно создать, внутри папки 3 файла которые вы создаете. __init__.py - это пустой файл просто для чтого, чтобы mypackage стал пакетом. module1.py - это файл где хранится первая функция def func1() module2.py - это файл где хранится вторая функция def func2() А после вызываете функции в файле который у вас как назван task03.py или как то там, смотрите сами.
Ild Gih Уровень 31
16 марта 2025
через pycharm после обновления задач они не появляются. задачи доступны только в web версии. что делать ??????
Arnold Layne Уровень 24
12 апреля 2025
У меня была такая ошибка когда я добавил свой файл в дерево тасок при решении предыдущей задачи с модулями. Когда удалил модуль и ссылки на него в задаче и перезагрузил pycharm - заработало.
Irina Уровень 27
25 февраля 2025
Не могу решить первую задачу. Решение не проходит
Squeezex Уровень 26
26 февраля 2025
Прошло с 1 раза в IDE. Как создавать пакет в IDE: 1. Выбрать в левом верхнем меню 'File' 2. Выбрать 'New' 3. Кликнуть 'Python Package' - создаст папку уже с файлом __init__.py 4. Дальше так же создаете в mypackage два модуля, и вызываете их в файле задачи
Mike Starman Уровень 1
18 февраля 2025
Жахливо подана умова задачі! Хто заплутається: Треба зробити тупо як в лекції: створити пакет і вказані в умові файли. Файл "__init__.py" теж. Тестувати роботу пакету треба НЕ у тому файлі, де подано умову задачі, а створити окремий файл "test.py". Інакше валідатор не дає жодної інформації де і що не так
Igor Уровень 40
16 января 2025

__init__.py: Этот файл может быть пустым
Проверил на Python3.13 и Python 3.9, и тест первой задачи не проходит. Выглядит, что утверждение не верное.
_den Уровень 53
1 апреля 2025
если init пустой, то нужно указывать полный путь до модуля при импорте:

import mypackage.module1
mypackage.module1.func1()