среда, 2 июля 2025 г.
Poetry, Train, Project, Chad,
среда, 25 июня 2025 г.
Project, annotation_ci_proj, Poetry, pyproject.toml, giga
Annotations, 250610, Project, annotation_ci_proj, Poetry, pyproject.toml, giga
https://giga.chat/link/gcsWxJqDsl
D:\VC25\Otus\Py\250610\projects\annotation_ci_proj
pyproject.toml
[project]
name = "annotation-ci-proj"
version = "0.1.0"
description = ""
authors = [
{name = "Your Name",email = "you@example.com"}
]
readme = "README.md"
requires-python = ">=3.12"
dependencies = [
"black (>=25.1.0,<26.0.0)",
"flake8 (>=7.3.0,<8.0.0)",
"isort (>=6.0.1,<7.0.0)",
]
[tool.poetry]
packages = [{include = "annotation_ci_proj", from = "src"}]
[tool.poetry.group.dev.dependencies]
pytest = "^8.4.1"
mypy = "^1.16.1"
pyright = "^1.1.402"
[build-system]
requires = ["poetry-core>=2.0.0,<3.0.0"]
build-backend = "poetry.core.masonry.api"
----------------------------------
Альтернативный способ активации (через оболочку):Хотя shell официально устарел, ты можешь восстановить старую функциональность,установив специальный plugin:poetry self add poetry-plugin-shell
После установки этого плагина старая команда shell заработает снова:poetry shell
Заключение:
Рекомендуется перейти на использование команды env activate,
так как это официальный и современный способ активации виртуального окружения в Poetry 2.x.
Это сделает твой проект совместимым с актуальной документацией и общими практиками.
воскресенье, 1 июня 2025 г.
First, Part2 , 30.05.2025, Project, Structures, Giga
First, Part2 , 30.05.2025, Project, Structures, Giga
https://giga.chat/link/gcsbKolIqu
Структура проекта Python
Проектная структура — важный аспект разработки программного обеспечения на Python.
Грамотно организованная структура облегчает разработку, тестирование и поддержку приложения.
Рассмотрим стандартную структуру проекта на примере небольшого веб-приложения.
Типичная структура проекта Python:
my_project/ │ # Файлы верхнего уровня ├── README.md # Описание проекта ├── requirements.txt # Список зависимостей проекта ├── setup.py # Скрипт установки пакета ├── Makefile # Автоматизация сборки/развертывания ├── .gitignore # Исключаемые файлы для системы контроля версий Git │ ├── my_app # Основной пакет приложения │ ├── __init__.py # Пустой файл для обозначения папки как пакета │ ├── main.py # Главная точка входа в приложение │ ├── config.py # Конфигурационные настройки │ └── models.py # Модели данных (например, ORM) │ ├── tests # Директория для тестов │ ├── test_main.py # Тестирование главной точки входа │ └── test_models.py # Тестирование моделей данных │ ├── docs # Документация проекта │ ├── index.rst # Индекс документации (Sphinx) │ └── conf.py # Настройки конфигурации документаций │ └── logs # Лог-файлы приложенияРазбор структуры:
README.md: Краткое руководство по проекту, инструкции по установке и запуску.requirements.txt: Перечисление всех необходимых библиотек и модулей для запуска приложения.setup.py: Инструмент для упаковки и распространения вашего приложения в виде модуля Python..gitignore: Файл, определяющий правила игнорирования файлов и директорий системой контроля версий Git.Makefile: Удобный инструмент автоматизации рутинных действий, таких как сборка, тесты, деплоймент.my_app: Главный каталог приложения, содержащий весь код проекта.tests: Каталог для хранения тестовых сценариев.
docs: Документированная информация о проекте,- используемая для генерации HTML-документации с помощью инструментов вроде Sphinx.
logs: Папка для хранения лог-файлов приложений.----Для больших проектов важно придерживаться некоторых правил:
- Модульность:
- Код разбивается на небольшие модули, каждый из которых решает свою отдельную задачу.
- Это позволяет легче поддерживать проект и улучшает читаемость.
- Использование виртуальных сред (
venv):- Каждый проект лучше держать изолированным от других путем использования виртуальной среды Python.
- Так проще управлять зависимостями и избегать конфликтов между проектами.
- Разделение на слои:
- Проект делится на логические уровни: модели данных, бизнес-логика, контроллеры, представления и шаблоны.
- Например, в Django такая архитектура поддерживается автоматически.
- Автоматизированные тесты:
- Чем больше проект, тем важнее наличие автоматизированных тестов,
- обеспечивающих проверку работоспособности каждого компонента.
- Документирование:
- Подробная документация значительно упрощает понимание и развитие проекта. Она должна содержать описание API,
- руководства по настройке и использованию функционала.
Таким образом,
грамотная организация структуры проекта помогает создавать масштабируемые и поддерживаемые проекты на Python.
First,30.05.2025, Project, Structures, Giga
First,30.05.2025, Project, Structures, Giga
https://giga.chat/link/gcsJhXtnzn
Структура проекта, управление зависимостями, настройка окружения: обзор и лучшие практики // ДЗ
Цели занятия
разобрать стандартный шаблон структуры Python проекта;
рассмотреть различные инструменты по управлению зависимостями;
научиться создавать удобное окружение для разработки.
Краткое содержание
шаблон структуры проекта;
Makefile;
управление зависимостями, setup.py,pyproject.toml, poetry;
versioning, vendoring;
обзор инструментов и библиотек для настройки окружения;
pre-commit hooks;
gitlab CI, github actions.
------------------------------------------------------------------------------------------
Хороший проект на Python имеет четкую структуру каталогов и файлов, которая облегчает поддержку, масштабирование и понимание проекта разными разработчиками. Вот стандартная структура проекта на Python:my_project/
├── README.md # Описание проекта
├── LICENSE # Лицензия (например, MIT)
├── .gitignore # Файл для игнорирования ненужных файлов Git'ом
├── requirements.txt # Список зависимостей проекта
├── setup.py # Скрипт установки пакета (опционально)
├── Dockerfile # Для контейнеризации приложения (опционально)
├── src/ # Каталог исходников
│ ├── __init__.py # Пустой файл для инициализации пакета
│ ├── main.py # Основной исполняемый скрипт программы
│ ├── app/ # Основные модули приложения
│ │ ├── __init__.py
│ │ ├── config.py # Конфигурационные файлы
│ │ ├── utils.py # Вспомогательные функции
│ │ └── services.py # Логика сервиса или бизнес-логики
│ ├── tests/ # Тестовые сценарии
│ │ ├── __init__.py
│ │ ├── test_app.py # Модульные тесты основных модулей
│ │ └── integration_tests.py # Интеграционные тесты
│ └── data/ # Статические данные, используемые проектом
│ ├── raw_data.csv # Исходные данные
│ └── processed_data.json # Обработанные данные
├── docs/ # Документация проекта
│ ├── architecture.md # Архитектурная документация
│ ├── api_docs.md # API-документация
│ └── user_guide.md # Руководство пользователя
├── logs/ # Лог-файлы приложения
└── venv/ # Изоляционная среда виртуального окружения (не коммитится)----------------------------------------------------------------------------------Такая структура позволяет поддерживать порядок в проекте, облегчая навигацию и поддерживаемость. Она подходит как для небольших проектов, так и крупных приложений.Файл __init__.py служит специальным маркером для интерпретатора Python, сообщающим,
что папка является пакетом Python.
Это значит, что каталог можно импортировать в другие части программы.
Например, рассмотрим следующую структуру каталога:
my_package/ ├── __init__.py ├── module1.py └── subpackage/ ├── __init__.py └── module2.py
При наличии файла __init__.py, каталог my_package становится пакетным модулем,
доступным для импорта следующим образом:
import my_package.module1 from my_package.subpackage import module2
-----------
Что можно поместить внутрь файла __init__.py?
- Пустое содержимое:
- Если этот файл пустой, то Python автоматически делает каталог пакетом.
- Инициализация пакета:
- Можно добавить любую начальную логику, необходимую для подготовки пакета перед использованием
- (например, подключение конфигураций или настройка переменных среды).
- Импорт внутренних модулей:
- Иногда удобно импортируемые модули объявлять прямо внутри
__init__.py. - # Содержимое __init__.py from .module1 import function1 from .subpackage.module2 import class2
- Например:
- # Содержимое __init__.py from .module1 import function1 from .subpackage.module2 import class2
Таким образом, пользователи смогут обращаться напрямую к содержимому модуля, используя сокращенный синтаксис:from my_package import function1, class2