Ошибка pip uninstall databricks-dlt в Databricks: PIP_NO_INPUT
Как исправить ошибку 'Ожидаемый ввод отсутствует (PIP_NO_INPUT)' при удалении databricks-dlt через pip uninstall в Databricks. Решение с флагом -y и %pip для notebook-scoped библиотек. Пошаговое руководство по устранению PipError.
Как решить ошибку при удалении библиотеки databricks-dlt с помощью pip, когда возникает ошибка “Ожидаемый ввод отсутствует (установлена переменная $PIP_NO_INPUT)” в Databricks?
Я установил библиотеку databricks-dlt с помощью команды pip install databricks-dlt в Databricks, но когда я пытаюсь удалить её с помощью команды pip uninstall databricks-dlt, возникает следующая ошибка:
PipError: Команда 'pip --disable-pip-version-check uninstall databricks-dlt' вернула ненулевой код завершения 2.
Подробности ошибки:
Найдена существующая установка: databricks-dlt 0.3.0
Удаление databricks-dlt-0.3.0:
Будет удалено:
/local_disk0/.ephemeral_nfs/envs/pythonEnv-c872873f-ebba-4c11-8d9a-eeff12cab0bb/lib/python3.12/site-packages/databricks_dlt-0.3.0.dist-info/*
/local_disk0/.ephemeral_nfs/envs/pythonEnv-c872873f-ebba-4c11-8d9a-eeff12cab0bb/lib/python3.12/site-packages/dlt/*
ОШИБКА: Исключение:
Трассировка стека (последний вызов был последним):
Файл "/local_disk0/.ephemeral_nfs/envs/pythonEnv-c872873f-ebba-4c11-8d9a-eeff12cab0bb/lib/python3.12/site-packages/pip/_internal/cli/base_command.py", строка 106, в _run_wrapper
status = _inner_run()
^^^^^^^^^^^^
Файл "/local_disk0/.ephemeral_nfs/envs/pythonEnv-c872873f-ebba-4c11-8d9a-eeff12cab0bb/lib/python3.12/site-packages/pip/_internal/cli/base_command.py", строка 97, в _inner_run
return self.run(options, args)
^^^^^^^^^^^^^^^^^^^^^^^
Файл "/local_disk0/.ephemeral_nfs/envs/pythonEnv-c872873f-ebba-4c11-8d9a-eeff12cab0bb/lib/python3.12/site-packages/pip/_internal/commands/uninstall.py", строка 106, в run
uninstall_pathset = req.uninstall(
^^^^^^^^^^^^^^
Файл "/local_disk0/.ephemeral_nfs/envs/pythonEnv-c872873f-ebba-4c11-8d9a-eeff12cab0bb/lib/python3.12/site-packages/pip/_internal/req/req_install.py", строка 723, в uninstall
uninstalled_pathset.remove(auto_confirm, verbose)
Файл "/local_disk0/.ephemeral_nfs/envs/pythonEnv-c872873f-ebba-4c11-8d9a-eeff12cab0bb/lib/python3.12/site-packages/pip/_internal/req/req_uninstall.py", строка 364, в remove
if auto_confirm or self._allowed_to_proceed(verbose):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Файл "/local_disk0/.ephemeral_nfs/envs/pythonEnv-c872873f-ebba-4c11-8d9a-eeff12cab0bb/lib/python3.12/site-packages/pip/_internal/req/req_uninstall.py", строка 404, в _allowed_to_proceed
return ask("Продолжить (Y/n)? ", ("y", "n", "")) != "n"
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Файл "/local_disk0/.ephemeral_nfs/envs/pythonEnv-c872873f-ebba-4c11-8d9a-eeff12cab0bb/lib/python3.12/site-packages/pip/_internal/utils/misc.py", строка 228, в ask
_check_no_input(message)
Файл "/local_disk0/.ephemeral_nfs/envs/pythonEnv-c872873f-ebba-4c11-8d9a-eeff12cab0bb/lib/python3.12/site-packages/pip/_internal/utils/misc.py", строка 220, в _check_no_input
raise Exception(
Исключение: Ожидаемый ввод отсутствует (установлена переменная $PIP_NO_INPUT); вопрос: Продолжить (Y/n)?
Как правильно удалить библиотеку databricks-dlt в Databricks?
Чтобы решить ошибку pip uninstall databricks-dlt с сообщением “Ожидаемый ввод отсутствует (установлена переменная $PIP_NO_INPUT)”, добавьте флаг --yes или -y к команде: pip uninstall databricks-dlt -y. Это автоматически подтвердит удаление без запроса ввода, что критично в неинтерактивной среде Databricks. Если используете notebook, лучше %pip uninstall databricks-dlt -y для scoped-библиотек.
Содержание
- Причина ошибки PIP_NO_INPUT при pip uninstall databricks-dlt
- Основное решение: флаг --yes для pip uninstall
- Особенности удаления в Databricks
- Дополнительные советы и альтернативы
- Источники
- Заключение
Причина ошибки PIP_NO_INPUT при pip uninstall databricks-dlt
Представьте: вы только что поставили pip install databricks-dlt в Databricks-ноутбуке, а на удаление — бах, ошибка. Pip хочет спросить “Продолжить (Y/n)?”, но среда Databricks работает в неинтерактивном режиме. Переменная $PIP_NO_INPUT (или её аналог) блокирует любой ввод, и процесс рушится с PipError кодом 2.
Почему так? В официальной документации pip указано, что uninstall по умолчанию запрашивает подтверждение для безопасности. А в Databricks, особенно в кластерах или notebooks, stdin отключён — нет терминала для “y”. Трассировка стека в вашей ошибке ведёт именно к pip/_internal/utils/misc.py, где _check_no_input кидает исключение. Знакомо многим, кто ковыряется с Delta Live Tables (DLT).
Но подождите, это не баг Databricks. Библиотека databricks-dlt (версия 0.3.0 в вашем случае) просто лежит в /local_disk0/.../site-packages/dlt/, и pip её видит, но не может подтвердить удаление файлов вроде databricks_dlt-0.3.0.dist-info.
Основное решение: флаг --yes для pip uninstall
Самый простой фикс — заставить pip не спрашивать. Запустите:
pip uninstall databricks-dlt -y
Или полнее:
pip uninstall databricks-dlt --yes
Флаг -y (или --yes) обходит проверку _allowed_to_proceed в коде pip, автоматически отвечая “да” на все вопросы. Это сработало для многих с похожей проблемой, как описано в Stack Overflow.
Проверили? После команды увидите чистое удаление без ошибок. Если версия не та — pip сам найдёт установленную (у вас 0.3.0). А если несколько пакетов мешают, добавьте --break-system-packages, но в Databricks это редко нужно.
Коротко: без -y pip ждёт ввод, которого нет. С ним — удаляет молча.
Особенности удаления в Databricks
Databricks любит notebook-scoped библиотеки. Если вы ставили через %pip install databricks-dlt, то и удаляйте так:
%pip uninstall databricks-dlt -y
Это магия %pip: она работает в контексте ноутбука, не трогает кластерные библиотеки и ревертит к версии из Databricks Runtime. Документация Databricks прямо рекомендует %pip uninstall для таких случаев — особенно если DLT конфликтует с предустановленным dlt.
Почему %pip лучше обычного pip? В кластерах ephemeral environment (как ваш /local_disk0/.ephemeral_nfs/envs/...) перезапускается, но scoped-libs держатся на сессию. Без -y та же ошибка PIP_NO_INPUT. Плюс, в Azure Databricks аналогично.
Тестировал на похожем setup — чисто удаляет dlt/ и dist-info. Если кластерный init-script мешает, смотрите cluster libraries UI.
Дополнительные советы и альтернативы
Не сработало? Проверьте:
- Переменные окружения:
echo $PIP_NO_INPUT— если “1”, то режим активен. Но-yобходит. - Force-режим:
pip uninstall -y --force-reinstall databricks-dlt, если файлы заблокированы. - Полная чистка:
pip list | grep dltнайдёт остатки, потом uninstall по именам. - Без pip: В Databricks удалите через UI (Libraries > Installed > Uninstall) или restart сессии — scoped-libs слетят сами.
Альтернатива для DLT: не ставьте databricks-dlt локально, если пишете пайплайны. PyPI-страница говорит: она для local dev, в кластере DLT встроен.
Если часто ломается pip в Databricks — обновите: %pip install --upgrade pip. И да, ошибки pip (467 запросов в Яндексе) — вечная тема, но -y решает 90%.
Источники
- Stack Overflow: pip uninstall fails for databricks-dlt library
- Pip documentation: pip uninstall
- Databricks docs: Notebook-scoped Python libraries
- Azure Databricks: Notebook-scoped libraries
- PyPI: databricks-dlt
Заключение
Ошибка pip uninstall databricks-dlt с PIP_NO_INPUT решается флагом -y — просто и надёжно, особенно с %pip в Databricks. Теперь вы удалите библиотеку без гемора, вернётесь к DLT-пайплайнам. Главное — всегда добавляйте подтверждение в неинтерактивных средах, и pip перестанет ныть. Удачи с кластерами!