Экосистема профи: Git, виртуальные окружения и стандарты кода
Экосистема профи: Git, виртуальные окружения и стандарты кода
Добро пожаловать в профессиональную лигу. Если раньше ваш код жил в одном файле main.py на рабочем столе, а библиотеки устанавливались глобально командой pip install, то сегодня мы меняем правила игры.
Переход от любителя к профессионалу начинается не со знания сложных алгоритмов, а с организации рабочего пространства. В этой статье мы настроим фундамент, на котором будут строиться все наши будущие проекты: от CLI-утилит до веб-сервисов.
Почему «работает на моем компьютере» — это не аргумент
Представьте, что вы строите дом. Любительский подход — это прийти на стройку с одним молотком и кучей разнородных материалов, сваленных в кучу. Профессиональный подход — это организованный склад, четкие чертежи и стандартизированные инструменты.
В Python «склад» и «инструменты» — это виртуальные окружения, управление зависимостями и контроль версий. Без них любой проект сложнее «Hello World» обречен на так называемый «Dependency Hell» (Ад зависимостей).
Виртуальные окружения: Изоляция прежде всего
Главное правило Python-разработчика: никогда не устанавливайте пакеты в системный интерпретатор.
Почему? Представьте, что Проекту А нужен Django 3.0, а Проекту Б — Django 4.0. Если вы ставите их глобально, один из проектов перестанет работать. Виртуальное окружение (venv) создает изолированную папку с собственной копией интерпретатора Python и менеджера пакетов pip.
Классический подход: venv
Это встроенный инструмент, который есть в Python по умолчанию. Создание окружения выглядит так:
# Windows
python -m venv venv
# macOS / Linux
python3 -m venv venv
После создания его нужно активировать:
- Windows:
venv\Scripts\activate - macOS / Linux:
source venv/bin/activate
Когда окружение активировано, в терминале появится префикс (venv). Теперь все, что вы установите через pip install, попадет только в эту папку.
Современный стандарт: Poetry
Хотя venv и requirements.txt (список зависимостей) являются классикой, индустрия движется к более мощным инструментам. Мы в курсе будем использовать Poetry.
Poetry решает сразу три задачи:
- Управляет виртуальным окружением (создает его сама).
- Управляет зависимостями (разрешает конфликты версий).
- Помогает упаковывать проект для публикации.
Установка Poetry (выполняется один раз глобально):
# macOS / Linux / WSL
curl -sSL https://install.python-poetry.org | python3 -
# Windows (PowerShell)
(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | py -
Инициализация нового проекта:
poetry new my-project
Это создаст правильную структуру папок и файл pyproject.toml — паспорт вашего проекта.
Управление зависимостями: pyproject.toml
Файл requirements.txt — это просто список. Файл pyproject.toml — это декларация. В нем описывается не только то, какие библиотеки нужны, но и какие версии совместимы, а также настройки инструментов разработки.
Пример добавления библиотеки через Poetry:
poetry add requests
Poetry автоматически:
- Найдем подходящую версию
requests. - Скачает её и все её зависимости.
- Запишет информацию в
pyproject.tomlиpoetry.lock.
Файл poetry.lock критически важен. Он «замораживает» конкретные версии всех установленных пакетов. Это гарантирует, что если ваш коллега скачает проект и запустит poetry install, у него будет бит-в-бит то же самое окружение, что и у вас.
Git: Ваша машина времени
Git — это не просто способ сохранить код. Это история развития вашего продукта. В профессиональной разработке мы следуем нескольким правилам:
1. Правильный .gitignore
Не все файлы должны попадать в репозиторий. Мусор, временные файлы, настройки IDE и само виртуальное окружение должны быть проигнорированы.
Типичный .gitignore для Python:
__pycache__/
*.py[cod]
.venv/
.env
.DS_Store
.idea/
.vscode/
Обратите внимание на .env. В этом файле хранятся секреты (пароли, API-ключи). Никогда не отправляйте .env в Git. Для примера создают файл .env.example с пустыми значениями.
2. Атомарные коммиты
Плохой коммит:
"Исправил баг, добавил новую фичу и переписал половину проекта"
Хороший коммит:
"Fix: исправление ошибки валидации email"
Каждый коммит должен решать одну маленькую задачу. Это позволяет легко откатить изменения, если что-то пошло не так.
Чистота кода: Линтеры и Форматтеры
Код пишется для людей, а не для машин. Чтобы ваш код был читаемым и единообразным, мы используем автоматические инструменты проверки.
Flake8: Полиция нравов
flake8 проверяет ваш код на соответствие стандарту PEP 8 и ищет логические ошибки (например, импортированный, но неиспользуемый модуль).
Установка:
poetry add --group dev flake8
Запуск:
poetry run flake8 src/
Black: Бескомпромиссный форматтер
Споры о том, ставить пробелы вокруг знака = или нет, отнимают время. Black решает эти споры раз и навсегда. Он просто берет ваш код и переписывает его в едином стиле.
Установка:
poetry add --group dev black
Запуск:
poetry run black .
isort: Порядок в импортах
Импорты должны быть отсортированы: сначала стандартные библиотеки, потом сторонние, потом ваши собственные. isort делает это автоматически.
Структура профессионального проекта
Забудьте о свалке файлов в корне папки. Стандартная структура выглядит так:
my-project/
├── .github/ # Настройки для GitHub (CI/CD)
├── src/ # Исходный код проекта
│ └── my_app/ # Основной пакет
│ ├── __init__.py
│ └── main.py
├── tests/ # Тесты
│ ├── __init__.py
│ └── test_main.py
├── .env # Секреты (не в Git!)
├── .gitignore # Что игнорировать
├── pyproject.toml # Настройки проекта и зависимости
├── README.md # Описание проекта
└── poetry.lock # Фиксация версий
Папка src (source) используется для того, чтобы избежать путаницы при импортах и четко отделить код приложения от конфигурационных файлов.
Практическое задание: Настройка окружения
Прежде чем мы начнем писать код первого проекта (CLI-утилиты), подготовьте свою рабочую станцию:
- Установите Git и настройте
user.nameиuser.email. - Установите Python 3.10+.
- Установите Poetry.
- Создайте тестовый проект командой
poetry new python-pro-setup. - Добавьте в него
flake8иblackкак dev-зависимости. - Создайте репозиторий на GitHub и отправьте туда первый коммит (не забудьте про
.gitignore!).
Теперь вы готовы к настоящей разработке. В следующем модуле мы напишем нашу первую профессиональную CLI-утилиту, используя этот фундамент.