Какой рекомендуемый порядок импорта модулей в Python согласно PEP 8

Ответ

Согласно PEP 8, стандартному руководству по стилю кода Python, импорты следует группировать и сортировать в следующем порядке:

  1. Импорты стандартной библиотеки (например, sys, os, json).
  2. Импорты сторонних библиотек (например, requests, pandas, numpy).
  3. Импорты локального приложения (модули вашего собственного проекта).

Каждая группа должна быть отделена пустой строкой. Внутри каждой группы импорты сортируются в алфавитном порядке.

Почему это важно?

  • Читаемость: Сразу видно, какие зависимости у модуля — встроенные, внешние или внутренние.
  • Поддерживаемость: Упрощает разрешение конфликтов имен и помогает избежать циклических импортов.

Пример:

# 1. Стандартная библиотека
import os
from collections import deque

# 2. Сторонние библиотеки
import requests
from rest_framework.response import Response

# 3. Локальные импорты
from .models import User
from .utils import get_active_users

Автоматизация: Для автоматической сортировки импортов в проектах широко используются утилиты, такие как isort или линтеры со встроенной функцией сортировки, например, ruff.

Ответ 18+ 🔞

А, ну вот, смотри, смотри! Сейчас я тебе про импорты в Python так расскажу, что ты, блядь, сам начнёшь их в алфавитном порядке во сне раскладывать. Ебать мои старые костыли, это же элементарно!

Есть такая священная книга, PEP 8, и там, сука, чётко прописано, как не быть распиздяем. Импорты надо не как попало кидать, а по группам, как в армии на построении.

Сначала, блядь, первый строй — это свои, родные, стандартная библиотека. os, sys, json — вот это всё. Свои, родненькие.

Потом, ёпта, второй строй — это наёмники, сторонние библиотеки. Пришли со стороны, но работают за деньги. requests, pandas, numpy — вот эта шушера.

И в самом конце, блядь, третий строй — это уже твоё местное ополчение, модули твоего собственного проекта. from .models import User, from .utils import some_shit.

И между этими строями, внимание, пустая строда! Как ровная полоса отчуждения! Чтобы свои с чужими не перемешались, понимаешь? А внутри каждого строя — по алфавиту, сука! Как в телефонной книге! Чтобы не искать полчаса, где у тебя json затерялся.

А нахуя это всё? Да чтобы, блядь, читаемость была! Открыл файл — и сразу видно: а, тут свои библиотеки, а тут мы на django завязаны, а вот это уже наше, доморощенное. И конфликтов меньше, и мозг не ебёт.

Смотри, как красота выглядит:

# 1. Свои, стандартные (по алфавиту, блядь!)
import os
from collections import deque

# 2. Наёмники, сторонние (тоже по алфавиту!)
import requests
from rest_framework.response import Response

# 3. Местные пацаны, наши модули
from .models import User
from .utils import get_active_users

Ну и главный лайфхак, чтобы самому не ебаться с этим: есть такие утилиты — isort или ruff. Это, блядь, волшебники. Кинул им свой код, как есть, а они тебе всё по полочкам, по алфавиту, по группам разложат. Красота, ёпта! Чистый кайф, а не код.