🧙 Садовник: уточнил шаги, добавил проверки и обоснования. Примите, если полезно.
#1Выполняй команду во встроенном терминале VS Code, находясь в папке будущего проекта. Если команда не найдена, сначала установи uv и заново открой терминал.
- –Команда напечатала версию uv
- –Терминал открыт в нужной папке
- –После установки uv команда доступна в новом терминале
Точка в конце означает «в текущей папке». Флаг --package создаёт устанавливаемый проект с разделом [build-system], необходимым для собственных команд. После запуска проверь pyproject.toml, README.md, .python-version, .gitignore и папку src/ с пакетом.
- –В папке появился pyproject.toml
- –В pyproject.toml есть раздел [build-system]
- –Появилась папка src с пакетом
После команды открой .python-version: там должна быть строка 3.12. В pyproject.toml установи requires-python = ">=3.12"; это минимальная поддерживаемая версия, тогда как .python-version задаёт версию по умолчанию для работы с проектом.
- –Файл .python-version содержит 3.12
- –В pyproject.toml указано requires-python = ">=3.12"
- –Команда uv run python --version показывает Python 3.12
Перенеси созданный пакет из src/<имя_проекта>/ в корневую папку app/, затем удали пустую src. Сразу создай папку scripts/ с пустым __init__.py и добавь перед [build-system] настройку сборщика:
- –Папка app находится в корне проекта
- –Папка scripts содержит __init__.py
- –В настройках wheel перечислены app и scripts
Команда добавит FastAPI и Uvicorn в dependencies, создаст или обновит uv.lock и синхронизирует .venv. Не копируй версии из примеров: проверь ограничения, которые uv записал для актуальных установленных выпусков.
- –В dependencies появились fastapi и uvicorn
- –Созданы uv.lock и .venv
- –Команда uv lock --check завершается успешно
Команда должна импортировать FastAPI из окружения проекта и напечатать его версию. Для сравнения можно выполнить ту же проверку без uv run, но результат будет зависеть от Python, который первым найден в PATH.
- –Команда напечатала версию fastapi
- –uv run python --version соответствует закреплённой версии
- –Импорт завершается без ModuleNotFoundError
Флаг --dev помещает Ruff в группу [dependency-groups].dev, а не в основные dependencies. Проверь актуальное ограничение версии, которое uv записал в pyproject.toml.
- –ruff находится в группе dev
- –ruff отсутствует в основных dependencies
- –Команда uv run ruff --version печатает версию
Создай scripts/commands.py:
Затем добавь или обнови раздел:
Слева указано имя команды, справа — путь в формате модуль:функция.
- –Создан файл scripts/commands.py
- –В [project.scripts] объявлена команда lint
- –Функция завершается кодом Ruff через sys.exit
При первом запуске uv может переустановить сам проект в окружение — это нормально. Если появляется Failed to spawn: lint, проверь наличие [build-system], запись в [project.scripts] и включение scripts в настройки wheel.
- –Команда запускается под именем lint
- –Ruff печатает результат проверки
- –При ошибках команда возвращает ненулевой код
Команда печатает файл, из которого Python действительно импортирует модуль. Ожидается путь к scripts/commands.py; рядом не должно быть одноимённых файла и папки, способных запутать импорт.
- –Напечатан путь к scripts/commands.py
- –В scripts нет одноимённых файла и папки
- –Путь относится к текущему проекту
Убедись, что .gitignore содержит .venv/, __pycache__/, *.py[cod] и .env, но не содержит uv.lock. В Git должны попасть pyproject.toml, uv.lock, .python-version, .gitignore, app/ и scripts/; если .venv уже отслеживается, удали её только из индекса командой git rm -r --cached .venv.
- –git check-ignore подтверждает игнорирование .venv
- –uv.lock и .python-version видны среди новых файлов
- –В списке нет .env, __pycache__ и содержимого .venv