Структура PythonGo-проектаГлава 2.7
02 / 07 Один проект · следующий шаг

Практика: верните файлам порядок

Получаем тот же проект без структуры. Собираем его самостоятельно и проверяем результат.

Результат главыИз разрозненных файлов → работающий пакетИз разрозненных файлов → работающий модуль
Ваш терминал
Для работы вместе с преподавателем

Вам прислали файлы одним архивом

Коллега прислал Student Tools, но потерял структуру и назвал файлы по-своему. Ваша задача — восстановить проект по ответственности кода. Формулы уже готовы; импортам в точке запуска нужна правильная структура папок.

↓Скачать практикуZIP · внутри папки python/ и go/, в каждой пять файлов и задание

В архиве две папки: python/ и go/ — возьмите свою. Работайте в новой папке student-tools, чтобы не затереть разобранный пример. Сначала прочитайте каждый файл, потом переносите.

Не пытайтесь запускать запуск final.py до раскладки: импорты в нём рассчитаны на готовую структуру пакетов.

Терминал: в распакованной папке практики шесть файлов с русскими именами; запуск файла до раскладки даёт ModuleNotFoundError: No module named app.
Распакованный архив практики · macOS / Python 3.12

Сверху содержимое архива: две папки по языкам, внутри python — пять файлов проекта и задание. Снизу попытка запустить точку входа до раскладки: импорт from app.services.calculator import … ищет пакет app, которого ещё нет. Чтобы ошибка ушла, нужно построить структуру папок; строки импорта при этом остаются прежними.

Нажмите на изображение, чтобы увеличить.

В архиве внутри две папки: python/ и go/ — возьмите свою. Не пытайтесь собирать запуск final.go до раскладки: импорты в нём рассчитаны на готовую структуру пакетов и на имя модуля из go.mod.

Маршрут работы

Выполните в своём проекте
Где
Новая папка для практики; исходный разобранный проект сохранён отдельно.
Действие
Распакуйте практику, прочитайте файлы и восстановите структуру по списку ниже.
Результат
Получается тот же пакет Student Tools с .venv, зависимостями и документацией.
Проверка
Запуск даёт 4.40, три теста проходят; разбор открывается по паролю после вашей попытки.
  1. Определите ответственность. Где вычисления, где оформление строки, где запуск, где проверки, где зависимости?
  2. Дайте файлам понятные имена. Используйте snake_case. Создайте app/services, app/utils и tests.
  3. Оформите пакеты. Добавьте пустые __init__.py в app, services и utils. Сопоставьте дерево с импортами в main.py.
  4. Подготовьте окружение. Создайте .venv, активируйте, проверьте sys.executable и выберите тот же Python в VS Code.
  5. Восстановите зависимости. Установите их из переименованного requirements.txt — вместе с Rich поставится pytest, которым запускаются тесты.
  6. Запустите и проверьте. Из корня выполните две команды ниже. Исправляйте причину ошибки, а не переписывайте импорты наугад.
  7. Подготовьте передачу. Добавьте .gitignore и README с командами, результатом и объяснением структуры.
ТЕРМИНАЛ · student-tools/
python -m app.main
python -m pytest -v
КРИТЕРИЙ ГОТОВНОСТИ
Средний результат: 4.40

3 passed

Маршрут работы

Выполните в своём проекте
Где
Новая папка для практики; исходный разобранный проект сохранён отдельно.
Действие
Распакуйте практику, прочитайте файлы и восстановите структуру по списку ниже.
Результат
Получается тот же модуль Student Tools с go.mod, зависимостями и документацией.
Проверка
Запуск даёт 4.40, тесты проходят; готовый пример открывайте после своей попытки.
  1. Определите ответственность. Где вычисления, где оформление строки, где запуск, где проверки, где список зависимостей?
  2. Дайте файлам понятные имена. В Go имена файлов пишут слитно маленькими буквами: calculator.go, formatter.go. Создайте папки internal/services и internal/utils.
  3. Объявите модуль. Выполните go mod init example.com/student-tools или восстановите go.mod из присланного файла. Имя модуля должно совпадать с началом путей в импортах.
  4. Проверьте объявления package. В каждом файле первая строка должна соответствовать его папке: package services, package utils, package main в корне.
  5. Восстановите зависимости. Выполните go mod tidy: команда дочитает импорты и вернёт в go.mod всё нужное.
  6. Проверьте имена функций. Всё, что вызывается из другого пакета, должно начинаться с заглавной буквы: CalculateAverage, FormatAverage.
  7. Соберите и проверьте. Из корня выполните три команды ниже. Исправляйте причину ошибки, а не переписывайте импорты наугад.
  8. Подготовьте передачу. Добавьте .gitignore и README с командами, результатом и объяснением структуры.
ТЕРМИНАЛ · student-tools/
go build ./...
go run .
go test ./... -v
КРИТЕРИЙ ГОТОВНОСТИ
Средний результат: 4.40

--- PASS: TestCalculateAverage (0.00s)
--- PASS: TestCalculateAverageEmpty (0.00s)
ok      example.com/student-tools/internal/services

Мини-тренажёр перед раскладкой

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

Если не запускается

No module named rich

Проверьте sys.executable и python -m pip show rich. Установите зависимости в Python, которым запускаете программу.

No module named app

Терминал должен быть в папке над app. Проверьте, что app не оказался внутри второй вложенной student-tools. Запуск: python -m app.main.

Cannot import name или partially initialized module

Проверьте имя функции, содержимое файла и циклические импорты. calculator и formatter не должны импортировать main.

Тесты не найдены: collected 0 items

Убедитесь, что файл называется test_calculator.py, лежит в папке tests, а имена функций внутри начинаются с test_. Ноль собранных тестов не подтверждает готовность работы.

Python не найден / venv не создаётся

На Windows проверьте py --version, на macOS/Linux — python3 --version. Если Python не установлен, сначала установите его. На некоторых Linux-системах компонент venv ставится отдельно; следуйте сообщению системы или обратитесь к преподавателю.

Если не собирается

go.mod file not found in current directory or any parent directory

Терминал находится вне модуля или go mod init не выполнялся. Перейдите в папку, где лежит go.mod, и повторите команду. Проверьте, что проект не оказался внутри второй вложенной папки student-tools.

no required module provides package github.com/fatih/color

Импорт в коде есть, а записи в go.mod нет. Выполните go mod tidy: команда прочитает импорты и добавит нужное. Если ошибка осталась, проверьте написание пути — он должен точно совпадать с адресом репозитория, включая регистр.

found packages services and calculator in одной папке

В одной папке лежат файлы с разными объявлениями package. Приведите первую строку всех файлов папки к одному имени — тому, которое совпадает с именем папки.

undefined: services.calculateAverage

Функция названа со строчной буквы, поэтому вне своего пакета она не существует. Переименуйте её в CalculateAverage и исправьте вызов. Та же ошибка возникает, если функция лежит в другой папке, чем вы думаете.

imported and not used: "fmt"

В Go неиспользованный импорт — ошибка компиляции, а не замечание. Удалите лишнюю строку импорта или воспользуйтесь именем из этого пакета. Расширение Go в VS Code убирает такие импорты само при сохранении файла.

import cycle not allowed

Два пакета импортируют друг друга. Проверьте, не появился ли в services или utils импорт пакета main. Данные передают аргументами, результат возвращают через return; обратный импорт для этого не нужен.

Тесты не найдены: [no test files]

Файл обязан заканчиваться на _test.go, а функция — начинаться с Test и принимать *testing.T. Строки no test files не являются ошибкой, но и подтверждением готовности тоже: ищите в выводе PASS и ok.

command not found: go

Go не установлен или не попал в PATH. Установите его с go.dev/dl, затем закройте и заново откройте терминал VS Code: переменные окружения читаются при его запуске.

Сверка после собственной попытки

Разбор раскладки и готовый пример закрыты паролем. Пароль называет преподаватель, когда вы собрали проект сами и показали запуск. До этого момента сверять нечего: смысл работы в том, чтобы восстановить структуру по импортам.

Документация к теме

Go: организация кода · Go: добавляем тест · Go: справочник по модулям

Python: venv · Python: модули и пакеты · VS Code: Python environments · pip freeze