Python in Visual Studio Code
Working with Python in Visual Studio Code, using the Microsoft Python extension, is simple, fun, and productive. The extension makes VS Code an excellent Python editor, and works on any operating system with a variety of Python interpreters. It leverages all of VS Code’s power to provide auto complete and IntelliSense, linting, debugging, and unit testing, along with the ability to easily switch between Python environments, including virtual and conda environments.
This article provides only an overview of the different capabilities of the Python extension for VS Code. For a walkthrough of editing, running, and debugging code, use the button below.
Install Python and the Python extension
The tutorial guides you through installing Python and using the extension. You must install a Python interpreter yourself separately from the extension. For a quick install, use Python from python.org and install the extension from the VS Code Marketplace.
Note: To help get you started with Python development, you can use the Python profile template that includes useful extensions, settings, and Python code snippets.
Once you have a version of Python installed, select it using the Python: Select Interpreter command. If VS Code doesn’t automatically locate the interpreter you’re looking for, refer to Environments — Manually specify an interpreter.
You can configure the Python extension through settings. Learn more in the Python Settings reference.
Windows Subsystem for Linux: If you are on Windows, WSL is a great way to do Python development. You can run Linux distributions on Windows and Python is often already installed. When coupled with the WSL extension, you get full VS Code editing and debugging support while running in the context of WSL. To learn more, go to Developing in WSL or try the Working in WSL tutorial.
Run Python code
To experience Python, create a file (using the File Explorer) named hello.py and paste in the following code:
print("Hello World")
The Python extension then provides shortcuts to run Python code using the currently selected interpreter (Python: Select Interpreter in the Command Palette). To run the active Python file, click the Run Python File in Terminal play button in the top-right side of the editor.
You can also run individual lines or a selection of code with the Python: Run Selection/Line in Python Terminal command ( Shift+Enter ). If there isn’t a selection, the line with your cursor will be run in the Python Terminal. An identical Run Selection/Line in Python Terminal command is available on the context menu for a selection in the editor. The same terminal will be used every time you run a selection or a line in the terminal/REPL, until that terminal is closed. The same terminal is also used for Run Python File in Terminal. If that terminal is still running the REPL, you should exit the REPL ( exit() ) or switch to a different terminal before running a Python file.
The Python extension automatically removes indents based on the first non-empty line of the selection, shifting all other lines left as needed.
The command opens the Python Terminal if necessary; you can also open the interactive REPL environment directly using the Python: Start REPL command that activates a terminal with the currently selected interpreter and then runs the Python REPL.
For a more specific walkthrough and other ways of running code, see the run code tutorial.
Autocomplete and IntelliSense
The Python extension supports code completion and IntelliSense using the currently selected interpreter. IntelliSense is a general term for a number of features, including intelligent code completion (in-context method and variable suggestions) across all your files and for built-in and third-party modules.
IntelliSense quickly shows methods, class members, and documentation as you type. You can also trigger completions at any time with ⌃Space (Windows, Linux Ctrl+Space ) . Hovering over identifiers will show more information about them.
Enhance completions with AI
GitHub Copilot is an AI-powered code completion tool that helps you write code faster and smarter. You can use the GitHub Copilot extension in VS Code to generate code, or to learn from the code it generates.

GitHub Copilot provides suggestions for languages beyond Python and a wide variety of frameworks, including JavaScript, TypeScript, Ruby, Go, C# and C++.
You can learn more about how to get started with Copilot in the Copilot documentation.
Linting
Linting analyzes your Python code for potential errors, making it easy to navigate to and correct different problems.
The Python extension can apply a number of different linters including Pylint, pycodestyle, Flake8, mypy, pydocstyle, prospector, and pylama. See Linting.
Debugging
No more print statement debugging! VS Code comes with great debugging support for Python, allowing you to set breakpoints, inspect variables, and use the debug console for an in-depth look at how your program is executing step by step. Debug a number of different types of Python applications, including multi-threaded, web, and remote applications.
For more specific information on debugging in Python, such as configuring your launch.json settings and implementing remote debugging, see Debugging. General VS Code debugging information is found in the debugging document.
Additionally, the Django and Flask tutorials provide examples of how to implement debugging in the context of web applications, including debugging Django templates.
Environments
The Python extension automatically detects Python interpreters that are installed in standard locations. It also detects conda environments as well as virtual environments in the workspace folder. See Configuring Python environments.
The current environment is shown on the right side of the VS Code Status Bar:

The Status Bar also indicates if no interpreter is selected:

The selected environment is used for IntelliSense, auto-completions, linting, formatting, and any other language-related feature. It is also activated when you run or debug Python in a terminal, or when you create a new terminal with the Terminal: Create New Terminal command.
To change the current interpreter, which includes switching to conda or virtual environments, select the interpreter name on the Status Bar or use the Python: Select Interpreter command.

VS Code prompts you with a list of detected environments as well as any you’ve added manually to your user settings (see Configuring Python environments).
Jupyter notebooks
To enable Python support for Jupyter notebook files ( .ipynb ) in VS Code, you can install the Jupyter extension. The Python and Jupyter extensions work together to give you a great Notebook experience in VS Code, providing you the ability to directly view and modify code cells with IntelliSense support, as well as run and debug them.

You can also convert and open the notebook as a Python code file through the Jupyter: Export to Python Script command. The notebook’s cells are delimited in the Python file with #%% comments, and the Jupyter extension shows Run Cell or Run Below CodeLens. Selecting either CodeLens starts the Jupyter server and runs the cell(s) in the Python interactive window:

You can also connect to a remote Jupyter server to run your notebooks. For more information, see Jupyter support.
Testing
The Python extension supports testing with Python’s built-in unittest framework and pytest.
In order to run tests, you must enable one of the supported testing frameworks in the settings of your project. Each framework has its own specific settings, such as arguments for identifying the paths and patterns for test discovery.
Once the tests have been discovered, VS Code provides a variety of commands (on the Status Bar, the Command Palette, and elsewhere) to run and debug tests. These commands also allow you to run individual test files and methods
Configuration
The Python extension provides a wide variety of settings for its various features. These are described on their relevant topics, such as Editing code, Linting, Debugging, and Testing. The complete list is found in the Settings reference.
Python profile template
Profiles let you quickly switch your extensions, settings, and UI layout depending on your current project or task. To help you get started with Python development, you can use the Python profile template, which is a curated profile with useful extensions, settings, and snippets. You can use the profile template as is or use it as a starting point to customize further for you own workflows.
You select a profile template through the Profiles > Create Profile. dropdown:

Once you select a profile template, you can review the settings and extensions, and remove individual items if you don’t want to include them in your new Profile. After creating the new profile based on the template, changes made to settings, extensions, or UI are persisted in your profile.
Other popular Python extensions
The Microsoft Python extension provides all of the features described previously in this article. Additional Python language support can be added to VS Code by installing other popular Python extensions.
- Open the Extensions view ( ⇧⌘X (Windows, Linux Ctrl+Shift+X ) ).
- Filter the extension list by typing ‘python’.
The extensions shown above are dynamically queried. Click on an extension tile above to read the description and reviews to decide which extension is best for you. See more in the Marketplace.
Next steps
- Python Hello World tutorial — Get started with Python in VS Code.
- Editing Python — Learn about auto-completion, formatting, and refactoring for Python.
- Basic Editing — Learn about the powerful VS Code editor.
- Code Navigation — Move quickly through your source code.
- Django tutorial
- Flask tutorial
Visual Studio Code
Visual Studio Code (VS Code) — это редактор кода для разных языков программирования. Он относительно немного весит, гибкий и удобный. В нем можно писать, форматировать и редактировать код на разных языках.

Освойте профессию «Веб-разработчик»
VS Code не стоит путать с Visual Studio — это IDE, очень мощная и масштабная, но одновременно с этим тяжеловесная. Названия похожи, потому что у обоих средств разработки один и тот же создатель, но продукты разные по своей сути. VS Code меньше весит, проще в освоении и подходит в том числе для начинающих разработчиков.
Редактор кода существует для всех популярных операционных систем: Windows, Linux и macOS. Он бесплатный, в отличие от большинства версий «старшего брата» Visual Studio.
Кто пользуется Visual Studio Code
С VS Code работают программисты на разных языках. Например, им активно пользуются веб-разработчики, пишущие на HTML/CSS, JavaScript, PHP. Но редактор поддерживает намного большее количество языков: Python, Go, Ruby, C#, TypeScript и так далее. Он работает и с расширениями и фреймворками для популярных языков — например, с React JS и Vue.js, с языками стилей SCSS и LESS, которые дополняют CSS.
В теории пользоваться VS Code может разработчик практически на любом из современных языков. Но на практике его применяют там, где не нужны мощности полноценной IDE.
Профессия / 12 месяцев
Веб-разработчик с нуля
Создавайте нужные любому бизнесу сервисы

Для чего нужен VS Code
VS Code позволяет легко писать, форматировать и редактировать код на разных языках. С его помощью можно быстро создать проект и структуру файлов в нем, он подсвечивает синтаксис кода и помогает автоматически править ошибки. В нем есть возможности для отладки и запуска кода на некоторых языках.
Редактор легко расширяется, поэтому к перечисленным функциям можно добавить новые — достаточно просто скачать нужное дополнение из официального каталога. Дополнения тоже распространяются бесплатно.
Где скачать и как установить VS Code
Скачивание
Visual Studio Code можно бесплатно скачать с официального сайта и установить как обычную программу. Надо просто выбрать версию: для Windows, Linux или macOS.

На главной странице официального сайта есть большая кнопка для скачивания в оптимальной конфигурации — она определяется автоматически в зависимости от параметров вашей системы. Для альтернативных вариантов загрузки есть ссылки внизу.
Если устанавливать редактор пока не хочется, а желание попробовать есть, можно воспользоваться онлайн-версией. Она не такая удобная и у человека меньше контроля над ней, но для старта ее может хватить. Но VS Code способен серьезно нагружать браузер, особенно если там открыто что-то ресурсоемкое.
Установка
После загрузки программы нужно запустить инсталлятор и следовать инструкциям на экране. Далее программа установится на ПК.

Запуск на слабых ПК
После завершения установки можно приступить к запуску программы. Однако стоит отметить, что не на каждом компьютере она запустится успешно. Это обусловлено тем, что программа требует значительных вычислительных ресурсов. Из-за этого на слабой машине возможно возникновение такой ситуации: вместо обычного интерфейса программы появляется лишь черный экран, и процессор начинает работать на полную мощность. Тем не менее, существует решение — необходимо открыть контекстное меню ярлыка программы, и в поле пути к исполняемому файлу добавить следующий флаг:
--disable-gpu.
Установка русского языка
Для более удобного ознакомления можно установить русский язык интерфейса. Для этого выполните следующие шаги:

- Щелкните на значке расширений в поле поиска;
- Начните вводить «russian» и дождитесь появления пакета «Russian Language Pack for Visual Studio Code»;
- После этого нажмите кнопку Установить. Далее программа запросит перезапуск.
Теперь интерфейс программы стал намного более понятным на русском языке. Однако, если вы хорошо владеете английским языком, то переход на русский язык не является обязательным. Это позволит вам в случае возникновения каких-либо проблем быстрее находить решения в сети, так как большинство ресурсов и инструкций доступны именно на английском языке.

Интерфейс

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

Одновременно в VS Code можно открыть несколько файлов в разных вкладках. Экран рабочей области можно разделить на части, чтобы человек видел несколько файлов одновременно. Как в операционной системе, когда открыто несколько окон программ: одно справа, другое слева. Со всеми открытыми файлами можно работать.
Настройка Visual Studio Code
Для доступа к настройкам графического редактора можно воспользоваться сочетанием клавиш Ctrl+, или перейти по пути File → Preferences → Settings.

Затем можно переходить к настройке различных категорий параметров вручную. Чтобы избежать переключения между вкладками, нужные параметры можно просто вводить в строку поиска.
Другой метод настройки Visual Studio Code — редактирование файла settings.json. Этот способ позволяет тонко настраивать программу, но требует определенных навыков. Начинающим лучше избегать этот способ.
Новичкам в разработке не стоит слишком сильно менять настройки Visual Studio Code. При возникновении проблем и поиске решений в сети, советы чаще всего будут предоставлены для стандартных настроек, что может вызвать путаницу.
Visual Studio Code предоставляет ряд полезных настроек для автоматизации рабочего процесса:
- Автосохранение: Найти параметр «Files: Auto Save». Изменить на «afterDelay» и задать временной интервал — файлы будут автоматически сохраняться через заданный промежуток времени.
- Размер шрифта: Параметр «Font Size». По умолчанию 14, но его можно изменить на более удобный.
- Форматирование кода: Параметр «Format On Paste». Код будет автоматически форматироваться при вставке, помогая избежать проблем с лишними отступами.
- Удаление конечных пробелов: Параметр «Trim Trailing Whitespace». При сохранении документов автоматически удаляются пробелы в конце строк. Это помогает убрать лишние символы и соответствовать стандартам кодирования.
Также можно изменить цветовую схему интерфейса. Для этого нажмите CTRL+SHIFT+P, введите theme и выберите Preferences: Color Theme. Вас встретит список доступных тем, из которых можно выбирать.
Возможности Visual Studio Code
Написание и редактирование кода. Первое и главное назначение редактора — писать исходный код на каком-то из языков программирования, редактировать и сохранять его. Так же как редакторы текста оснащены функциями для форматирования контента, редактор кода позволяет структурировать и форматировать программы. Например, он подсвечивает синтаксис, выделяет ошибки, автоматически расставляет отступы. В нем есть и автодополнение: если ввести первые несколько букв команды, он предложит варианты, как можно ее закончить. В VS Code есть целая система для помощи в редактировании кода, ее компоненты сгруппированы под общим названием IntelliSense.
Автоматическое редактирование. Редактирование и исправление кода в VS Code можно автоматизировать. Существуют специальные плагины и расширения для редактора, которые автоматически исправляют мелкие ошибки в программе: неправильные отступы, именование, несоответствие стилю кода и так далее. Кстати, стиль кода можно задать в настройках. Конечно, сложную ошибку такой модуль не исправит: он не поймет, как это можно сделать. Но для устранения мелких недочетов возможность удобная.
Поиск, вставка и другое. Среди возможностей Visual Studio Code — быстрая навигация по документу и его редактирование. Например, строка поиска поддерживает в том числе регулярные выражения — формулы для разных текстовых сочетаний. С редактированием тоже удобно: можно написать сокращенную формулу той или иной команды, и редактор достроит ее сам. А можно, например, выделить код и закомментировать его одним сочетанием клавиш.

Станьте Frontend-разработчиком
и создавайте интерфейсы сервисов, которыми пользуются все
Контроль версий. VS Code «из коробки» поддерживает систему контроля версий Git. Прямо из редактора можно закоммитить изменения или откатить коммит, добавить к нему комментарий или отправить в удаленный репозиторий. Для этого не нужно входить в консоль и набирать команды: все делается через визуальный интерфейс. Сделать коммит можно в несколько кликов в специальной боковой панели.
Установка дополнений. Одна из особенностей VS Code — он очень легко расширяется. Прямо из редактора можно перейти в каталог расширений и дополнений, найти в поиске то, что вам нужно, и установить. Так подключаются поддержка других языков, плагины для автоматического исправления, конфигураторы и много чего еще. Благодаря легкой расширяемости VS Code можно полностью настроить под себя и свои нужды.
Запуск кода. Изначально редактор позволяет запускать код только для малого количества языков. Но к нему есть дополнения, которые открывают такую возможность и для других. Чтобы воспользоваться ей, нужно установить соответствующее расширение и перезагрузить VS Code. После этого в интерфейсе редактора должны появиться кнопки для сборки и запуска. Кстати, изначально в нем есть целая вкладка под названием «Запуск и отладка».
Помощь в отладке. В VS Code есть встроенный отладчик для языка JavaScript и основанных на нем технологий, таких как TypeScript. Для других языков понадобится устанавливать расширение. Но в любом случае возможность интерактивной отладки в редакторе есть, и это удобно, потому что раньше так «умели» делать только IDE. Интерактивная отладка помогает пошагово выполнять код и на каждом шаге просматривать, как изменяются данные. Так легче обнаружить и устранить ошибку.
Горячие клавиши
Горячие клавиши позволяют применять те или иные функции, не заходя в меню. Достаточно просто нажать нужное сочетание на клавиатуре. В VS Code таких клавиш много, и их можно перенастроить под свои вкусы — как вам удобнее.
| Горячая клавиша | Действие |
|---|---|
| Ctrl + N | Создать новый файл |
| Ctrl + O | Открыть существующий файл |
| Ctrl + S | Сохранить файл |
| Ctrl + Shift + S | Сохранить файл как |
| Ctrl + Z | Отменить последнее действие |
| Ctrl + Shift + Z | Повторить отменённое действие |
| Ctrl + X | Вырезать выделенный текст |
| Ctrl + C | Копировать выделенный текст |
| Ctrl + V | Вставить скопированный/вырезанный текст |
| Ctrl + F | Найти текст в файле |
| Ctrl + H | Заменить текст в файле |
| Ctrl + D | Выделить следующее вхождение выделенного текста |
| Ctrl + / | Закомментировать/раскомментировать строку |
| Ctrl + Shift + K | Удалить текущую строку |
| Ctrl + Shift + L | Выделить все вхождения выделенного текста |
| Ctrl + Shift + O | Быстро перейти к символу |
| Ctrl + P | Быстро перейти к файлу |
| Ctrl + ` | Открыть/закрыть терминал |
| Ctrl + B | Показать/скрыть боковую панель |
| Ctrl + Shift + X | Открыть панель расширений |
| F12 | Перейти к определению |
| Ctrl + F12 | Показать список всех ссылок на текущий символ |
| Shift + F12 | Показать быстрый просмотр ссылок |
| Ctrl + F11 | Установить/снять точку останова |
| F5 | Запустить/перезапустить отладку |
| F9 | Установить/снять точку останова |
Вы можете настроить горячие клавиши в Visual Studio Code согласно своим предпочтениям, выбрав File (Файл) > Preferences (Настройки) > Keyboard Shortcuts (Горячие клавиши).
Установка плагинов
Плагины позволяют добавлять языки, отладчики и инструменты для поддержки рабочего процесса разработки.
Поиск плагинов
Расширения можно просматривать и устанавливать из самого приложения VS Code. Для этого нужно перейти в раздел Дополнения, либо воспользуйтесь значком в боковой панели, либо выберите команду Ctrl+Shift+X.

Каждое дополнение в данном списке сопровождается кратким описанием, указанием издателя, а также информацией о количестве загрузок и пятизвездочной шкале оценки. Вам предоставляется возможность выполнить клик по интересующему дополнению, чтобы перейти на страницу с подробностями, где можно узнать дополнительную информацию.
Установка дополнений
Для установки плагина, выберите кнопку Install (установить). После завершения установки кнопка Установить изменится на кнопку с изображением шестеренки Управление.
Возьмем, например, популярное дополнение TODO Highlight. Оно выделяет фрагменты текста вида ‘TODO:’ и ‘FIXME:’ в вашем исходном коде, чтобы помочь быстро обнаружить незавершенные участки.
В разделе Расширения (доступно по Ctrl+Shift+X) введите todo в поле поиска, чтобы отфильтровать результаты. Вы должны обнаружить дополнение в списке.

Помимо прочего, дополнение однозначно опознается по идентификаторам издателя. При выборе «TODO Highlight» откроется страница с подробностями, где можно найти идентификатор данного плагина, например, wayou.vscode-todo-highlight. Знание идентификатора дополнения полезно в случае с несколькими плагинами одинакового названия.
Чтобы увидеть «TODO Highlight» в действии, откройте любой файл с исходным кодом и добавьте текст ‘TODO:’. Вы увидите, что данный текст будет выделен:

Этот пример лишь один из способов установки и использования плагинов. В репозитории содержится множество расширений, поддерживающих сотни языков программирования и задач.
Выбор разнообразен: от полноценной поддержки языков, таких как Java, Python, Go и C++, до простых расширений, которые создают GUID, меняют цветовую тему или добавляют виртуальных питомцев в редактор.
На странице подробностей дополнения можно ознакомиться с README и изучить:
- Вкладки «Возможности» — список настроек, команд и горячих клавиш, языковых грамматик, отладчика и так далее.
- Вкладка «Изменения» — история изменений (CHANGELOG) репозитория дополнения, если она доступна.
- Вкладка «Зависимости» — перечисление зависимостей от других плагинов.
Преимущества Visual Studio Code
Простота освоения. У редактора интуитивно понятный интерфейс, его легко установить и настроить. А после этого им сразу можно начинать пользоваться. Единственной проблемой поначалу могут стать горячие клавиши и дополнительные настройки — они необычно организованы. Но со временем легко разобраться, особенно если вначале держать под рукой памятку или пользоваться туториалами.
Малый вес. По сравнению с IDE редактор быстро работает и мало весит, не так требователен к ресурсам компьютера. При этом он довольно функционален, а огромное количество расширений позволяет добавлять в него новые возможности.
Кроссплатформенность. Visual Studio Code есть для всех популярных операционных систем, так что с ним можно работать вне зависимости от ОС, которую вы предпочитаете. К тому же это позволяет быстрее и удобнее переносить проекты с одного устройства на другое.
Поддержка разных языков. Есть инструменты, которые предназначены специально для какого-то языка, например Python или C++. Visual Studio Code поддерживает огромное количество языков программирования, и они легко подключаются. Поэтому с его помощью можно вести проекты, написанные на нескольких языках одновременно.
Гибкость. У VS Code множество расширений и удобных функций. Помимо вещей, стандартных для редактора кода, вроде подсветки синтаксиса, он «умеет» много чего еще. Его можно легко и гибко настроить под себя в зависимости от потребностей разработчика и технологий, с которыми он работает.
Недостатки Visual Studio Code
Ограниченная функциональность. Конечно, это зависит от того, с чем сравнивать VS Code. По сравнению с рядом других редакторов он, наоборот, более функционален. Но если сравнивать с IDE — любой редактор проигрывает, так как возможности у него намного ниже.
А для некоторых языков возможности IDE критичны. Поэтому работать в редакторе кода для разработчиков на этих языках будет не очень удобно. Например, в VS Code есть модули для Java, но Java-разработчики все же предпочитают пользоваться специализированными средами. У них больше возможностей по работе со специфическими особенностями языка вроде перевода программы в байт-код.
Медленная работа. На старых компьютерах редактор может долго запускаться и работать медленнее. Особенно это характерно для устройств, где установлен жесткий диск HDD, а не твердотельный накопитель SSD, или мало оперативной памяти.
Так происходит из-за того, что VS Code написан на Electron — это фреймворк, который позволяет писать программы для ПК с помощью HTML/CSS и JavaScript. Внутри фреймворка – целый браузер, отвечающий за отображение HTML и CSS. Соответственно, написанные на Electron программы такие же ресурсоемкие, как обычные браузеры, а значит, на слабых устройствах могут работать медленно. Это справедливо и для VS Code.
Fullstack-разработчик на Python
Fullstack-разработчики могут в одиночку сделать IT-проект от архитектуры до интерфейса. Их навыки востребованы у работодателей, особенно в стартапах. Научитесь программировать на Python и JavaScript и создавайте сервисы с нуля.

Статьи по теме:
С чего лучше всего начать изучать программирование?
Начать изучение программирования можно с выбора языка программирования и платформы, на которой вы хотите писать программы. Например, если вы хотите начать с Python, то можете начать с изучения основ языка, таких как синтаксис, типы данных, условные операторы, циклы и функции. Если вы уже знакомы с языком, то можете перейти к изучению более сложных тем, таких как объектно-ориентированное программирование или базы данных.
Также важно выбрать среду разработки, которая будет наиболее удобна для вас. Некоторые из популярных сред разработки включают в себя IDLE (для Linux), Visual Studio Code (для Windows) и Eclipse (для Mac).
Кроме того, рекомендуется изучить основы алгоритмов и структур данных, чтобы понимать, как работает программа. Это поможет вам создавать более эффективные и оптимизированные программы.
Наконец, не забывайте практиковаться и создавать свои собственные проекты. Чем больше вы практикуетесь, тем лучше становитесь в программировании.
Как пользоваться VS Code в полную силу

Это небольшой туториал о настройке VS Code для работы с python. Здесь вы не увидите каких-то божественных откровений — тут будет просто мой опыт о том, как сделать свою работу/хобби немного комфортнее и почему я пришел именно к такой конфигурации.
Часть первая. «Мы строили строили и наконец построили!» (с) один очень мудрый ушастый персонаж
Мой путь к разработке начался через администрирование, и, как и любой админ, я сталкивался с необходимостью писать автоматизацию. Bash/python/powershell/go — это все типичные инструменты инженера. Но в большинстве своем мы пишем автоматизацию в vim/nano/notepad++. И на все рассказы про IDE я лишь пожимал плечами — «а мне то это зачем?». Но однажды появился проект на Python, где я стал писать код уже «в промышленных масштабах»… Результат предсказуем — я пересел на VS Code.
Почему он? Да все просто:
Я осознал прелесть линтера (линтер (linter) — это программа, которая автоматизирует «причёсывание» кода по определённым правилам), подсказки синтаксиса, и прочие прелести современных IDE.
Но разбираться в VS Code «все еще было некогда». И в один прекрасный момент за эту лень я поплатился сполна — у меня закрылся VScode с ошибкой и при запуске у меня открылось пустое окно. Это был шок. Привычка писать в пустых файлах, кое-как настроенные параметры запуска отладки, настройки linter-а и подсказок по синтаксису — все это в полной мере дало о себе знать. И в итоге было принято решение разобраться что тут к чему и как мне сохранить свои настройки.
В итоге мое изучение VS Code разделилось на три этапа:
- Единые настройки на все проекты.
С этого я начал, но очень быстро понял, что мне необходимо делать отдельные настройки для разных проектов. - Отдельные настройки под каждый проект.
Почти идеальный вариант, если бы не проблемы со сборкой некоторых специфических библиотек под MacOS. - Разработка в контейнерах.
Очень интересный вариант разработки, лично мне он показался очень удобным.
Немного о идеологии VS Code.
Из коробки VS Code можно назвать «весьма продвинутым блокнотом». В общем то так бы все и осталось, если бы не система плагинов — с их помощью можно превратить VS Code практически во что угодно.
Теперь немного теории, чтобы мы одинаково понимали используемые термины и у нас был единый контекст. Почему это в моем понимании важно? Да потому что я мучался с этим достаточно долго, пока не собрал свою порцию шишек и граблей.
Понятия:
- Workspace
В VS Code очень многое крутится вокруг такого понятия как Workspace. В заложенной логике Workspace — это папка с вашим проектом, область применение настроек и параметров запуска отладки.
Системные папки в Workspace и их назначение: - .vscode
Точка в начале — обязательна. В этой папке vscode ищет настройки окружения и запуска отладки для данного Workspace. - .devcontainer
Точка в начале — обязательна. В этой папке vscode ищет настройки контейнеров и Dockerfile для сборки для данного Workspace.
Область видимости настроек:
- User
Настройки сохраняются для конкретного пользователя - Workspace
Настройки сохраняются для конкретной области
Файлы и их назначение:
- %name%.code-workspace
Настройки для данного Workspace. Может содержать настройки плагинов, путей к интерпретатору и тому подобное. Удобно, можно передавать его другим. - launch.json
Настройка логики и параметров запуска отладки проекта. Может содержать несколько вариантов настройки для одного и того же проекта. - settings.json
Может содержать настройки плагинов, путей к интерпретатору и тому подобное. Переопределяет настройки из %name%.code-workspace. - devcontainer.json
Файл содержащий настройки процесса сборки контейнера и его содержимого
Что нужно для старта?
В целом все просто — надо поставить сам python, поставить нужные расширения и сделать настройки. Кажется, что все банально, но как обычно «дьявол кроется в деталях».
Настройка Python
Для того, чтобы начать разрабатывать на питоне с помощью VS Code надо сделать 3 вещи:
- Установить сами python (думаю с этим вы сами справитесь).
- Поставить набор плагинов для разработки (делается в самом VS Code, занимает минимум времени).
- Настроить различные дополнительные модули для более комфортной и качественной работы. Это:
- linter (я использую flake8).
- language server (настраивается в файле settings.json, я использую Pylance) (Вот тут неплохая статья описывающая что это и зачем это). Тут как раз обычно и скрыта вся магия.
- параметры запуска отладки (файл launch.json). Вторая часть магии.
Плагины, необходимых для работы с python-ом:
- Python Extension Pack (id — donjayamanne.python-extension-pack)
В этот плагин входит все, что нужно для разработки на python - Dev Containers (id — ms-vscode-remote.remote-containers)
Этот плагин нужен для работы в контейнерах
Настройка удаленной разработки
Об этом я бы хотел тоже упомянуть, так как это очень удобная история. Есть такой набор плагинов от компании Microsoft — Remote Development (id — ms-vscode-remote.vscode-remote-extensionpack). Туда входят:
- Remote — Tunnels
Назначение этого плагина не знаю, не разбирался - Dev Containers
Этот плагин позволяет нам разрабатывать и/или отлаживать код в контейнерах. Обязателен для установки, если хотите работать в контейнерах. - Remote — SSH
Этот плагин предназначен для удаленной разработки с подключением к удаленному хосту по ssh. Причем вы можете не только редактировать файлы или запускать команды, но и заниматься полноценной разработкой с отладкой и всем прочим. Проблема с сохранением файлов, на которых нет прав, может решить плагин sudo (Save as Root in Remote — SSH, id yy0931.save-as-root). - WSL
Этот плагин очень поможет пользователям Windows — с его помощью можно разрабатывать в среде полноценного Linux, подключаясь к нему через WSL.
Лирическое отступление. ‘Емае. Что ж я сделал то. ‘ (с) реклама из 90-тых.
Все было очень просто, пока репозиторий был один. Кое-как я настроил какие-то совсем базовые вещи и на этом успокоился. Проблемы этого подхода всплыли тогда, когда репозиториев стало три и в одном из них использовался не python а Go. Ну и конечно же по классике — я не использовал venv =)
Вот небольшой список тех проблем, которые я испытывал постоянно:
- Периодически отваливались импорты в python. Лечилось это переустановкой пакета и перезапуском приложения. (Да-да, это все еще было терпимо, так как происходило не часто)
- Запуск проектов был не самым простым делом, но я как настоящий самурай написал bash-скрипты для запуска. (Чего только не сделаешь, лишь бы не читать доки)
- Когда появился Go — на нем просто не работала отладка… В итоге отладкой я занимался в виртуалке…
Ну и добил меня случай, который я описал выше — я профукал настройки Workspace по дефолту.
И вот, мой дорогой читатель, сижу я перед ноутом, смотрю в пустую страницу VS Code и понимаю, что час настал.
Часть вторая. Single and multi-root workspace.
Как я уже говорил, Workspace в VS Code это по сути свое область видимости настроек. Осознав это, я с ужасом понял, что мою идеологию «одно окно — много проектов» можно похоронить. Но остатки надежды говорили, что я не один такой и возможно решение есть среди тысяч плагинов, которые есть для VS Code. Но все оказалось даже лучше, начиная с версии 1.18 этот функционал доступен из коробки. И тут у меня начал вырисовываться примерный план приведения в порядок моего рабочего места разработчика. Он был в целом прост:
- Сделать отдельную корневую папку для всех проектов.
- Каждый проект лежит в отдельной директории.
- Для каждого из проектов я сделаю свои отдельные настройки.
- Все общие настройки буду хранить в корневой общей папке.
Сказано — сделано. В итоге у меня появился такая структура каталогов:
Development ├───.vscode │ └───my_dev_env.code-workspace ├───First project │ ├───!env │ │ ├───prod.env │ │ └───dev.env │ ├───.vscode │ │ ├───launch.json │ │ └───settings.json │ └───app │ ├───file111.txt │ ├───file112.txt │ └───. ├───Second project │ ├───!env │ │ ├───prod.env │ │ └───dev.env │ ├───.vscode │ │ ├───launch.json │ │ └───settings.json │ └───app │ ├───file111.txt │ ├───file112.txt │ └───. └───Third project ├───!env │ ├───prod.env │ └───dev.env ├───.vscode │ ├───launch.json │ └───settings.json └───app ├───file111.txt ├───file112.txt └───.
Начнем по порядку:
-
Development/.vscode/my_dev_env.code-workspace.
тут лежат пути к папкам и общие настройки для всех Workspace. В этом файле мы определяем общие настройки на все проекты. Переопределить их можно с помощью локального файла с настройками — settings.json, он будет описан ниже. Пример файла (описание всех свойств даны в самом файле):
< // Список папок, которые должны попасть в вашу multi-root. // Пути можно использовать абсолютные, поэтому можно собирать // воедино папки из разных мест "folders": [ < "path": "/Development/First project" >, < "path": "/Development/Second project" >, < "path": "/Development/Third project" >], // Общие настройки. Они являются дефолтными для всех включенных директорий, // но могут переопределяться на уровне конкретной корневой папки проекта. // Тут собраны те, что использую я "settings": < "git.autofetch": true, // Включить или выключить периодический поиск изменений в удаленном // репозитории. В случае, если включено в VS Code в разделе работы // с git будет показывать сколько неполученных коммитов есть // в удаленном репозитории. "python.languageServer": "Pylance", // Выбор language server. У Python их несколько, с последнего времени // по дефолту используется Pylance. На мой взгляд лучше оставить его, // так как его делает Microsoft и он активно развивается. "python.defaultInterpreterPath": "/opt/homebrew/bin/python3.10", // Дефолтный путь для Питона "python.analysis.diagnosticMode": "openFilesOnly", // Выбор области, где производится анализ файлов на ошибки. // Я выбрал вариант "только открытые файлы" чтобы меньше логало "python.analysis.autoImportCompletions": true, // Включает автоматическое добавление импорта модуля, если его нет, // но в коде найдены на него ссылки "python.analysis.typeCheckingMode": "off", // Очень полезная, но очень суровая опция - включает проверку // соответствия типов для языкового движка Pylance. По сути попытка // сделать из Python типизированный язык. Доступные значения: // off: анализ проверки типа не проводится; производится диагностика // неразрешенных импортов/переменных // basic: Правила, не связанные с проверкой типов (все правила в off) // + базовые правила проверки типов // strict: все правила проверки типов с наивысшей серьезностью ошибки // (включая все правила в категориях off и basic) "python.analysis.inlayHints.variableTypes": true, // Анализирует ваши переменные и предлагает для них подходящие типы. // Так же позволяет двойным кликом добавить тип "python.analysis.inlayHints.functionReturnTypes": true, // Анализирует ваши функции и классы и предлагает подходящие типы // выходных данных. Так же дает подсказки, какой выходной тип вы получите "python.terminal.activateEnvironment": true, // Если в проекте найдено виртуальное окружение, то в терминале оно // будет автоматически активироваться при переходе в этот проект "python.linting.enabled": true, // Включает линтер для питона "python.linting.flake8Enabled": true, // Выбор каким линтером пользоваться. Я выбрал flake8. "python.linting.flake8Args": [ "--max-line-length=250", // "--ignore=E402,F841,F401,E302,E305", ], // Настройки flake8. Я лично выставил себе только увеличение максимальной // длинны строки - по дефолту 80, этого мало для меня "[python]": < // Настройка автоматического форматирования. Удобно тем, что при сохранении // автоматически приводит форматирование к правильному по мнению форматора виду "editor.defaultFormatter":"ms-python.python", // Выбор форматера "editor.formatOnSave": true, // Включает форматирование при сохранении "editor.codeActionsOnSave": < "source.organizeImports": true // Форматирует импорты. Могут быть проблемы, если импорты зависят друг от друга >, "files.exclude": < // Крайне полезная на мой взгляд функция - задается список файлов, которые // исключаются из показа в дереве каталогов. Отлично подходит для скрытия всяких // ненужных системных каталогов "**/.git": true, "**/__pycache__": true, "**/.DS_Store": true, "**/Thumbs.db": true >, "files.watcherExclude": < // еще одна крайне любопытная опция - за изменениями файлов из // этого списка VS Code не следит "**/.git/objects/**": true, "**/.git/subtree-cache/**": true, "**/node_modules/*/**": true, "**/.hg/store/**": true, "**/__pycache__/**": true, "**/.venv-*/**": true >, "files.enableTrash": false, // Включение/выключение корзины. Если False то файлы удаляются сразу же "cSpell.language": "en,ru", // Крайне полезный плагин и настройки - проверка орфографии. // Настоятельно рекомендую к установке "cSpell.words": [ // Тут список слов, которые мы добавили в исключения "Clickhouse", "fastapi", "jsonify", "loguru" ] > >
< "python.defaultInterpreterPath": "$/.venv-first-project/bin/python3.10", // Переопределяем путь к Python. Тут есть два интересных момента: // 1. используется переменная $ - она обозначает // корневую папку проекта // 2. Путь указывает сразу же в каталог с виртуальным окружением "python.envFile": "$/!env/dev.env", // Крайне полезная директива - она позволяет задать переменные окружения, // которые будут использоваться при запуске Python. Очень помогает при отладке // при pytest, которым нужны переменные из окружения для работы >
Файл launch.json нужен для настройки запуска отладки приложения. Оооо… Насколько же моя жизнь стала проще, когда я открыл для себя этот файл.
< // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ // Важно - можно делать сколько угодно наборов настроек отладки < "name": "First project - Dev", // Наименование набора настроек для запуска и отладки. Выводится в // выпадающем списке при запуске отладки. Мне нравится сюда вписывать проект // и окружение, в котором будет запущена отладка "type": "python", // указание какой язык используется - нужно для запуска нужного // набора параметров отладки "request": "launch", // Указывает режим, в котором следует начать отладку. // - launch - если вы запускаете код локально // - attach - если вы используете удаленную отладку // (но эта история более сложная, поэтому тут я ее не буду описывать) "program": "$", // Путь к исполняемому файлу. По умолчанию $ обозначает файл, // который выбран сейчас в активном окне. Если прописать туда какой-то // конкретный файл, то запускается будет всегда он, вне зависимости // от того, какое окно у вас сейчас выбрано. "console": "integratedTerminal", // Указатель того, куда выводить stdout и stderr. // По умолчанию - встроенный терминал. // Менять в моем понимании надо только если ты четко понимаешь что делаешь ) "python": "$/.venv/bin/python3.10", // путь к интерпретатору, с помощью которого запускаться проект "cwd": "$", // Указывает каталог, из которого запускается для отладчика, // который является базовой папкой для любых относительных путей, // используемых в коде. Если опущено, по умолчанию используется $. "jinja": true, // Активирует специфические параметры окружения для отладки шаблонов jinja "envFile": "$/!env/dev.env", // указывает на файл со списком переменных окружения. // Есть нюанс - на данный момент не поддерживает многострочные переменные, // то есть если вам нужно в окружение добавить большой json - придется // сначала перевести его в компактный вид (в одну строку) "justMyCode": true, // Ограничивает отладку вашим кодом. В случае, если стоит False то отладчик будет // показывать шаги и в стандартных библиотеках. "presentation": < // Настройки видимости этой настройки отладки в списке всех отладок "hidden": false, // Если True то эта отладка не будет видна в списках "group": "api", // Имя группы, нужно для логической группировки отладок "order": 1 // Порядковый номер в группе >, "autoReload": < // Перезапуск отладки в случае сохранения файла с новым кодом. // Если отладка идет в рамках активного файла - перезапустится только он. "enable": true >>, // Пример настройки для запуска проекта написанного на FastApi < "name": "FastAPI", "type": "python", "request": "launch", "module": "uvicorn", // В отличие от предыдущего раза, где запускается файл из текущего активного окна, // тут запускается вполне конкретный модуль "console": "integratedTerminal", "envFile": "$/!env/stage.env", // Заведя несколько файлов с переменными окружения можно легко переключаться // на отладку в разных окружениях "python": "$/.venv/bin/python3.10", "cwd": "$", "args": [ // параметры запуска - специфичны для FastApi "app.main:app", // в моем случае: // первое app- это пака в корне файла проекта // main - это название файла, // второе app - это имя экземпляра класса FastAPI // (выглядит как app = FastAPI()) "--host", "0.0.0.0" // , "--workers", "5" // количество воркеров запускаемых по умолчанию. // Нужно для высоконагруженного продакшена ], "jinja": true, "justMyCode": true, "presentation": < "hidden": false, "group": "api", "order": 5 >> ] >
В итоге, через 3 часа мучений все мои проекты были снабжены нужными им параметрами для запуска отладки, сделаны для всех свои виртуальные окружения и вообще наступила благодать. Но ненадолго.
Часть третья. Новые горизонты или разработка прямо в контейнере.
И вот, казалось бы, наступило счастье, благодать, бабочки порхают и в мире больше не осталось проблем… Но радость была не долгой — мне пришлось работать с MSSQL, а с драйвер упорно не хотел становиться ко мне на машину. И тут я понял, что это следующий пинок — разобраться с возможностью разработки в контейнерах.
История с разработкой в контейнерах прямо внутри VS Code витала в моей голове уже очень давно, но как обычно, волшебного пинка не было. И вот он настал.
На самом деле у VS Code есть два режима поддержки контейнеров:
- полноценная разработка в контейнерах (будет рассматриваться в статье)
- отладка в контейнерах (мне показалась эта история более громоздкой, поэтому не ковырял)

Теперь пара слов о том, как идеологически устроено использование контейнера в качестве полноценной среды разработки.
- В гостевой операционной системе открывается интерфейс.
- Запускается контейнер, в который устанавливаются расширения и специальный сервер, который позволяет интерфейсной части взаимодействовать с контейнером по сети.
- В контейнер монтируется выбранная папка, то есть любые изменения файлов внутри контейнера происходят с файлами, лежащими на файловой системе вашей операционной системы.
- Все процессы, связанные работой с кодом, форматированием и отладкой запускаются внутри контейнера.
Шаги, которые происходят при запуске разработки в контейнере:
- Мы выбираем папку, которую хотим открыть в контейнере.
- VS Code ищет в корне этой папки специальную директорию .devcontainer.
- В этой директории ищется специальный файл — devcontainer.json. Он содержит в себе информацию о том, как запустить нужный контейнер.
- В случае, если мы собираем контейнер сами, то запускается процесс сборки с помощью Dockerfile из этой же директории.
- В случае, если мы пользуемся уже собранным контейнером из заданного регестри, то скачивается указанный нами образ.
- После того, как контейнер запустился, стартует команда, описанная в разделе «initializeCommand» из файла devcontainer.json (если они заданы).
- Следующим шагом запускается установка расширений внутрь контейнера. Список расширений указывается в файле devcontainer.json.
- После установки расширений стартует команда, описанная в разделе «postCreateCommand» из файла devcontainer.json (если они заданы).
Вот так будет выглядеть наша структура каталогов для разработки в контейнерах:
Development ├───.vscode │ └───my_dev_env.code-workspace ├───First project │ ├───!env │ │ ├───prod.env │ │ └───dev.env │ ├───.devcontainer │ │ ├───devcontainer.json │ │ └───Dockerfile │ ├───.vscode │ │ ├───launch.json │ │ └───settings.json │ └───app │ ├───file111.txt │ ├───file112.txt │ └───. ├───Second project │ ├───!env │ │ ├───prod.env │ │ └───dev.env │ ├───.devcontainer │ │ ├───devcontainer.json │ │ └───Dockerfile │ ├───.vscode │ │ ├───launch.json │ │ └───settings.json │ └───app │ ├───file111.txt │ ├───file112.txt │ └───. └───Third project ├───!env │ ├───prod.env │ └───dev.env ├───.devcontainer │ ├───devcontainer.json │ └───Dockerfile ├───.vscode │ ├───launch.json │ └───settings.json └───app ├───file111.txt ├───file112.txt └───.
Рассмотрим более подробно новые файлы.
devcontainer.json:
< "name": "docker-my_project", // Это имя будет показываться в интерфейсе VS Code и обозначать в каком // контейнере вы работаете "build": < // Эта секция отвечает за то, как будет собираться ваш контейнер. // Вариантов два - или собирать из Dockerfile при старте, или брать из // какого-нибудь registry. Я пошел по первому варианту - он для меня проще "dockerfile": "Dockerfile", // Это самый обычный Dockerfile для сборки образа "context": ".." // Это очень важный параметр - он указывает в контексте какой директории // собирается контейнер и относительно этой директории будут отрабатывать // все пути в Dockerfile. В примере - это папка проекта First project. // Соответственно, если у вас в Dockerfile написано "COPY app/requirements.txt ." // то это значит, что при сборке каталог app будет искаться относительно папки // First project. Эта возможность позволяет вам очень гибко собирать ваши образы. >, "remoteUser": "root", // Пользователь из-под кого запускается все в контейнере. Мне было лень // заморачиваться и я оставил root. // Есть еще две крайне любопытные команды - они позволяют вписать набор команд, // выполняемых перед всеми действиями в контейнере (например, установка расширений) // и сразу же после инициализации контейнера, перед передачей управления пользователю. // Тут приведен пример, как можно это использовать - ставить зависимости // или запускать сборки npm. // "initializeCommand": "cp ../app/requirements.txt .", // "postCreateCommand": "pip3 install -r /workspaces/alkir-infra-api/app/requirements.txt", "extensions": [ // тут мы задаем список расширений VS Code, которые хотим увидеть при разработке в контейнере. // Тут приведен мой - замените на свой. "ms-python.python", "wholroyd.jinja", "formulahendry.code-runner", "streetsidesoftware.code-spell-checker", "VisualStudioExptTeam.vscodeintellicode", "VisualStudioExptTeam.intellicode-api-usage-examples", "humao.rest-client", "streetsidesoftware.code-spell-checker-russian", "adpyke.vscode-sql-formatter", "mtxr.sqltools", "ultram4rine.sqltools-clickhouse-driver", "DotJoshJohnson.xml", "redhat.vscode-yaml", "njpwerner.autodocstring" ], "customizations": < // В этой секции вы переопределяете настройки по умолчанию. // Логичнее всего скопировать сюда информацию из общего файла настроек. "vscode": < "settings": < "python.defaultInterpreterPath": "/usr/local/bin/python3.10", "python.linting.enabled": true, "sql-formatter.uppercase": true, "python.linting.flake8Enabled": true >> >, "forwardPorts": [ // Список портов, которые будут проброшены из контейнера. // Нужно для того, чтобы обращаться к своему приложению внутри контейнера по сети. // Так как у меня проект FastAPI он по умолчанию открывает 8000 порт на прослушивание. 8000 ] >
Пример Dockerfile для работы с Python
FROM python:3.10.8-buster as builder COPY app/requirements.txt . RUN set -ex \ && apt-get update -yqq \ && ACCEPT_EULA=Y apt-get install --no-install-recommends -yqq \ unixodbc-dev \ libpq-dev \ g++ \ git \ rsync \ freetds-dev \ freetds-bin \ tdsodbc \ && pip3 install flake8 pylint autopep8 \ && pip3 install -r requirements.txt
После того, как мы все настроили остается только запустить это все. Для этого надо нажать F1, и в появившейся строке ввода ввести «Open folder in container». После этого выбрать корневую папку проекта. После чего запустится сборка контейнера и папка откроется внутри контейнера.
И еще один момент. Как правильно, если вы хотите перезапустить контейнер или перестроить его у вас выпадает ошибка. Это, как правило, связано с тем, что контейнер не успевает удалиться. Попробуйте нажать retry и как правильно все срабатывает.
Так же, из неописанных возможностей (пока просто не разобрался), есть возможность стартовать зависимые контейнеры при запуске отладки. К примеру, вы разрабатывается фронт, и у вас в контейнерах стартуют бек с апи и субд для бека. Очень удобная штука.
