LINUX.ORG.RU

Настройка VS Code для работы с Python

 , , , ,

Настройка VS Code для работы с Python

3

2

VS Code — это мощный инструмент для разработки на Python, который легко настроить для работы с такими полезными утилитами, как pylint, black и isort. Эти инструменты помогут поддерживать чистоту кода, единый стиль и упорядоченность импортов. Для поиска и устранения ошибок пригодится встроенный отладчик debugpy, обеспечивающий удобный процесс дебага. В дополнение ко всему можно подключить искусственного помощника для ускорения написания кода. В этой статье мы рассмотрим установку и настройку этих инструментов, а также их интеграцию с VS Code.

Проблема: многие тупо ставят нужные инструменты и расширения, но забивают на настройку этих самых инструментов. Есть люди, которые не могут настроить VS Code, поэтому называют его «блокнотом», но сабж — это конструктор, и расширения как кубики из которых ты можешь собрать самолет или ракету, либо кривую башню, которая тут же развалится. Все зависит лишь от того насколько у тебя кривые руки.

Установка необходимых инструментов

В Arch Linux все необходимые инструменты можно поставить из стандартного репозитория:

yay -S python-{black,pylint,isort,debugpy}

Альтернативный способ — это использование pipx.

pipx — это инструмент для установки исполнямых файлов из пакетов Python локально для пользователя в виртуальные окружения. При установке исполняемые файлы создаются в ~/.local/bin (сами виртуальные окружения лежат в ~/.local/pipx/venvs). Это предпочтительный способ установки различных линтеров и инструментов для форматирования кода в дистрибутивах, где этих пакетов нет в стандартном репозитории. Зачем виртуальные окружения? — Чтобы избежать конфликта версий зависимостей для утилит, такое редко, но бывает, поэтому иногда и в Arch приходится что-то ставить через pipx. Отметьте это у себя на подкорке [головного мозга], чтобы потом судорожно не искать решение проблемы, либо сразу все ставьте этим способом.

Также отмечу, что во многих дистрибутивах ничего нельзя поставить через системный pip (если хочется, то используйте asdf-vm или pyenv), так разрабы заботятся о том, чтобы система не утонула в осиротевших пакетах — зависимостях зависимостей, которыми не умеет управлять pip, а так же чтобы система, которая активно использует python, не превратилась в тыкву.

Установка pipx через пакетный менеджер в Arch Linux:

yay -S python-pipx

Установка через pip в Ubuntu/Linux Mint и других системах:

python3 -m pip install --user pipx
python3 -m pipx ensurepath

Установка pylint, black, isort и debugpy с помощью pipx:

pipx install pylint black isort debugpy

Убедитесь, что ~/.local/bin добавлен в PATH.

Описание инструментов

  1. pylint — это статический анализатор кода для Python. Он помогает находить ошибки и предупреждения в коде, такие как несоответствие стиля, неправильное использование переменных, некорректные импортированные модули и другие проблемы, которые могут возникнуть во время разработки. Подробнее на странице проекта Pylint.

  2. black — это инструмент для автоматического форматирования Python-кода. Он придерживается строгого стиля кодирования (PEP8) и всегда приводит код к единому виду. Black особенно полезен в больших проектах, где несколько разработчиков работают с одним кодом. Подробнее на странице проекта Black.

  3. isort — это инструмент для автоматической сортировки импортов в Python. Он организует импорты в логические группы (стандартные библиотеки, сторонние библиотеки, локальные импорты) и делает это совместимо с black, что предотвращает конфликты в форматировании. Подробнее на странице проекта isort.

  4. debugpy — это питоновский «стандартный» отладчик. Настраивать его не надо как и разбираться в его работе. То что этот проект от M$ (как и сам VS Code) некоторых может заставить отложить кирпичи, но в мире разработки за опенсорцем давно стоят корпорации зла. Если забыть его поставить, то VS Code при наличии соответствующего расширения сам предложит его установить. Подробнее в репозитории debugpy.

Настройка Pylint

Pylint можно настроить как глобально, так и для конкретного проекта. Создайте в корне пользовательского каталога либо проекта файл .pylintrc:

[MASTER]
# Максимальная длина строки
max-line-length=80

# Путь к файлам, которые нужно игнорировать
ignore=migrations

# Дополнительные директории, которые игнорируются
ignore-patterns=__pycache__,migrations

[MESSAGES CONTROL]
# Отключение раздражающих проверок
disable=
    C0103,  # Не соответствует соглашению именования (например, переменные типа x, y)
    C0114,  # Модуль без docstring
    C0115,  # Класс без docstring
    C0116,  # Функция/метод без docstring
    C0301,  # Строка слишком длинная
    C0330,  # Неправильное выравнивание продолжений строк
    C0413,  # Неправильное расположение импортов
    R0801,  # Дублирующийся код
    R0903,  # Класс слишком прост (например, класс с одним методом)
    R0913,  # Слишком много аргументов у функции
    R0914,  # Слишком много локальных переменных
    R0915,  # Слишком большая функция
    W0105,  # Неиспользуемый docstring
    W0511,  # Комментарий TODO
    W0611,  # Неиспользуемый импорт
    W0613,  # Неиспользуемый аргумент функции
    W0614,  # Неиспользуемый импорт из *
    W0621,  # Переопределена внешняя переменная
    W0703,  # "Голое" исключение (catch-all except)
    W1203,  # Использование f-строк при логгировании
    W1514,  # Не задана кодировка


[FORMAT]
# Число пробелов в табуляции
indent-string='    '  # 4 пробела

# Максимальная длина строки
max-line-length=80

[DESIGN]
# Максимальное количество аргументов для функции
max-args=5

[TYPECHECK]
# Настройка путей для поиска модулей
init-import=no

Подробнее на странице настройки Pylint.

Настройка Black

Black можно настроить через файл pyproject.toml (глобально настройки хранятся в ~/.config/black/pyproject.toml):

[tool.black]
line-length = 80
skip-string-normalization = true
skip-magic-trailing-comma = true

exclude = '''
/(
    \.git
  | \.venv
  | __pycache__
  | migrations
)/
'''

Подробнее на странице настройки Black.

Настройка isort

Настройки isort можно добавить в pyproject.toml в корне проекта:

[tool.isort]
profile = "black"
line_length = 80
multi_line_output = 3
include_trailing_comma = true

Для глобальной настройки можно создать файл ~/.isort.cfg:

[settings]
profile = black
line_length = 80
multi_line_output = 3
include_trailing_comma = true
force_grid_wrap = 0
combine_as_imports = true
default_section = THIRDPARTY
skip_gitignore = true

Подробнее на странице настройки isort.

Установка расширений для VS Code

Все необходимые расширения можно установить разом, не пытаясь отыскать их в каталоге:

xargs -n1 code --install-extension <<< "ms-python.black-formatter ms-python.debugpy ms-python.isort ms-python.pylint ms-python.python ms-python.vscode-pylance Blackboxapp.blackbox"

Описание расширений:

  1. Black Formatter — это расширение для автоматического форматирования Python-кода с использованием black.
  2. Debugpy — отладчик для Python в VS Code.
  3. Isort — расширение для сортировки импортов с использованием isort.
  4. Pylint — расширение для статического анализа Python-кода с использованием pylint.
  5. Python — официальное расширение для Python от Microsoft.
  6. Pylance — быстрое и мощное расширение для анализа кода Python на основе сервера языка (речь про протокол LSP). Через него реализуется автодополнение кода, проверка типов. Он не требует установки каких-то пакетов Python, все необходимое идет с расширением.
  7. Blackbox AI Code Generation… — это тот самый [де-]генеративный AI, который может писать за вас код либо искать ответы вместо гугления с хождением по ссылкам, что ооооочень сильно экономит время. В отличии от ChatGPT данный инструмент не имеет ограничений по количеству запросов и доступу из России.

Во избежание конфликтов отключите другие расширения для проверки синтаксиса и форматирования.

Настройки VS Code

Отредактируйте файл settings.json:

{
  "[python]": {
    "editor.formatOnType": true,
    "editor.wordBasedSuggestions": "off",
    "editor.defaultFormatter": "ms-python.black-formatter",
    "editor.tabSize": 4
  },
  // Просто настройки для примера
  "editor.codeActionsOnSave": {
    "source.fixAll": "explicit",
    "source.organizeImports": "explicit"
  },
  "editor.formatOnSave": true,
  "editor.insertSpaces": true,
  "editor.rulers": [80, 88, 100],
  "editor.tabSize": 2,
  "editor.wordWrap": "on",
  "telemetry.telemetryLevel": "off",
  // ...
}

Как пользоваться отладчиком для тех кто в танке

Использование отладчика в Python с помощью VS Code становится интуитивно понятным и удобным благодаря интегрированной поддержке. Для начала, щелкните по иконке «Run and Debug» на боковой панели или нажмите Ctrl+Shift+D. Затем выберите «create a launch.json file» и добавьте конфигурацию для Python. После этого появится кнопка для запуска отладчика.

Теперь вы можете ставить точки остановки выполнения (красные точки), кликая ЛКМ слева от номера строки (Click to add a breakpoint). Запустите отладчик, и он остановится на каждой такой точке, позволяя вам проверять состояние переменных и выполнять выражения в консоли отладки. Вы сможете слева увидеть дерево со значениями переменных, просматривать шаг за шагом изменения его состояния, что значительно упрощает поиск и исправление ошибок.

Совет на все времена: пользуйтесь всегда английской версией программ

Заключение

Настройка pylint, black, isort и их интеграция с VS Code позволяет упростить процесс разработки, обеспечить единый стиль кодирования и улучшить читаемость кода. Эти инструменты помогут вам поддерживать ваш Python-код в порядке, минимизируя ошибки и гарантируя соответствие стандартам. И, конечно же, разработка крупных проектов без отладчика невозможна, а помощь искусственного интеллекта неоценима. Теперь можно приступать к разработке ботов для Telegram на Python за 500 рублей в свободное от школы время…



Проверено: cetjs2 ()
Последнее исправление: hobbit (всего исправлений: 31)

Ответ на: комментарий от rtxtxtrx

Ну почему же, интернет ведь может быть на других компьютерах в другом контуре защиты. Вот я и спрашиваю: как установить там где нет интернета? Что нужно вначале выкачать из интернета, скопировать на флешечку и перенести на компьютер где инета нет, и каким образом развернуть?

Вот, например, похожая задача:

Как в Dbeaver получить драйвера работы с БД на компьютере, отключенном от сети Интернет

Xintrea ★★★★★
()
Ответ на: комментарий от Xintrea

Расширения - это файлы с расширением .vsix, если он скачен локально, то его можно установить. Но как вообще это связано с темой?

rtxtxtrx
() автор топика
Ответ на: комментарий от enep

А как ты его ставил и откуда? Дебник с сайта скачал? В репозиториях дебиана все оскверненное, подвергнувшееся порче руками патчемакак с внесенными правками в исходники, дефолтные настройки и тд

rtxtxtrx
() автор топика
Ответ на: комментарий от enep

Так у тебя какой-то дебиан на аве… Ты не vscode поставил, а OSS Code, который выпотрошили и убрали поддержку маркетплейса от мелкомягких. Это такая же параша как Ungoogled Chromium, который не позволяет ставить расширения привычным способо.

Правильно вот так:

yay -S visual-studio-code-bin

А потом вырубить телеметрию

rtxtxtrx
() автор топика
Ответ на: комментарий от rtxtxtrx

файлы с расширением .vsix, если он скачен локально, то его можно установить. Но как вообще это связано с темой?

А установка через pip тоже никак с темой не связано?

Xintrea ★★★★★
()

Это знать надо, это классика (с) Пахом

Ну а после того как настрадались с настройкой этого добра… Можно перейти и к самому лучшему из того, что придумали для Pythonruff.

# Топовые дистры
yay -S ruff

# Всякие бубунты
pipx install ruff

Глобальный конфиг:

~/.config/ruff/ruff.toml

# https://docs.astral.sh/ruff/settings
line-length = 80
#indent-width = 2

[lint]
# Rules can be found here: https://docs.astral.sh/ruff/rules/
#select = ["E4", "E7", "E9", "F"]

# Fix all enabled rules when --fix is provided.
#fixable = ["ALL"]

# Disable fix for unused imports.
unfixable = ["F401"]

[lint.isort]
case-sensitive = true
combine-as-imports = true

[format]
docstring-code-format = true
docstring-code-line-length = 72

Отрубаем расширения pylint, black, isort — все это заменяет ruff! Дописываем в конфиг settings.json:

{
  "[python]": {
    "editor.formatOnType": true,
    "editor.wordBasedSuggestions": "off",
    "editor.tabSize": 4,
    "editor.defaultFormatter": "charliermarsh.ruff"
  },
  // ...
  "ruff.enable": true,
  "ruff.nativeServer": "on"
}

Если сломается ruff можно вернуться к black и pylint…

rtxtxtrx
() автор топика
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.