2025, Oct 19 11:16
Pylance зависает на Loading information в devcontainers: исправление одной настройкой
Pylance в VS Code devcontainers зависает на Loading information? Причина — workspaceFolder = /. Поставьте /workspace и остановите бесконечное индексирование.
VS Code devcontainers, Pylance зависает на «Loading information», и исправление в одной строке
Автодополнение, переход к определению и подсказки при наведении — базовая «эргономика» для разработчика. Когда всё это ломается внутри devcontainer, продуктивность резко проседает. Частый симптом — Pylance бесконечно показывает «Loading information», порты регулярно «переключаются», а объём RAM растёт до пика и затем резко падает, и так по кругу. Даже крошечный файл на Python может вызвать постоянное сообщение «Enumeration of workspace», при том что ноутбуки и скрипты продолжают выполняться без сбоев.
Хорошая новость: такое поведение нередко сводится к одной неверной настройке. Если рабочее пространство указано как корень контейнера, языковой сервер начинает обходить всю файловую систему вместо того, чтобы ограничиться вашей папкой с кодом.
Минимальная воспроизводимая конфигурация
Проблему способен воспроизвести даже самый маленький скрипт:
label = 'test'
print(label)
Типичный devcontainer, который запускает бесконечное индексирование, объявляет рабочее пространство равным корню контейнера. Ниже — показательная конфигурация в паре с docker-compose. Идентификаторы приведены для примера, поведение останется тем же.
{
  "name": "TorchDev",
  "dockerComposeFile": "./docker-compose.yaml",
  "service": "gpubox",
  "workspaceFolder": "/",
  "shutdownAction": "stopCompose",
  "customizations": {
    "vscode": {
      "extensions": [
        "ms-toolsai.jupyter",
        "ms-python.vscode-pylance",
        "ms-python.python"
      ]
    }
  }
}
services:
  gpubox:
    container_name: gpubox
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "8888:8888"
    environment:
      - JUPYTER_TOKEN=easy
    working_dir: /
    volumes:
      - ../:/workspace
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              capabilities: ["gpu"]
              device_ids: ["0"]
    command: sleep infinity
Что происходит на самом деле
Когда рабочее пространство установлено в /, редактор воспринимает всю файловую систему контейнера как проект. Pylance пытается перечислить это дерево целиком. Результат ровно тот, который вы видите: бесконечное «Loading information», повторяющееся «Enumeration of workspace» и всплески памяти со сбросами, когда сервер перезапускается и пытается снова.
Ограничьте рабочее пространство только той папкой, которая вам действительно нужна. Измените devcontainer.json так, чтобы рабочим пространством VS Code был путь /workspace (место, где лежит код), а не /.
Решение
Укажите рабочее пространство на смонтированную директорию с кодом, а не на корень контейнера. В этой конфигурации код находится в /workspace, значит именно этот путь и должен быть рабочим пространством.
{
  "name": "TorchDev",
  "dockerComposeFile": "./docker-compose.yaml",
  "service": "gpubox",
  "workspaceFolder": "/workspace",
  "shutdownAction": "stopCompose",
  "customizations": {
    "vscode": {
      "extensions": [
        "ms-toolsai.jupyter",
        "ms-python.vscode-pylance",
        "ms-python.python"
      ]
    }
  }
}
Больше ничего менять не требуется. Это не даёт редактору ползать по всему контейнеру и ограничивает работу языкового сервера файлами вашего проекта.
Почему это важно
Функции языка в Python, Jupyter и Pylance опираются на отзывчивое индексирование кодовой базы. Когда в рабочее пространство попадает вся файловая система, даже простейшие проекты превращаются в тяжёлые сканы с перезапусками. Правильное сужение области восстанавливает мгновенные подсказки при наведении, предсказуемое автодополнение и стабильное потребление ресурсов.
Практические выводы
Держите рабочее пространство узким и явно заданным. Примонтируйте исходники в отдельный каталог внутри контейнера и направьте редактор именно туда. Если при маленьком проекте замечаете «Enumeration of workspace», проверьте, что рабочее пространство не установлено в /. Часто достаточно лишь точного пути к рабочей папке, чтобы вернуть Pylance в норму.
Статья основана на вопросе с StackOverflow от I'mStuckOnLine911 и ответе Philipp1297.