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 в норму.