← Назад к вопросам

Что такое Pylance?

1.0 Junior🔥 121 комментариев
#DevOps и инфраструктура#Django

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Pylance — Python Language Server для VS Code

Pylance — это мощный Language Server Protocol (LSP) реализация для Python, разработанная Microsoft. Это расширение VS Code, которое обеспечивает интеллектуальное автодополнение, анализ кода и диагностику ошибок в реальном времени.

Что такое Language Server Protocol?

LSP — это протокол, который позволяет редактору общаться с сервером анализа кода. Вместо того чтобы каждый редактор (VS Code, Sublime, Vim) писал свой анализатор для каждого языка, используется единый сервер:

Применение: Language Server <-> Protocol <-> Editor
Примеры: Pylance <-> LSP <-> VS Code
         clangd <-> LSP <-> Neovim
         gopls <-> LSP <-> Emacs

Основные возможности Pylance

1. Intellisense (Интеллектуальное автодополнение)

import os
os.  # Pylance покажет все доступные методы и атрибуты

# Типизация на лету:
from typing import List

def process_items(items: List[str]) -> None:
    for item in items:  # Pylance знает, что item это str
        item.  # Покажет методы строки

2. Type Checking (Проверка типов)

Pylance может работать в двух режимах:

# Режим 1: basic (по умолчанию) — мягкие проверки
def greet(name: str) -> str:
    return f"Hello, {name}"

greet(123)  # Предупреждение (warning)

# Режим 2: strict — строгие проверки
# greet(123)  # Ошибка (error)

В VS Code в settings.json:

{
  "python.linting.enabled": true,
  "python.linting.pylanceEnabled": true,
  "python.analysis.typeCheckingMode": "basic"
}

Моды проверки:

  • off — не проверяет типы
  • basic — базовые проверки (по умолчанию)
  • standard — более строгие
  • strict — максимально строгие

3. Hover Information (Информация при наведении)

from datetime import datetime

def process_date(date: datetime) -> str:
    # При наведении курсора на "datetime" покажет:
    # class datetime.datetime(tzinfo=None)
    # Документация и сигнатура конструктора
    pass

4. Go to Definition & References (Переход к определению)

# Ctrl+Click на функцию/класс → переход к определению
# Ctrl+Shift+H → показать все использования

class User:
    def __init__(self, name: str):
        self.name = name

user = User("John")  # Ctrl+Click → к классу User
user.name  # Ctrl+Shift+H → все места использования атрибута

5. Diagnostics (Диагностика ошибок)

Pylance автоматически обнаруживает:

# Ошибка 1: неправильный тип аргумента
len(123)  # Expected Sized, received Literal[123]

# Ошибка 2: отсутствующий модуль
import nonexistent_module  # reportMissingImports

# Ошибка 3: неиспользуемая переменная
unused_var = 10  # reportUnusedVariable

# Ошибка 4: неопределённые переменные
print(undefined_var)  # reportUndefinedVariable

Установка и настройка

Шаг 1: Установить расширение

В VS Code: Extensions → поиск "Pylance" → Install (от Microsoft)

Шаг 2: Конфигурировать в settings.json

{
  "python.defaultInterpreterPath": "/path/to/venv/bin/python",
  "python.linting.enabled": true,
  "python.analysis.typeCheckingMode": "basic",
  "python.analysis.diagnosticSeverityOverrides": {
    "reportGeneralTypeIssues": "warning",
    "reportOptionalMemberAccess": "warning",
    "reportOptionalSubscript": "warning",
    "reportPrivateImportUsage": "warning"
  },
  "python.analysis.exclude": ["**/node_modules", "**/__pycache__"],
  "python.analysis.extraPaths": ["/custom/path"]
}

Шаг 3: Выбрать интерпретатор

# Ctrl+Shift+P → Python: Select Interpreter
# Выбираем venv или глобальный интерпретатор

Работа с типами

from typing import Optional, List, Dict, Union

# Pylance помогает с типизацией
def fetch_user(user_id: int) -> Optional[Dict[str, str]]:
    """Возвращает словарь или None."""
    if user_id < 0:
        return None
    return {"id": str(user_id), "name": "John"}

user = fetch_user(1)
if user:  # Type narrowing: Pylance знает, что user это Dict
    print(user["name"])

# Type narrowing работает и с isinstance:
value: Union[int, str] = 42
if isinstance(value, str):  # Pylance знает, что value это str
    print(value.upper())

Сравнение с альтернативами

ИнструментСкоростьТочностьFeaturesЛучше для
PylanceОчень быстроВысокаяВсеVS Code
PyrightБыстроОчень высокаяВсе (свой Python)CLI, CI/CD
MyPyМедленноСредняяТипыCLI, CI/CD
PylintСреднееСредняяЛинтерКачество кода
PyCharmМедленноОчень высокаяВсе + IDEПолноценная IDE

Практический пример проекта

# app.py
from typing import List, Optional
from dataclasses import dataclass

@dataclass
class Product:
    id: int
    name: str
    price: float

def get_total_price(products: List[Product]) -> float:
    """Pylance проверит типы и покажет ошибки."""
    total = 0
    for product in products:
        # Type hint: product автоматически имеет тип Product
        total += product.price  # Pylance знает, что это float
    return total

# Использование:
products = [
    Product(1, "Laptop", 999.99),
    Product(2, "Mouse", 29.99),
]

total = get_total_price(products)
print(f"Total: ${total:.2f}")  # Pylance знает, что total это float

# Ошибка будет обнаружена:
# get_total_price("invalid")  # Type error: Expected List[Product]

Интеграция с VSCode Debugger

Pylance отлично работает с встроенным отладчиком:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Python: Current File",
      "type": "python",
      "request": "launch",
      "program": "${file}",
      "console": "integratedTerminal"
    }
  ]
}

Совет для production проектов

# Используй Pylance в VS Code для разработки
# Используй Pyright в CI/CD для проверки
pip install pyright
pyright --outputjson > type_check_report.json

Ключевые отличия от других инструментов

  • Быстрее всех благодаря закрытому исходному коду и оптимизациям
  • Лучше с современными типами — полная поддержка Python 3.10+ |, TypeVar, Generics
  • Работает в реальном времени — нет задержек как в PyCharm
  • Бесплатно в VS Code Community Edition
Что такое Pylance? | PrepBro