Комментарии (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