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.