Вы находитесь на странице: 1из 380

Contents

Python в Visual Studio


Обзор
Общие сведения о поддержке Python
Обзор интегрированной среды разработки Visual Studio
Рабочая нагрузка "Приложения для обработки и анализа данных и
аналитические приложения"
Установка
Установка
Установка интерпретаторов Python
Краткие руководства
Создание веб-приложения на Flask
Создание проекта из шаблона
Открытие и выполнение кода Python в папке
Создание проекта на основе имеющегося кода
Создание проекта из репозитория
Создание проекта из шаблона Cookiecutter
Учебники
Python в Visual Studio
0. Установка средств поддержки Python
1. Создание проекта Python
2. Написание и выполнение кода
3. Использование интерактивного окна REPL
4. Выполнение кода в отладчике
5. Установка пакетов и управление средами Python
6. Работа с Git
Сведения о Django в Visual Studio
1. Создание проекта и решения
2. Создание приложения Django
3. Обработка статических файлов и добавление страниц
4. Использование шаблона веб-проекта Django
5. Аутентификация пользователей
6. Использование шаблона веб-проекта Django для опросов
Знакомство с Flask в Visual Studio
1. Создание проекта и решения
2. Создание приложения Flask
3. Обработка статических файлов и добавление страниц
4. Использование шаблона веб-проекта Flask
5. Использование шаблона веб-проекта опроса Flask
Основные понятия
Проекты Python
Проекты Python
Шаблоны веб-проектов
Шаблон веб-проекта Django
Шаблон облачной службы Azure
Пакет Azure SDK для Python
Практические руководства
Управление средами Python
Управление средами Python
Выбор интерпретатора для проекта
Использование файла requirements.txt для зависимостей
Пути поиска
Справочник по окну "Среда"
Настройка веб-приложений для работы с IIS
Редактирование кода Python
Редактирование кода Python
Код формата
Рефакторинг кода
Использование PyLint
Задание пользовательских команд меню
Интерактивный Python (REPL)
Интерактивный Python (REPL)
Использование IPython REPL
Отладка
Отладка
Отладка кода на удаленных компьютерах с Linux
Публикация в службу приложений Azure в Linux
Взаимодействие с C++
Создание расширения C++ для Python
Отладка в смешанном режиме для Python и C++
Символы для отладки в смешанном режиме
Профилирование
Модульное тестирование
Использование расширения Cookiecutter
Справочник
Шаблоны элементов
Параметры
Работа с Python в Visual Studio под управлением
Windows
21.10.2020 • 24 minutes to read • Edit Online

Python — это популярный язык программирования, который отличается надежностью, гибкостью и


простотой освоения. Его можно бесплатно использовать на любых операционных системах, и он
поддерживается широким сообществом разработчиков. Кроме того, для него доступно множество
бесплатных библиотек. Python поддерживает все способы разработки, включая веб-приложения, веб-
службы, компьютерные программы, скрипты и научные вычисления. Его используют многие университеты,
ученые, профессиональные и непрофессиональные разработчики. Больше узнать об этом языке вы можете
на сайте python.org или в руководстве Python для начинающих.

Visual Studio является мощной интегрированной средой разработки (IDE) на языке Python для Windows.
Visual Studio предоставляет средства с открытым кодом для поддержки языка Python, в том числе рабочие
нагрузки разработки Python и обработки и анализа данных (в Visual Studio 2017 и более поздних
версиях), а также бесплатное расширение "Инструменты Python для Visual Studio" (в Visual Studio 2015 и
более ранних версиях).

Сейчас Python не поддерживается в Visual Studio для Mac, но доступен в Mac и Linux при использовании
Visual Studio Code (см. вопросы и ответы.
Чтобы приступить к работе, выполните указанные ниже действия.

Следуйте инструкциям по установке, чтобы настроить рабочую нагрузку Python.


Эта статья познакомит вас с возможностями Python в Visual Studio.

Выполните одно или несколько кратких руководств, чтобы создать проект. Если вы не уверены, начните
с создания веб-приложения на платформе Flask.

Выполните одно или несколько кратких руководств, чтобы создать проект. Если вы не уверены, сначала
прочитайте статью Quickstart: Open and run Python code in a folder (Краткое руководство. Открытие и
запуск кода Python в папке) или Краткое руководство. Создание первого веб-приложения Python с
помощью Visual Studio.

Пройдите руководство Работа с Python в Visual Studio, в котором описана полная процедура.

NOTE
Visual Studio поддерживает Python версии 2.7, а также с 3.5 по 3.7. Visual Studio можно использовать для
редактирования кода, написанного на языке Python других версий, но эти версии официально не поддерживаются,
а функции, такие как IntelliSense и отладка, могут не работать. Поддержка Python версии 3.8 по-прежнему
находится на стадии разработки. Конкретные сведения о поддержке см. в этой задаче на сайте GitHub.

Поддержка нескольких интерпретаторов


Окружения Python в Visual Studio (изображены ниже в широком развернутом окне) позволяют
единообразно управлять всеми глобальными окружениями Python, окружениями Conda и виртуальными
средами. Visual Studio автоматически обнаруживает установки Python в стандартных расположениях, а
также позволяет настраивать нестандартные варианты установки. В каждом окружении можно легко
управлять пакетами, открывать интерактивное окно этого окружения и получать доступ к папкам
окружения.

Используйте команду Открыть интерактивное окно, чтобы запустить Python в интерактивном режиме в
контексте Visual Studio. Используйте команду Открыть в PowerShell , чтобы открыть отдельное окно
команд в папке выбранной среды. Из этого окна команд можно выполнить любой скрипт Python.

Дополнительные сведения:

Управление средами Python


Справочная информация по вкладкам окна "Окружения Python"

Многофункциональное редактирование, IntelliSense и понимание


кода
Visual Studio предоставляет первоклассный редактор Python, включающий цветовую разметку синтаксиса,
автозаполнение во всем коде и библиотеках, форматирование кода, справку по сигнатурам, рефакторинг,
анализ кода на наличие потенциальных ошибок и подсказки по типам. Visual Studio также предоставляет
уникальные функции, такие как представление классов, переход к определению , поиск всех ссылок и
фрагменты кода. Непосредственная интеграция с интерактивным окном помогает быстро разрабатывать
код на Python, сразу сохраняя его в файле.

Дополнительные сведения:

Документация: Редактирование кода Python


Документация: Форматирование кода
Документация: Рефакторинг кода
Документация: Использование анализатора кода
Общая документация по функциям Visual Studio: Возможности редактора кода

Интерактивное окно
Для каждого окружения Python, с которым умеет работать Visual Studio, можно открыть его интерактивное
окружение (REPL) для интерпретатора Python непосредственно в Visual Studio без открытия отдельного
окна командной строки. Также можно легко переключаться между окружениями. (Чтобы открыть
отдельную командную строку, выберите нужную среду в окне Окружения Python , затем команду
Открыть в PowerShell , как описано ранее в разделе Поддержка нескольких интерпретаторов.)

Кроме того, Visual Studio обеспечивает тесную интеграцию между редактором кода Python и
интерактивным окном. Сочетанием клавиш CTRL +ВВОД можно легко отправить текущую строку кода
(или блок кода) из редактора в интерактивное окно и перейти к следующей строке (или блоку).
Сочетание клавиш CTRL +ВВОД позволяет легко использовать пошаговое выполнение кода без запуска
отладчика. Этим же сочетанием клавиш можно отправить выделенный код в интерактивное окно или
вставить код из интерактивного окна в редактор. Вместе эти возможности позволяют работать с
сегментами кода в интерактивном окне и легко сохранять результаты в файл, открытый в редакторе.

Visual Studio также поддерживает IPython и Jupyter в цикле REPL, включая встроенные диаграммы, .NET и
Windows Presentation Foundation (WPF).
Дополнительные сведения:

Интерактивное окно
IPython в Visual Studio
Система проектов и шаблоны проектов и элементов
NOTE
В Visual Studio 2019 можно открыть папку с кодом Python и выполнить этот код, не создавая проект Visual Studio и
файлы решения. Дополнительные сведения см. в разделе Краткое руководство. Открытие и выполнение кода
Python в папке. Но файл проекта имеет ряд важных преимуществ, которые мы описали в этой статье.

Visual Studio позволяет управлять постоянно возрастающей сложностью проекта. Проект Visual Studio —
это не просто структура папок. Он включает сведения о том, как используются различные файлы и как они
связаны друг с другом. Visual Studio помогает распознавать код приложения, тестовый код, веб-страницы,
JavaScript, скрипты сборки и т. д., что позволяет затем использовать возможности, специфичные для
каждого типа файла. Кроме того, решение Visual Studio помогает управлять несколькими связанными
проектами, например проектом Python и проектом расширения C++.

Шаблоны проектов и элементов автоматизируют процесс настройки различных типов проектов и файлов,
экономя драгоценное время и освобождая разработчика от сложных рутинных операций, в ходе которых
легко допустить ошибку. Visual Studio предоставляет шаблоны для веб-проектов, Azure, обработки и
анализа данных, консольных и других типов проектов, наряду с шаблонами для файлов, таких как классы
Python, модульные тесты, веб-конфигурации Azure, HTML и даже приложения Django.
Дополнительные сведения:

Документация: Управление проектами Python


Документация: Справочник по шаблонам элементов
Документация: Шаблоны проектов Python
Документация: Работа с C++ и Python
Общая документация по функциям Visual Studio: Шаблоны проектов и элементов
Общая документация по функциям Visual Studio: Решения и проекты в Visual Studio

Полнофункциональная отладка
Одним из основных преимуществ Visual Studio является его мощный отладчик. В частности, для Python
среда Visual Studio поддерживает отладку в смешанном режиме на Python и C++, удаленную отладку в
Linux, отладку в интерактивном окне и отладку модульных тестов Python.
В Visual Studio 2019 вы можете выполнить запуск и отладку кода без файла проекта Visual Studio. Пример
см. в статье Quickstart: Open and run Python code in a folder (Краткое руководство. Открытие и выполнение
кода Python в папке).

Дополнительные сведения:

Документация: Отладка Python


Документация: Отладка в смешанном режиме для Python и C++
Документация: Удаленная отладка в Linux
Общая документация по функциям Visual Studio: Обзор функций отладчика Visual Studio

Средства профилирования с широким набором отчетов


Профилирование позволяет узнать, как расходуется время в приложении. Visual Studio поддерживает
профилирование с помощью интерпретаторов на основе CPython и включает сравнение
производительности при различных запусках профилирования.

Дополнительные сведения:

Документация: Средства профилирования для Python


Общая документация по функциям Visual Studio: Обзор возможностей профилирования. (Не все функции
профилирования Visual Studio доступны для Python.)
Средства модульного тестирования
Обнаружение, выполнение и управление тестами в обозревателе тестов Visual Studio, а также легкая
отладка модульных тестов.

Дополнительные сведения:

Документация: Инструменты модульного тестирования для Python


Общая документация по функциям Visual Studio: Модульное тестирование кода.

Пакет Azure SDK для Python


Библиотеки Azure для Python упрощают использование служб Azure в приложениях для Windows, Mac OS X
и Linux. Их можно использовать для создания ресурсов Azure и управления ими, а также для подключения к
службам Azure.

Дополнительные сведения см. в статьях Пакет Azure SDK для Python и Библиотеки Azure для Python.

Вопросы и ответы
В. Доступна ли поддержка Python в Visual Studio для Mac?

О. На данный момент нет , но вы можете проголосовать за эту возможность на сайте сообщества


разработчиков. В документации по Visual Studio для Mac указаны поддерживаемые сейчас типы разработки.
А пока нормальная работа с Python за счет доступных расширений обеспечивается Visual Studio Code в
Windows, Mac и Linux.
В. Что можно использовать для создания пользовательского интерфейса с помощью Python?

О. Основным предложением в этом направлении является Qt Project с привязками для Python, известного
как PySide (официальная привязка) (см. также файлы для скачивания PySide), и PyQt. В настоящее время
поддержки Python в Visual Studio не включает какие-либо конкретные средства для разработки
пользовательского интерфейса.

В. Может ли проект Python сформировать отдельный исполняемый файл?

О. Python является интерпретируемым языком, и выполнение его кода осуществляется по требованию в


подходящем окружении с поддержкой Python, таком как Visual Studio и веб-серверы. Сейчас Visual Studio не
предоставляет инструменты и возможности для создания отдельного исполняемого файла, который, по
сути, представляет собой программу с внедренным интерпретатором Python. Сообществом Python
предоставлены различные средства, позволяющие создать исполняемые файлы, как описано на сайте
StackOverflow. CPython также можно внедрять в приложение машинного кода. Об этом можно узнать в
записи блога Using CPython's Embeddable Zip File (Использование внедряемого ZIP-файла CPython).

Поддержка компонентов
Функции Python можно установить в следующих выпусках Visual Studio, как описано в руководстве по
установке:

Visual Studio 2019 (все выпуски);


Visual Studio 2017 (все выпуски);
Visual Studio 2015 (все выпуски)
Visual Studio 2013 Community
Visual Studio 2013 Express для Web, с обновлением 2 или более поздней версии
Visual Studio 2013 Express для Desktop с обновлением 2 или более поздней версии
Visual Studio 2013 (версии Pro или более высокой версии)
Visual Studio 2012 (версии Pro или более высокой версии)
Visual Studio 2010 с пакетом обновления 1 (версии Pro или более высокой версии; требуется .NET 4.5)
Visual Studio 2015 и более ранние версии доступны на странице visualstudio.microsoft.com/vs/older-
downloads/.

IMPORTANT
Функции полностью поддерживаются только в последней версии Visual Studio. Они доступны и в предыдущих
версиях , но поддерживаются не полностью.

2013 ДЛЯ
ПОДДЕР НАСТОЛЬ
ЖКА 2013 НЫХ 2013 2012 2010 SP 1
PYT H ON 2017+ 2015 C OMM СИСТЕМ 2013 W EB P RO + P RO + P RO +

Управлен ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
ие
нескольк
ими
интерпре
таторами

Автоопре ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
деление
популярн
ых
интерпре
таторов

Добавлен ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
ие
пользова
тельских
интерпре
таторов

Виртуаль ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
ные
среды
2013 ДЛЯ
ПОДДЕР НАСТОЛЬ
ЖКА 2013 НЫХ 2013 2012 2010 SP 1
PYT H ON 2017+ 2015 C OMM СИСТЕМ 2013 W EB P RO + P RO + P RO +

PIP и ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
легкая
установк
а

2013 ДЛЯ
СИСТЕМА НАСТОЛЬ
ПРОЕКТО 2013 НЫХ 2013 2012 2010 SP 1
В 2017+ 2015 C OMM СИСТЕМ 2013 W EB P RO + P RO + P RO +

Создание ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
нового
проекта
из
существу
ющего
кода

Показать ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
все
файлы

Система ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
управлен
ия
версиями

Интеграц ✔ ✔ ✔ ✔ ✔ ✔ ✔1 ✗
ия с Git

2013 ДЛЯ
НАСТОЛЬ
РЕДАКТИ 2013 НЫХ 2013 2012 2010 SP 1
РОВАНИЕ 2017+ 2015 C OMM СИСТЕМ 2013 W EB P RO + P RO + P RO +

Подсветк ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
а
синтакси
са

Автозаве ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
ршение

Справка ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
по
сигнатур
ам

Вывод ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
кратких
сведений
2013 ДЛЯ
НАСТОЛЬ
РЕДАКТИ 2013 НЫХ 2013 2012 2010 SP 1
РОВАНИЕ 2017+ 2015 C OMM СИСТЕМ 2013 W EB P RO + P RO + P RO +

Представ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
ление
классов и
обозрева
тель
объектов

Панель ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
навигаци
и

Перейти ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
к
определе
нию

Перейти ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
к

Найти ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
все
ссылки

Автомати ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
ческие
отступы

Формати ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
рование
кода

Рефактор ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
инг —
переимен
ование

Рефактор ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
инг —
извлечен
ие
метода

Рефактор ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
инг —
добавлен
ие и
удаление
импорто
в

PyLint ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
2013 ДЛЯ
ИНТЕРАКТ НАСТОЛЬ
ИВНОЕ 2013 НЫХ 2013 2012 2010 SP 1
ОКНО 2017+ 2015 C OMM СИСТЕМ 2013 W EB P RO + P RO + P RO +

Интеракт ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
ивное
окно

IPython и ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
встроенн
ые графы

2013 ДЛЯ
НАСТОЛЬ
РАБОЧИЙ 2013 НЫХ 2013 2012 2010 SP 1
СТОЛ 2017+ 2015 C OMM СИСТЕМ 2013 W EB P RO + P RO + P RO +

Приложе ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
ние для
консоли
и
Windows

IronPytho ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
n WPF (с
конструк
тором
XAML)

Формы ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
IronPytho
n для
Windows

2013 ДЛЯ
НАСТОЛЬ
2013 НЫХ 2013 2012 2010 SP 1
ИНТЕРНЕТ 2017+ 2015 C OMM СИСТЕМ 2013 W EB P RO + P RO + P RO +

Веб- ✔ ✔ ✔ ✗ ✔ ✔ ✔ ✔
проект
Django

Веб- ✔ ✔ ✔ ✗ ✔ ✔ ✔ ✔
проект
Bottle

Веб- ✔ ✔ ✔ ✗ ✔ ✔ ✔ ✔
проект
Flask

Универса ✔ ✔ ✔ ✗ ✔ ✔ ✔ ✔
льный
веб-
проект
2013 ДЛЯ
НАСТОЛЬ
2013 НЫХ 2013 2012 2010 SP 1
A Z URE 2017+ 2015 C OMM СИСТЕМ 2013 W EB P RO + P RO + P RO +

Разверты ✔ ✔ ✔ ✗ ✔ ✔ ✔ ✔2
вание на
веб-
сайте

Разверты ✔ ✔ ✔ ✗ ✔4 ✔4 ✔3 ✗
вание в
веб-роли

Разверты ? ? ? ✗ ✔4 ✔4 ✔3 ✗
вание в
рабочей
роли

Запуск в ? ? ? ✗ ✔4 ✔4 ✔3 ✗
эмулятор
е Azure

Удаленна ✔ ✔ ✔ ✗ ✔6 ✔8 ✔8 ✗
я
отладка

Присоеди ✔ ✔ ✔ ✗ ✔7 ✔7 ✗ ✗
нение
обозрева
теля
сервера

2013 ДЛЯ
ШАБЛОН НАСТОЛЬ
Ы 2013 НЫХ 2013 2012 2010 SP 1
DJA N GO 2017+ 2015 C OMM СИСТЕМ 2013 W EB P RO + P RO + P RO +

Отладка ✔ ✔ ✔ ✗ ✔ ✔ ✔ ✔

Автозаве ✔ ✔ ✔ ✗ ✔5 ✔5 ✔ ✔
ршение

Автозаве ✔ ✔ ✔ ✗ ✔5 ✔5 ✗ ✗
ршения
для CSS и
JavaScript

2013 ДЛЯ
НАСТОЛЬ
2013 НЫХ 2013 2012 2010 SP 1
ОТЛАДКА 2017+ 2015 C OMM СИСТЕМ 2013 W EB P RO + P RO + P RO +

Отладка ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
2013 ДЛЯ
НАСТОЛЬ
2013 НЫХ 2013 2012 2010 SP 1
ОТЛАДКА 2017+ 2015 C OMM СИСТЕМ 2013 W EB P RO + P RO + P RO +

Отладка ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
без
проекта

Отладка ✔ ✔ ✔ ✔ ✗ ✔ ✔ ✔

присоеди
нение к
редактир
ованию

Отладка ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✗
в
смешанн
ом
режиме

Удаленна ✔ ✔ ✔ ✔ ✗ ✔ ✔ ✔
я
отладка
(Windows,
Mac OS X
Linux)

Окно ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
интеракт
ивной
отладки

2013 ДЛЯ
НАСТОЛЬ
ПРОФИЛИ 2013 НЫХ 2013 2012 2010 SP 1
РОВАНИЕ 2017+ 2015 C OMM СИСТЕМ 2013 W EB P RO + P RO + P RO +

Профили ✔ ✔ ✔ ✗ ✗ ✔ ✔ ✔
рование

2013 ДЛЯ
НАСТОЛЬ
ПРОВЕРК 2013 НЫХ 2013 2012 2010 SP 1
А 2017+ 2015 C OMM СИСТЕМ 2013 W EB P RO + P RO + P RO +

Обозрева ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✗
тель
тестов

Запустит ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✗
ь тест

Отладка ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✗
тестов
1. Поддержка Git для Visual Studio 2012 доступна в расширении "Инструменты Visual Studio для Git",
которое можно найти на веб-сайте Visual Studio Marketplace.

2. Для развертывания на веб-сайте Azure требуется пакет Azure SDK для .NET 2.1 — Visual Studio 2010 с
пакетом обновления 1 (SP1). Более поздние версии не поддерживают Visual Studio 2010.

3. Поддержка веб-роли и рабочей роли Azure требует пакет Azure SDK для .NET 2.3 — VS 2012 или
более поздней версии.

4. Поддержка веб-роли и рабочей роли Azure требует пакет Azure SDK для .NET 2.3 — VS 2013 или
более поздней версии.

5. Редактор шаблонов Django в Visual Studio 2013 имеет несколько известных проблем, которые
устраняются при установке обновления 2.

6. Требуется Windows 8 или более поздняя версия. Visual Studio 2013 Express для веб-сайта не
использует диалоговое окно присоединения к процессу, но при этом удаленная отладка веб-
сайта Azure возможна с использованием команды Attach Debugger (Python) (Подсоединить
отладчик Python) в обозревателе серверов. Для удаленной отладки требуется пакет Azure SDK
для .NET 2.3 — Visual Studio 2013 или более поздней версии.

7. Требуется Windows 8 или более поздняя версия. Команда присоединения отладчика (Python) в
обозревателе серверов требует пакета Azure SDK для .NET 2.3 — Visual Studio 2013 или более
поздней версии.

8. Требуется Windows 8 или более поздняя версия.


Введение в интегрированную среду разработки
Visual Studio (Python)
21.10.2020 • 10 minutes to read • Edit Online

Интегрированная среда разработки Visual Studio — это оригинальная среда запуска для Python и других
языков программирования, которая позволяет редактировать, отлаживать и тестировать код, а затем
публиковать приложения. Интегрированная среда разработки (IDE) представляет собой
многофункциональную программу, которую можно использовать для различных аспектов разработки
программного обеспечения. Помимо стандартного редактора и отладчика, которые предлагаются в
большинстве сред IDE, Visual Studio включает средства дополнения кода, графические среды REPL и другие
функции, позволяющие упростить процесс разработки программного обеспечения.

На этом рисунке показана среда Visual Studio, в которой открыт проект Python и несколько окон с
основными инструментами, которые вы будете часто использовать.

Обозреватель решений (правый верхний угол) позволяет просматривать файлы кода, а также
перемещаться по ним и управлять ими. Обозреватель решений позволяет упорядочить код путем
объединения файлов в решения и проекты.

Рядом с обозревателем решений располагается окно Среды Python , где вы можете управлять
интерпретаторами Python, которые установлены на компьютере.
Можно также открыть и запустить код Python в папке, не создавая файлы проекта и решения Visual
Studio. Дополнительные сведения см. в разделе Краткое руководство. Открытие и выполнение
кода Python в папке.

В окне редактора (центр), где вы, скорее всего, будете проводить большую часть времени,
отображается содержимое файла. Здесь можно редактировать код Python, перемещаться по
структуре кода и настраивать точки останова для сеансов отладки. Вы можете выбрать фрагмент
кода Python и нажать сочетание клавиш Ctrl+ВВОД, чтобы выполнить выбранный код в
интерактивном окне REPL.

В окно вывода (в центре внизу) Visual Studio отправляет уведомления, такие как сообщения об
отладке и ошибках, предупреждения, сообщения о состоянии публикаций и многие другие. Каждый
источник сообщений имеет собственную вкладку.

Объект интерактивное окно REPL для Python отображается в той же области, что и окно вывода.
Team Explorer (правый нижний угол) позволяет отслеживать рабочие элементы и использовать код
совместно с другими пользователями с помощью технологий управления версиями, таких как Git и
система управления версиями Team Foundation (TFVC).

Выпуски
Visual Studio предоставляется для Windows и Mac, но поддержка Python доступна только в Visual Studio для
Windows.
Существует три выпуска Visual Studio для Windows: Community, Professional и Enterprise. Сведения о
функциях, поддерживаемых в каждом выпуске, см. на странице Сравнение выпусков Visual Studio.

Популярные средства повышения производительности


Ниже перечислены некоторые популярные возможности Visual Studio, которые помогут вам повысить
продуктивность разработки программного обеспечения.

IntelliSense
IntelliSense — это набор функций, отображающих сведения о коде непосредственно в редакторе и в
некоторых случаях автоматически создающих небольшие отрывки кода. По сути, это базовая
документация, встроенная в редактор, с которой вам не приходится искать информацию где-то еще.
Функции IntelliSense зависят от языка. Подробности для Python вы найдете в этой статье о
редактировании кода Python. На следующем рисунке показано, как IntelliSense отображает список
членов типа:

Рефакторинг

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

Анализ кода проверяет наличие ошибок и типичных проблем в коде Python, помогая вам
придерживаться правильных шаблонов кодирования на Python.

Поле поиска

Среда Visual Studio может показаться сложной, ведь там столько разных меню, параметров и свойств.
Поле поиска позволяет быстро найти нужное содержимое в Visual Studio. Когда вы начнете вводить в
поле то, что вы ищете, Visual Studio представит результаты, один из которых точно вам подойдет.
Если вам нужно добавить функциональные возможности в Visual Studio, например поддержку
дополнительных языков программирования, поле поиска предоставляет результаты, которые
открывают Visual Studio Installer для установки рабочей нагрузки или отдельного компонента.

Волнистые линии и быстрые действия

Волнистые линии обозначают ошибки или потенциальные проблемы кода прямо во время ввода. Эти
визуальные подсказки позволяют устранять проблемы немедленно и не ждать, пока ошибка будет
обнаружена во время сборки или запуска программы. Если навести указатель мыши на волнистую
линию, на экран будут выведены дополнительные сведения об ошибке. Кроме того, в поле слева
может появляться значок лампочки с быстрыми действиями по устранению ошибки.
"Перейти к определению" и "Показать определение"
Функция Перейти к определению позволяет перейти туда, где определена выбранная функция
или тип. Команда Показать определения отображает определение в том же окне, не открывая
другой файл. Команда Поиск всех ссылок также будет полезна для поиска мест , где используется и
(или) определяется выбранный идентификатор.

Мощные функции для Python


Выполнение кода без проекта

Начиная с Visual Studio 2019, можно открыть папку, содержащую код Python, и выполнить такие
функции, как IntelliSense и отладка, не создавая проект Visual Studio для кода.

Совместная работа с помощью Visual Studio

Visual Studio Live Share позволяет редактировать и отлаживать код совместно с другими
пользователями в реальном времени независимо от используемых вами языков программирования и
создаваемых типов приложений.

Интерактивная оболочка REPL для Python

Visual Studio предоставляет интерактивное окно для цикла REPL (read–eval–print loop) отдельно для
каждого окружения Python, что дает ряд преимуществ над интерфейсом REPL из командной строки
python.exe. В интерактивном окне вы можете ввести произвольный код Python и сразу же увидеть
результаты его выполнения.

Отладка
Visual Studio предоставляет широкие возможности отладки для Python, включая присоединение к
выполняемым процессам, вычисление выражений в окнах контрольных значений и
интерпретации, проверку локальных переменных, точки останова, инструкции "Шаг с заходом",
"Шаг с выходом", "Шаг с обходом", команду Задать следующий оператор и многое другое. Также
есть возможность удаленно отлаживать код Python, выполняющийся на компьютерах Linux.

Взаимодействие с C++

Многие библиотеки для Python создаются на языке C++ для повышения производительности. Visual
Studio предоставляет широкие возможности для разработки расширений для C++, в том числе
поддерживает отладку в смешанном режиме.
Профилирование

Если вы используете интерпретатор на основе CPython, производительность кода Python можно


оценить прямо в Visual Studio.

Модульное тестирование

Visual Studio предоставляет встроенную поддержку для обнаружения, запуска и отладки модульных
тестов в контексте интегрированной среды разработки.
Следующие шаги
Подробнее изучить возможности по работе с Python в Visual Studio вам помогут следующие руководства.

Краткое руководство. Создание веб-приложения на Flask

Работа с Python в Visual Studio

Начало работы с веб-платформой Django в Visual Studio

Начало работы с веб-платформой Flask в Visual Studio

См. также
Откройте для себя другие возможности Visual Studio
Посетите visualstudio.microsoft.com
Читайте блог Visual Studio
Установка поддержки для обработки и анализа
данных в Visual Studio
21.10.2020 • 7 minutes to read • Edit Online

Рабочая нагрузка "Приложения для обработки и анализа данных и аналитические приложения", которую
вы можете выбрать и установить в установщике Visual Studio, объединяет возможности нескольких языков
и предназначенных для них дистрибутивов сред выполнения:

Python и Anaconda
F# с платформой .NET Framework
R и Microsoft R Client
Python
F# с платформой .NET Framework

R и Python — это два основных языка скриптов, используемые для обработки и анализа данных. Они оба
довольно просты в изучении и поддерживаются обширной экосистемой пакетов. Эти пакеты позволяют
реализовать широкий спектр сценариев, таких как получение данных, очистка, обучение модели,
развертывания и построение графиков. F# также представляет собой мощный функционально-
императивный язык .NET, подходящий для самых разных задач по обработке данных.

Python — это основной язык скриптов, используемый для обработки и анализа данных. Python довольно
прост в изучении и поддерживается обширной экосистемой пакетов. Эти пакеты позволяют реализовать
широкий спектр сценариев, таких как получение данных, очистка, обучение модели, развертывания и
построение графиков. F# также представляет собой мощный функционально-императивный язык .NET,
подходящий для самых разных задач по обработке данных. (Для языка R мы рекомендуем записные книжки
Azure.)
Параметры рабочей нагрузки
По умолчанию эта рабочая нагрузка устанавливает следующие параметры, которые можно изменить в
разделе сводки рабочей нагрузки в установщике Visual Studio:

Поддержка языка F# для классических приложений


Python:
Поддержка языка Python
Поддержка веб-приложений Python

Поддержка языка F#
Python:
Поддержка языка Python
64-разрядная версия Anaconda3, дистрибутив Python, включающий в себя разнообразные
библиотеки обработки и анализа данных, а также интерпретатор Python.
Поддержка веб-приложений Python
Поддержка шаблонов Cookiecutter
R:
Поддержка языка R
Поддержка средств разработки R в среде выполнения
Microsoft R Client (предоставляемый корпорацией Майкрософт полностью совместимый и
поддерживаемый сообществом интерпретатор R с библиотеками ScaleR для ускорения
вычислений в отдельных узлах или кластерах. Вы также можете использовать R из CRAN.)

Интеграция SQL Server


SQL Server поддерживает использование как R, так и Python для углубленной аналитики внутри SQL Server.
Поддержка R включена в SQL Server 2016 и более поздних версий, поддержка Python — в SQL Server 2017
CTP 2.0 и более поздних версий.
SQL Server поддерживает использование Python для углубленной аналитики внутри SQL Server. Поддержка
Python доступна в SQL Server 2017 CTP 2.0 и более поздних версий.
Возможность запускать код там же, где находятся ваши данные, обеспечивает следующие преимущества.

Отказ от перемещения данных: вместо перемещения данных из базы данных в приложение или
модель вы можете создавать приложения в базе данных. Это позволяет преодолеть препятствия,
связанные с безопасностью, соответствием, управлением, целостностью, а также ряд аналогичных
трудностей, связанных с перемещением больших объемов данных. Вы также можете использовать
наборы данных, которые не помещаются в память клиентского компьютера.

Простота развертывания: когда ваша модель готова, вы можете развернуть ее в рабочей среде,
просто внедрив в скрипт T-SQL. Любое клиентское приложение SQL, написанное на любом языке,
может воспользоваться преимуществами моделей и аналитики через вызов хранимой процедуры.
Никакие отдельные интеграции языка при этом не требуются.

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


возможности SQL Server, такие как таблицы в памяти и индексы columnstore с
высокопроизводительными масштабируемыми API в пакетах RevoScale. Отказ от перемещения
данных также позволяет обойти ограничения, связанные с памятью клиента, которые проявляются
при увеличении объема данных или повышении производительности приложения.

Полноценная расширяемость: вы можете установить и запустить в SQL Server любой из


последних пакетов с открытым исходным кодом, чтобы создать приложения углубленного обучения
и искусственного интеллекта на базе огромного объема данных в SQL Server. Установка пакета в SQL
Server осуществляется также просто, как и на локальном компьютере.
Широкая доступность без дополнительных затрат : интеграции языка доступны во всех
выпусках SQL Server 2017 и более поздних версий, включая экспресс-выпуск.

Чтобы получить все возможности, обеспечиваемые интеграцией с SQL Server, установите рабочую нагрузку
Хранение и обработка данных с параметром SQL Ser ver Data Tools в установщике Visual Studio. Этот
параметр позволяет использовать IntelliSense, выделение синтаксиса и функции развертывания для SQL.

Дополнительные сведения:

Работа с SQL Server и R


Углубленная аналитика в базе данных с R в SQL Server 2016 (блог)

Python в SQL Server 2017: расширенное машинное обучение в базе данных (блог)

Дополнительные службы и пакеты SDK


Кроме возможностей, предоставляемых рабочей нагрузкой "Приложения для обработки и анализа данных
и аналитические приложения", при обработке и анализе данных можно также применять службу Azure
Notebooks и пакет Azure SDK для Python.
Пакет SDK Azure для Python — это удобное средство для работы со службами Microsoft Azure из
приложений Windows, Mac и Linux. Дополнительные сведения см. в статье Пакет Azure SDK для Python.

Azure Notebooks (сейчас находится на этапе предварительной версии) предоставляет свободный доступ по
сети к записным книжкам Jupyter, работающими в облаке на платформе Microsoft Azure. Эта служба
содержит примеры записных книжек на языках Python, R и F#, с которых можно начать работу. Посетите
notebooks.azure.com.
Как установить поддержку Python в Visual Studio
под управлением Windows
21.10.2020 • 13 minutes to read • Edit Online

Чтобы установить поддержку Python для Visual Studio (Инструменты Python для Visual Studio или
PTVS), выполните инструкции из раздела, который соответствует вашей версии Visual Studio:
Visual Studio 2017 и Visual Studio 2019
Visual Studio 2015
Visual Studio 2013 и более ранние версии
Чтобы быстро проверить поддержку Python после установки, откройте интерактивное окно
Python . Для этого нажмите клавиши ALT +I и введите 2+2 . Если вы не увидите результат 4 ,
проверьте выполненные действия.

TIP
Рабочая нагрузка Python содержит полезное расширение Cookiecutter, которое предоставляет графический
пользовательский интерфейс для поиска шаблонов, ввода параметров шаблонов и создания проектов и
файлов. Дополнительные сведения см. в статье Использование расширения Cookiecutter.

NOTE
Сейчас Python не поддерживается в Visual Studio для Mac, однако доступен в Mac и Linux посредством Visual
Studio Code. См. вопросы и ответы.

Visual Studio 2019 и Visual Studio 2017


1. Скачайте и запустите последнюю версию Visual Studio Installer. Если вы уже установили Visual
Studio, запустите Visual Studio Installer, выберите вариант Изменить (см. раздел Изменение
Visual Studio) и перейдите к шагу 2.
Установка Visual Studio 2019 Community

TIP
Выпуск Community предназначен для индивидуальных разработчиков, использования при аудиторном
обучении и в научных исследованиях , а также разработки решений с открытым кодом. Если
программу планируется использовать в других целях , установите Visual Studio 2019 Professional или
Visual Studio 2019 Enterprise.

2. В установщике предлагается список рабочих нагрузок, то есть групп связанных параметров для
определенных целей разработки. Для Python выберите рабочую нагрузку Разработка на
Python .
Необязательно: если вы занимаетесь обработкой и анализом данных, также рекомендуется
установить рабочую нагрузку Приложения для обработки и анализа данных и
аналитические приложения. Эта рабочая нагрузка включает в себя поддержку языков
Python, R и F#. Дополнительные сведения см. в разделе Рабочая нагрузка "Приложения для
обработки и анализа данных и аналитические приложения".

NOTE
Рабочие нагрузки для Python и обработки и анализа данных доступны только в Visual Studio2017
версии 15.2 и выше.

Необязательно: если вы занимаетесь обработкой и анализом данных, также рекомендуется


установить рабочую нагрузку Приложения для обработки и анализа данных и
аналитические приложения. Эта рабочая нагрузка включает в себя поддержку Python и F#.
Дополнительные сведения см. в разделе Рабочая нагрузка "Приложения для обработки и
анализа данных и аналитические приложения".

3. В правой области установщика при необходимости выберите дополнительные параметры.


Чтобы принять параметры по умолчанию, пропустите этот шаг.

ПАРАМЕТР ОПИСАНИЕ
ПАРАМЕТР ОПИСАНИЕ

Дистрибутивы Python Выберите любое сочетание доступных


дистрибутивов 32- и 64-разрядных версий
Python 2, Python 3, Miniconda, Anaconda2 и
Anaconda3, с которыми вы планируете работать.
Каждый дистрибутив включает в себя
интерпретатор, среду выполнения и библиотеки. В
частности, Anaconda — это открытая платформа
обработки и анализа данных , которая включает в
себя множество предварительно установленных
пакетов. (Вы можете в любой момент вернуться в
установщик Visual Studio, чтобы добавить или
удалить дистрибутивы.) Примечание. Если вы
установили дистрибутив без использования
установщика Visual Studio, вам не нужно выполнять
дополнительные действия. Visual Studio
автоматически определяет существующие
установки Python. См. Окно "Окружения Python".
Кроме того, если доступна более новая версия
Python, чем показанная в установщике, то вы
можете установить эту версию отдельно, и Visual
Studio обнаружит ее.

Под д ержка шаблонов Cookiecutter Устанавливает графический пользовательский


интерфейс Cookiecutter для поиска шаблонов,
ввода их параметров и создания проектов и
файлов. См. раздел Использование расширения
Cookiecutter.

Под д ержка веб- приложений Python Устанавливает средства для разработки веб-
приложений, включая поддержку редактирования
кода HTML, CSS и JavaScript, а также шаблоны
проектов на основе платформ Bottle, Flask и Django.
См. статью Шаблоны веб-проектов Python.

Под д ержка Интернета вещей д ля Python Поддерживает разработку для Windows IoT Core с
помощью Python.

Встроенные сред ства разработки Python Устанавливает компилятор C++ и другие


компоненты, необходимые для разработки
собственных расширений для Python. См. статью
Создание расширения C++ для Python. Чтобы
обеспечить полную поддержку С ++, установите
рабочую нагрузку Разработка классических
приложений на C++ .

Основные инструменты облачных служб Обеспечивает дополнительную поддержку для


Azure разработки облачных служб Azure на Python. См.
статью Проекты облачных служб Azure.

ПАРАМЕТР ОПИСАНИЕ
ПАРАМЕТР ОПИСАНИЕ

Дистрибутивы Python Выберите любое сочетание доступных


дистрибутивов 32- и 64-разрядных версий
Python 2, Python 3, Miniconda, Anaconda2 и
Anaconda3, с которыми вы планируете работать.
Каждый дистрибутив включает в себя
интерпретатор, среду выполнения и библиотеки. В
частности, Anaconda — это открытая платформа
обработки и анализа данных , которая включает в
себя множество предварительно установленных
пакетов. (Вы можете в любой момент вернуться в
установщик Visual Studio, чтобы добавить или
удалить дистрибутивы.) Примечание. Если вы
установили дистрибутив без использования
установщика Visual Studio, вам не нужно выполнять
дополнительные действия. Visual Studio
автоматически определяет существующие
установки Python. См. Окно "Окружения Python".
Кроме того, если доступна более новая версия
Python, чем показанная в установщике, то вы
можете установить эту версию отдельно, и Visual
Studio обнаружит ее.

Под д ержка шаблонов Cookiecutter Устанавливает графический пользовательский


интерфейс Cookiecutter для поиска шаблонов,
ввода их параметров и создания проектов и
файлов. См. раздел Использование расширения
Cookiecutter.

Под д ержка веб- приложений Python Устанавливает средства для разработки веб-
приложений, включая поддержку редактирования
кода HTML, CSS и JavaScript, а также шаблоны
проектов на основе платформ Bottle, Flask и Django.
См. статью Шаблоны веб-проектов Python.

Встроенные сред ства разработки Python Устанавливает компилятор C++ и другие


компоненты, необходимые для разработки
собственных расширений для Python. См. статью
Создание расширения C++ для Python. Чтобы
обеспечить полную поддержку С ++, установите
рабочую нагрузку Разработка классических
приложений на C++ .

Основные инструменты облачных служб Обеспечивает дополнительную поддержку для


Azure разработки облачных служб Azure на Python. См.
статью Проекты облачных служб Azure.

4. После установки в установщике предлагаются команды для изменения, запуска, восстановления


и удаления Visual Studio. Если доступны обновления для установленных компонентов Visual
Studio, кнопка Изменить меняется на Обновить. (Команду Изменить в этом случае можно
выбрать в раскрывающемся меню.) Запускать среду Visual Studio и установщик можно также из
меню Пуск в Windows. Для этого выполните поиск по запросу "Visual Studio".
Устранение неполадок
Если у вас возникли проблемы при установке или запуске Python в Visual Studio, попробуйте сделать
следующее:

Определите, возникает ли та же ошибка при использовании Python CLI, то есть при запуске
python.exe из командной строки.
Воспользуйтесь восстановлением Visual Studio.
Восстановите или переустановите Python через Параметры > Приложения и компоненты в
Windows.
Пример ошибки. Не удалось запустить интерактивный процесс:
System.ComponentModel.Win32Exception (0x80004005): Неизвестная ошибка (0xc0000135) в
Microsoft.PythonTools.Repl.PythonInteractiveEvaluator.d__43.MoveNext().

Visual Studio 2015


1. Чтобы запустить установщик Visual Studio, откройте Панель управления > Программы и
компоненты, затем выберите Microsoft Visual Studio 2015 и нажмите кнопку Изменить.

2. В самом установщике выберите действие Изменить.


3. Выберите Языки программирования > Инструменты Python для Visual Studio и
щелкните Далее :

4. Когда завершится работа установщика Visual Studio, установите любой интерпретатор Python на
свой выбор. Visual Studio 2015 поддерживает только Python версии 3.5 и более ранних. При
использовании более поздних версий отображается сообщение об ошибке, например
Неподдерживаемая версия Python 3.6 ). Если интерпретатор уже установлен, но Visual
Studio не обнаруживает его автоматически, см. руководство по определению существующего
окружения вручную.

Visual Studio 2013 и более ранние версии


1. Установите версию Инструментов Python для Visual Studio, соответствующую вашей версии
Visual Studio.
Visual Studio 2013: PTVS 2.2.2 для Visual Studio 2013 В Visual Studio 2013 этот процесс можно
запустить через диалоговое окно Файл > Новый проект .
Visual Studio 2010 и 2012: PTVS 2.1.1 для Visual Studio 2010 и 2012
2. Selecting and installing Python interpreters (Установка и настройка интерпретаторов Python). Если
интерпретатор уже установлен, но Visual Studio не обнаруживает его автоматически, см.
руководство по определению существующего окружения вручную.

Расположения установки
По умолчанию поддержка Python устанавливается для всех пользователей на компьютере.

В Visual Studio 2019 и Visual Studio 2017 рабочая нагрузка Python устанавливается в каталог
%ProgramFiles(x86)%\Microsoft Visual Studio\<версия_Visual_Studio>\
<выпуск_Visual_Studio>Common7\IDE\Extensions\Microsoft\Python, где <версия_Visual_Studio> — это
2019 или 2017, а <выпуск_Visual_Studio> — Community, Professional или Enterprise.
В Visual Studio 2015 и более ранних версиях используются такие пути установки:

32-разрядная версия.
Путь: %Program Files(x86)%\Microsoft Visual Studio
<VS_ver>\Common7\IDE\Extensions\Microsoft\Python Tools for Visual Studio\<версия_PTVS>
Расположение пути в реестре: HKEY_LOCAL_MACHINE\Software\Microsoft\PythonTools\
< версия_Visual_Studio>\InstallDir
64-разрядная версия.
Путь: %Program Files%\Microsoft Visual Studio
<VS_ver>\Common7\IDE\Extensions\Microsoft\Python Tools for Visual Studio\<версия_PTVS>
Расположение пути в реестре:
HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\PythonTools\
< версия_Visual_Studio>\InstallDir
Здесь:

<VS_ver> принимает одно из этих значений:


14.0 for Visual Studio 2015
12.0 for Visual Studio 2013
11.0 for Visual Studio 2012
10.0 for Visual Studio 2010
<PTVS_ver> — это номер версии, например 2.2.2, 2.1.1, 2.0, 1.5, 1.1 или 1.0.
Пользовательские установки (для версии 1.5 и более ранних)
Инструменты Python для Visual Studio 1.5 и более ранних версий можно установить только для
текущего пользователя. Путь установки будет выглядеть так: %LocalAppData%\Microsoft\VisualStudio\
<версия_Visual_Studio>\Extensions\Microsoft\Python Tools for Visual Studio\<версия_PTVS> . Здесь
<версия_Visual_Studio> и <версия_PTVS> имеют то же значение, которое описано выше.
Установка интерпретаторов Python
21.10.2020 • 7 minutes to read • Edit Online

По умолчанию при установке рабочей нагрузки Python для разработки в Visual Studio 2017 и более
поздних версий также устанавливается Python 3 (64-разрядная версия). При необходимости вы можете
установить 32-разрядную и 64-разрядную версии Python 2, Python 3 вместе с Miniconda (Visual
Studio 2019) или Anaconda 2/Anaconda 3 (Visual Studio 2017), как описано в руководстве по установке.
Кроме того, вы можете установить стандартные интерпретаторы из диалогового окна Add Environment
(Добавление среды). Выберите команду Add Environment (Добавление среды) в окне Python
Environments (Среды Python) или в панели инструментов Python, выберите вкладку Python installation
(Установка Python), укажите интерпретаторы для установки и нажмите Install (Установить).
Кроме того, любой интерпретатор из приведенной ниже таблицы можно установить вручную, не
используя Visual Studio Installer. Например, если вы установили Anaconda 3 еще до установки Visual Studio,
нет необходимости снова устанавливать этот дистрибутив с помощью Visual Studio Installer. Вы также
можете установить интерпретатор вручную, если, например, доступна новая версия, которая пока что не
отображается в установщике Visual Studio.

NOTE
Visual Studio поддерживает Python версии 2.7, а также 3.5 и выше. Visual Studio можно использовать для
редактирования кода, написанного на языке Python других версий, но эти версии официально не
поддерживаются, а функции, такие как IntelliSense и отладка, могут не работать.

Для Visual Studio 2015 и более ранних версий нужно вручную установить один из
интерпретаторов.

Visual Studio (любой версии) автоматически обнаруживает все установленные интерпретаторы Python и
окружения для них, проверяя значения в реестре (согласно описанию регистрации Python в реестре
Windows 514 PEP). Установки Python обычно находятся в разделе
HKEY_LOCAL_MACHINE\SOFTWARE\Python (32-разрядная версия) и
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Python (64-разрядная версия), затем в узлах для
распределения, таких как PythonCore (CPython) и ContinuumAnalytics (Anaconda).

Если Visual Studio не сможет обнаружить установленное окружение, см. раздел Указание существующего
окружения вручную.

Visual Studio отображает все известные окружения в окне Окружения Python и автоматически
обнаруживает обновления для существующих интерпретаторов.

ИНТЕРПРЕТАТОР DESC RIP T IO N


ИНТЕРПРЕТАТОР DESC RIP T IO N

CPython Собственный и самый используемый интерпретатор


доступен в 32- и 64-разрядных версиях (рекомендуется
32-разрядная). Он предоставляет последние
возможности языка, максимальную совместимость
пакета Python, полную поддержку отладки и
взаимодействие с IPython. См. также статью о
сравнении Python 2 и Python 3. Имейте в виду , что Visual
Studio 2015 и более ранние версии не поддерживают
Python 3.6, и в них может появиться ошибка
Непод д ерживаемая версия Python 3.6 .
Используйте Python 3.5 или более раннюю версию.

IronPython Реализация .NET для Python (доступна 32- и 64-


разрядная версия), обеспечивающая взаимодействие с
C#, F# и Visual Basic, доступ к API-интерфейсам .NET,
стандартную отладку Python (но не отладку в
смешанном режиме C++) и отладку в смешанном
режиме IronPython и C#. Однако IronPython не
поддерживает виртуальные среды.

Anaconda Открытая платформа для анализа и обработки данных


на базе Python, которая включает в себя последнюю
версию CPython и большинство пакетов со сложной
установкой. Рекомендуем использовать этот
интерпретатор, если вы не можете определиться.

PyPy Реализация JIT для Python с высокопроизводительной


трассировкой, которая хорошо подходит для долго
выполняющихся программ и ситуаций, когда вы
обнаружили проблемы с производительностью,
которые не удается устранить другими способами.
Работает с Visual Studio, но имеет ограниченную
поддержку расширенных возможностей отладки.

Jython Реализация Python на виртуальной машине Java (JVM).


Аналогично IronPython, код, выполняемый в Jython,
может взаимодействовать с классами и библиотеками
Java, но не может использовать многие библиотеки,
предназначенные для CPython. Работает с Visual Studio,
но имеет ограниченную поддержку расширенных
возможностей отладки.

Сведения о новых способах обнаружения сред Python см. в статье PTVS Environment Detection
(Обнаружение среды PTVS) на сайте github.com.

Перемещение интерпретатора
Если вы переместите существующий интерпретатор в новое расположение с помощью средств файловой
системы, Visual Studio не сможет отследить изменение автоматически.

Если изначально вы указали расположение интерпретатора в окне Окружения Python , укажите


новое расположение, изменив параметры окружения на вкладке Настройка в этом же окне. См.
раздел Указание существующего окружения вручную.

Если вы установили интерпретатор с помощью установщика, выполните следующие действия для


переустановки интерпретатора в новом расположении:

1. Верните интерпретатор Python в исходное расположение.


2. Удалите интерпретатор с помощью установщика, который очистит записи в реестре.
3. Установите интерпретатор заново в нужном расположении.
4. Перезапустите Visual Studio и убедитесь, что новое расположение обнаружено автоматически и
указано вместо старого.

Такой процесс позволяет гарантировать, что в реестре правильно обновятся записи о расположении
интерпретатора, которое использует Visual Studio. Также установщик устраняет все возможные
побочные эффекты.

См. также раздел


Управление средами Python
Выбор интерпретатора для проекта
Использование файла requirements.txt для зависимостей
Пути поиска
Справочная информация по окну "Окружения Python"
Краткое руководство. Создание первого веб-
приложения Python с помощью Visual Studio
21.10.2020 • 14 minutes to read • Edit Online

В рамках этого краткого (на 5–10 минут ) знакомства с Visual Studio в качестве IDE для Python создается
простое веб-приложение Python на платформе Flask. Вы создадите проект при помощи дискретных
действий, которые помогут ознакомиться с базовыми функциями Visual Studio.

Установите Visual Studio бесплатно со страницы скачиваемых материалов Visual Studio, если еще не
сделали этого. В установщике выберите рабочую нагрузку Разработка на Python .

Установите Visual Studio бесплатно со страницы скачиваемых материалов Visual Studio, если еще не
сделали этого. В установщике выберите рабочую нагрузку Разработка на Python .

Создание проекта
Ниже приведены инструкции по созданию пустого проекта, который служит контейнером для
приложения:

1. Откройте Visual Studio 2017.


2. В верхней строке меню последовательно выберите Файл > Создать > Проект .
3. В диалоговом окне Новый проект введите в поле поиска в правом верхнем углу "Веб-проект
Python", в списке по центру выберите Веб- проект , присвойте проекту имя, например HelloPython, и
нажмите кнопку ОК.

Если вы не видите шаблон проекта Python, запустите Visual Studio Installer , выберите
Дополнительно > Изменить, выберите рабочую нагрузку Разработка Python , затем выберите
Изменить.
4. Новый проект откроется в обозревателе решений в правой области. Проект пока пуст , так как
он не содержит других файлов.

1. Запустите Visual Studio 2019.


2. На начальном экране выберите Создать новый проект .
3. В диалоговом окне Создать новый проект введите "Python веб" в поле поиска вверху, выберите
Веб- проект в среднем списке и нажмите Далее :

Если вы не видите шаблон проекта Python, запустите Visual Studio Installer , выберите
Дополнительно > Изменить, выберите рабочую нагрузку Разработка Python , затем выберите
Изменить.
4. В следующем диалоговом окне Настроить новый проект введите HelloPython в качестве имени
проекта , укажите расположение и выберите Создать. (Имя решения автоматически
устанавливается в соответствии с именем проекта .)

5. Новый проект откроется в обозревателе решений в правой области. Проект пока пуст , так как
он не содержит других файлов.

Вопрос. В чем преимущество создания проекта в Visual Studio для приложений Python?

Ответ. Приложения Python обычно определяются только с помощью файлов и папок, но такая простая
структура может стать громоздкой, так как приложения увеличиваются в размере и могут содержать
автоматически сгенерированные файлы, JavaScript для веб-приложений и т. д. Проект Visual Studio
помогает управлять этими сложными моментами. Проект (файл .pyproj) определяет все исходные файлы
и файлы содержимого, связанные с проектом, содержит сведения о сборке каждого файла, хранит
информацию для интеграции с системами управления версиями и помогает упорядочить приложение в
виде логических компонентов.

Вопрос. Что представляет собой " решение ", которое отображается в обозревателе
решений?

Ответ. Решение Visual Studio является контейнером, который помогает управлять одним или
несколькими связанными проектами как группой. В решении хранятся общие параметры конфигурации,
которые не предназначены специально для отдельных проектов. В проектах решения также могут
использоваться взаимные ссылки, то есть, когда при запуске одного проекта (приложения Python)
автоматически создается другой (например, расширение C++, используемое в приложении Python).
Установка библиотеки Flask
Веб-приложения на Python почти всегда используют одну из множества доступных библиотек Python для
обработки низкоуровневых процессов, таких как маршрутизация веб-запросов и формирование ответов.
С этой целью Visual Studio предоставляет множество шаблонов для веб-приложений, один из которых вы
будете использовать позднее при выполнении задач этого руководства.

А сейчас выполните следующие инструкции по установке библиотеки Flask в глобальном окружении по


умолчанию, которое используется для этого проекта в Visual Studio.

1. Разверните в проекте узел Окружения Python , чтобы увидеть среду по умолчанию для проекта.

2. Щелкните окружение правой кнопкой мыши и выберите команду Установить пакет Python . Эта
команда открывает вкладку Пакеты в окне Окружения Python .

3. В поле поиска введите flask и выберите результат pip install flask from PyPI . Подтвердите
запросы на права администратора и наблюдайте за ходом выполнения в окне Вывод в Visual
Studio. (Запрос на повышение прав выводится в том случае, если папка пакетов для глобальной
среды находится в защищенной области, такой как C:\Program Files.)

1. Разверните в проекте узел Окружения Python , чтобы увидеть среду по умолчанию для проекта.

2. Щелкните окружение правой кнопкой мыши и выберите команду Управлять пакетами Python...
. Эта команда открывает вкладку Пакеты (PyPI) в окне Окружения Python .
3. В поле поиска введите "flask". Если Flask отображается под полем поиска, этот шаг можно
пропустить. В противном случае выберите Запустить команду: pip install flask . Подтвердите
запросы на права администратора и наблюдайте за ходом выполнения в окне Вывод в Visual
Studio. (Запрос на повышение прав выводится в том случае, если папка пакетов для глобальной
среды находится в защищенной области, такой как C:\Program Files.)

4. После установки библиотека появится в среде в обозревателе решений. Это означает , что ее
можно использовать в коде Python.

NOTE
Вместо установки библиотек в глобальном окружении разработчики обычно создают "виртуальное окружение",
в котором устанавливаются библиотеки для определенного проекта. Шаблоны Visual Studio обычно
обеспечивают такую возможность, как описано в кратком руководстве по созданию проекта Python с помощью
шаблона.
Вопрос. Где можно подробнее узнать о других доступных пакетах Python?

Ответ. Перейдите к странице индекса пакетов Python.

Добавление файла кода


Теперь можно добавить немного кода на Python, чтобы реализовать простейшее веб-приложение.

1. В обозревателе решений щелкните правой кнопкой мыши проект и последовательно выберите


Добавить > Новый элемент .

2. В открывшемся диалоговом окне выберите элемент Пустой файл Python , присвойте файлу имя
app.py и нажмите кнопку Добавить. Файл автоматически откроется в редакторе кода Visual Studio.
3. Скопируйте следующий код и вставьте его в app.py:

from flask import Flask

# Create an instance of the Flask class that is the WSGI application.


# The first argument is the name of the application module or package,
# typically __name__ when using a single module.
app = Flask(__name__)

# Flask route decorators map / and /hello to the hello function.


# To add other resources, create functions that generate the page contents
# and add decorators to define the appropriate resource locators for them.

@app.route('/')
@app.route('/hello')
def hello():
# Render the page
return "Hello Python!"

if __name__ == '__main__':
# Run the app server on localhost:4449
app.run('localhost', 4449)

4. Возможно, вы заметили, что в диалоговом окне Добавить > Новый элемент отображается
много других типов файлов, которые можно добавить в проект Python, включая класс Python, пакет
Python, модульный тест Python, файлы web.config и многое другое. Как правило, эти так
называемые шаблоны элементов прекрасно подходят для быстрого создания файлов при помощи
полезного стандартного кода.

Вопрос. Где можно подробнее узнать о Flask?

Ответ. Ознакомьтесь с документацией по Flask. Начать можно с краткого руководства по Flask.

Запуск приложения
1. В обозревателе решений щелкните правой кнопкой мыши файл app.py и выберите пункт Set as
star tup file (Задать как файл запуска). С помощью этой команды файл кода задается как
запускаемый в Python при запуске приложения.
2. В обозревателе решений щелкните проект правой кнопкой мыши и выберите пункт Свойства .
Затем перейдите на вкладку Отладка и присвойте свойству Номер порта значение 4449 .
Благодаря этому в Visual Studio будет запускаться браузер, используя localhost:4449 , чтобы
обеспечить соответствие аргументам app.run в коде.

3. Выберите команду Отладка > Запуск без отладки (CTRL +F5 ), позволяющую сохранить
изменения в файлах и запустить приложение.
4. Появится командное окно с сообщением Запуск в https://localhost:4449 , а затем в окне браузера
откроется узел localhost:4449 и вы увидите сообщение "Hello, Python!" В командном окне также
отобразится запрос GET с состоянием 200.

Если браузер не открывается автоматически, запустите выбранный вами браузер и перейдите к


localhost:4449 .
Если в командном окне отображается только интерактивная оболочка Python или если это окно
появляется на экране и сразу исчезает , убедитесь в том, что файл app.py был задан в качестве
запускаемого на шаге 1 выше.

5. Перейдите к , чтобы проверить, работает ли декоратор для ресурса /hello . В


localhost:4449/hello
командном окне снова отобразится запрос GET с состоянием 200. Вы можете попробовать и
несколько других URL-адресов. Вы увидите, что в командном окне для них отображается код
состояния 404.

6. Закройте командное окно, чтобы остановить приложение, а затем закройте окно браузера.
Вопрос. В чем разница между командами " Запуск без отладки" и " Начать отладку"?

Ответ. Команда Начать отладку используется, чтобы запустить приложение в контексте отладчика
Visual Studio, что позволяет задавать точки останова, просматривать переменные и осуществлять
построчное выполнение кода. С отладчиком приложения могут работать медленнее, так как для отладки
используются различные обработчики. С помощью команды Запуск без отладки, напротив,
приложение запускается напрямую, как если бы использовалась командная строка. При этом отсутствует
контекст отладки. Браузер запускается автоматически, и выполняется переход к URL-адресу, указанному
на вкладке свойств проекта Отладка .

Следующие шаги
Поздравляем с запуском вашего первого приложения Python из Visual Studio, в процессе которого вы
немного ознакомились с особенностями использования Visual Studio в качестве среды IDE для Python!

Развертывание приложения в Службе приложений Azure

Так как приведенные в этом руководстве инструкции довольно общие, вы, вероятно, догадались, что их
можно и нужно автоматизировать. Такая автоматизация выполняется при помощи шаблонов проектов
Visual Studio. Изучите краткое руководство по созданию проекта Python на основе шаблона, чтобы узнать,
как создается веб-приложение, похожее на созданное вами в рамках этой статьи, но с меньшим
количеством шагов.

Чтобы перейти к более полному учебнику по работе с Python в Visual Studio, включая использование
интерактивного окна, отладку, визуализацию данных и работу с Git, выберите Учебник. Начало работы с
Python в Visual Studio.
Более подробно ознакомиться с возможностями Visual Studio можно по приведенным ниже ссылкам.

Сведения о шаблонах веб-приложений Python в Visual Studio.


Сведения об отладке Python
Общие сведения об интегрированной среде разработки Visual Studio.
Краткое руководство. Создание проекта Python на
основе шаблона в Visual Studio
21.10.2020 • 6 minutes to read • Edit Online

Установив поддержку Python в Visual Studio, можно легко создать проект Python с помощью различных
шаблонов. При помощи этого краткого руководства вы создадите простое приложение Flask на основе
шаблона. Полученный проект похож на созданный вручную при помощи краткого руководства по
созданию веб-приложения с использованием Flask.

1. Запустите Visual Studio.


2. В верхней строке меню последовательно выберите Файл > Создать > Проект , а затем в
диалоговом окне Новый проект выполните поиск по фразе "пустой веб-проект flask", выберите
шаблон Пустой веб- проект Flask в списке по центру, укажите имя проекта и щелкните ОК:

3. В Visual Studio отобразится диалоговое окно с сообщением Для этого проекта требуются
внешние пакеты. Это диалоговое окно появляется, потому что шаблон содержит файл
requirements.txt и в нем указана зависимость от Flask. Visual Studio может выполнять автоматическую
установку пакетов. Вы можете выбрать их установку в виртуальном окружении. Устанавливать
пакеты в виртуальном окружении предпочтительнее, чем в глобальном. Поэтому, чтобы
продолжить, выберите Install into a vir tual environment (Установить в виртуальном окружении).
4. В Visual Studio отобразится диалоговое окно Добавление виртуального окружения. Примите
значение по умолчанию, выберите Создать и согласитесь на все запросы на повышение прав.

TIP
При запуске проекта настоятельно рекомендуем сразу же создать виртуальное окружение, так как оно
требуется для большинства шаблонов Visual Studio. Виртуальные окружения будут точно соответствовать
требованиям вашего проекта в динамике по мере добавления и удаления библиотек. Вы можете без труда
создать файл requirements.txt и использовать его для переустановки зависимостей на другие компьютеры
разработки (как при использовании системы управления версиями), а также при развертывании проекта на
рабочем сервере. Дополнительные сведения о виртуальных окружениях и их преимуществах см. в разделе
Использование виртуальных окружений и статье Управление необходимыми пакетами с помощью
requirements.txt.

5. Когда Visual Studio создаст это окружение, найдите в обозревателе решений файлы app.py и
requirements.txt. Откройте app.py и убедитесь, что шаблон создал такой же код, как в кратком
руководстве по созданию веб-приложения с помощью Flask, с парой дополнительных разделов. Весь
приведенный ниже код создается с помощью шаблона, поэтому в app.py ничего не нужно добавлять
вручную.

Код начинается с необходимых операций импорта:

from flask import Flask


app = Flask(__name__)

Далее — следующая строка, которая может быть полезна при развертывании приложения на веб-
узле:

wsgi_app = app.wsgi_app

Затем следует декоратор маршрута в простой функции, которая определяет представление:

@app.route('/')
def hello():
"""Renders a sample page."""
return "Hello World!"
Наконец, код запуска, который позволяет задать узел и порт с помощью переменных среды без
необходимости в их жестком программировании. Такой код позволяет без труда управлять
конфигурацией на компьютерах разработки и на рабочих компьютерах без изменения кода:

if __name__ == '__main__':
import os
HOST = os.environ.get('SERVER_HOST', 'localhost')
try:
PORT = int(os.environ.get('SERVER_PORT', '5555'))
except ValueError:
PORT = 5555
app.run(HOST, PORT)

6. Чтобы запустить приложение и открыть в браузере страницу localhost:5555 , последовательно


выберите Отладка > Запуск без отладки.

Вопрос. Есть ли другие шаблоны Python в Visual Studio?

Ответ. Для установленной рабочей нагрузки Python Visual Studio предоставляет различные шаблоны
проектов, в том числе шаблоны для веб-платформ Flask, Bottle и Django, облачных служб Azure, различных
сценариев машинного обучения, и даже шаблон для создания проекта на основе существующей структуры
папок, содержащей приложение Python. Вы можете получить к ним доступ через диалоговое окно Файл >
Создать > Проект , выбрав узел языка Python и его дочерние узлы.

Visual Studio также предоставляет широкий набор файлов или шаблонов элементов для быстрого создания
класса Python, пакета Python, модульного теста Python, файлов web.config и многого другого. Открыв
проект Python, вы можете получить доступ к шаблонам элементов при помощи команды меню Проект >
Добавить новый элемент . См. справочник по шаблонам элементов.

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

Вопрос. Можно ли также использовать шаблоны Cookiecutter?

Ответ. Да. По сути, Visual Studio предоставляет прямую интеграцию с Cookiecutter, о которой вы можете
узнать в кратком руководстве по созданию проекта из шаблона Cookiecutter.

Следующие шаги
Учебник. Работа с Python в Visual Studio

См. также
Определение существующего интерпретатора Python вручную
Установка поддержки Python в Visual Studio 2015 и более ранних версиях
Расположения установки
Краткое руководство. Открытие и выполнение
кода Python в папке
21.10.2020 • 6 minutes to read • Edit Online

Установив поддержку Python в Visual Studio 2019, вы сможете легко перенести существующий код Python
в Visual Studio 2019 без необходимости создавать проект Visual Studio.

NOTE
В Visual Studio 2017 и более ранних версиях для выполнения кода Python нужно всегда создавать проект Visual
Studio, что можно легко сделать с помощью встроенного шаблона проекта. Подробнее см. в кратком
руководстве по созданию проекта Python на основе существующего кода.

1. В этом пошаговом руководстве описано, как использовать любую папку с кодом Python. Чтобы в
точности повторить все действия из описанного ниже примера, клонируйте репозиторий GitHub
gregmalcolm/python_koans на локальный компьютер, выполнив команду
git clone https://github.com/gregmalcolm/python_koans в соответствующей папке.

2. Запустите Visual Studio 2019 и в начальном окне выберите Открыть в нижней части столбца
Приступить к работе . Если вы уже запустили Visual Studio, просто выберите Файл > Открыть >
Папка .

3. Перейдите к папке с кодом Python и щелкните Выбрать папку. Если вы используете код
python_koans, не забудьте выбрать папку python3 в клонированной папке.
4. Visual Studio отображает папку в обозревателе решений в виде представления папки. Здесь
вы можете разворачивать и сворачивать папки с помощью стрелок в левой части имени папки:

5. Когда вы открываете папку Python, Visual Studio создает несколько скрытых папок для управления
параметрами, связанными с проектом. Чтобы увидеть эти папки (и любые другие скрытые файлы и
папки, например папку .git), нажмите кнопку Показать все файлы на панели инструментов:
6. Чтобы запустить код, определите файл запуска (основной файл программы). В нашем примере
используется файл запуска contemplate-koans.py. Щелкните этот файл правой кнопкой мыши и
выберите пункт Задать как файл запуска .

IMPORTANT
Если выбранный элемент запуска не находится в открытой корневой папке, добавьте в JSON-файл
конфигурации запуска строку , как описано в разделе о настройке рабочего каталога.

7. Запустите код, нажав клавиши CTRL +F5 или выбрав Отладка > Запуск без отладки. Вы также
можете нажать на панели инструментов кнопку, на которой изображен символ воспроизведения.
Эта кнопка запускает код в отладчике Visual Studio. Во всех случаях Visual Studio обнаружит , что
выбранный элемент запуска является файлом Python, и автоматически выполнит код в окружении
Python по умолчанию. (Это окружение отображается справа от элемента запуска на панели
инструментов.)

8. Выходные данные программы отображаются в отдельном командном окне:

9. Чтобы выполнить код в другом окружении, выберите нужное окружение из раскрывающегося


списка на панели инструментов, а затем снова запустите элемент запуска.

10. Чтобы закрыть папку в Visual Studio, выберите в меню команду Файл > Закрыть папку.

Настройка рабочего каталога


По умолчанию Visual Studio выполняет проекты Python, открытые в виде папки, в корне этой самой
папки. Но код вашего проекта может ожидать, что Python выполняется во вложенной папке.
Предположим, что вы открыли корневую папку репозитория python_koans и выбрали в качестве
элемента запуска файл python3/contemplate-koans.py. Если вы теперь выполните код, появится
сообщение о том, что не удается найти файл koans.txt. Эта ошибка связана с тем, что contemplate-koans.py
ожидает выполнение Python в папке python3, а не корневой папке репозитория.

В таком случае следует добавить в JSON-файл конфигурации запуска дополнительную строку, которая
указывает рабочий каталог:

1. Щелкните правой кнопкой мыши файл запуска Python ( .py) в обозревателе решений и
выберите Параметры отладки и запуска .
2. В открывшемся диалоговом окне Запуск отладчика выберите вариант По умолчанию и
щелкните Выбрать.

NOTE
Если вы не видите здесь вариант По умолчанию, убедитесь, что вы выбрали команду Параметры
отлад ки и запуска именно для файла Python с расширением .py. В Visual Studio тип файла определяет
отображаемые варианты действий в отладчике.

3. Visual Studio откроет файл с именем launch.vs.json, расположенный в скрытой папке .vs. Этот файл
описывает контекст отладки для проекта. Чтобы указать рабочую папку, добавьте значение для
параметра "workingDirectory" , как в "workingDirectory": "python3" для примера python-koans:
{
"version": "0.2.1",
"defaults": {},
"configurations": [
{
"type": "python",
"interpreter": "(default)",
"interpreterArguments": "",
"scriptArguments": "",
"env": {},
"nativeDebug": false,
"webBrowserUrl": "",
"project": "python3\\contemplate_koans.py",
"name": "contemplate_koans.py",
"workingDirectory": "python3"
}
]
}

4. Сохраните файл и снова запустите программу. Теперь она выполняется в указанной папке.

Следующие шаги
Учебник. Работа с Python в Visual Studio

См. также
Краткое руководство. Создание проекта Python на основе существующего кода.
Краткое руководство. Создание проекта Python из репозитория.
Определение существующего интерпретатора Python вручную
Краткое руководство. Создание проекта Python на
основе существующего кода
21.10.2020 • 3 minutes to read • Edit Online

Установив поддержку Python в Visual Studio, можно легко перенести существующий код Python в проект
Visual Studio.

IMPORTANT
Описанный здесь процесс не перемещает и не копирует исходные файлы. Если вы хотите работать с копией,
сначала создайте дубликат папки.

1. Запустите Visual Studio и последовательно выберите Файл > Создать > Проект .
2. В диалоговом окне Создание проекта выполните поиск по запросу "Python", выберите шаблон На
основе существующего кода Python , укажите имя и расположение проекта, а затем нажмите
кнопку ОК.

3. В появившемся мастере задайте путь к существующему коду, фильтр для типов файлов и любые
пути поиска, необходимые для проекта, а затем нажмите кнопку Далее . Если вы не знаете пути
поиска, оставьте это поле пустым.

4. В следующем диалоговом окне выберите файл запуска для проекта и нажмите кнопку Далее . (При
необходимости выберите среду; в противном случае оставьте значения по умолчанию.) Обратите
внимание, что в диалоговом окне отображаются только файлы в корневой папке. Если нужный файл
находится во вложенной папке, не указывайте файл запуска и укажите его позже в обозревателе
решений (инструкции см. ниже).
5. Выберите место, где следует сохранить файл проекта (файл .pyproj на диске). При необходимости
можно также включить автоматическое обнаружение виртуальных сред и настроить проект для
разных веб-платформ. Если вы не уверены, оставьте для этих параметров значения по умолчанию.

6. Нажмите кнопку Готово. Visual Studio создаст проект и откроет его в обозревателе решений.
Если вы хотите переместить PYPROJ-файл в другое место, выберите его в обозревателе решений
и щелкните Файл > Сохранить как . Это действие обновляет ссылки на файлы в проекте, но не
перемещает файлы с кодом.

7. Чтобы указать другой файл запуска, найдите его в обозревателе решений, щелкните его правой
кнопкой мыши и выберите пункт Задать как файл запуска .

При необходимости запустите программу, нажав клавиши CTRL +F5 или последовательно выбрав
Отладка > Запуск без отладки.

Дальнейшие действия
Руководство. Работа с Python в Visual Studio

См. также раздел


Определение существующего интерпретатора Python вручную
Установка поддержки Python в Visual Studio 2015 и более ранних версиях
Расположения установки
Краткое руководство. Клонирование репозитория
с кодом Python в Visual Studio
21.10.2020 • 7 minutes to read • Edit Online

Установив поддержку Python в Visual Studio, можно добавить расширение GitHub для Visual Studio. Оно
позволяет легко клонировать репозиторий с кодом Python и создать на его основе проект из среды IDE.
Кроме того, вы в любое время можете клонировать репозитории в командной строке и затем работать с
ними в Visual Studio.

Установите расширение GitHub для Visual Studio


Чтобы работать с репозиториями GitHub из Visual Studio, нужно установить расширение GitHub для Visual
Studio. Для этого запустите установщик Visual Studio, выберите Изменить и откройте вкладку Отдельные
компоненты. Прокрутите содержимое вниз до раздела Средства для работы с кодом, выберите
компонент Расширение GitHub для Visual Studio , а затем выберите Изменить.

Работа с GitHub в Visual Studio


1. Запустите Visual Studio.
2. Последовательно выберите Вид > Team Explorer , чтобы открыть окно Team Explorer , в котором вы
можете подключиться к GitHub или Azure Repos либо клонировать репозиторий. (если показанная на
изображении ниже страница Подключение не отображается, щелкните значок подключения на
верхней панели инструментов и вы перейдете на эту страницу).
3. В разделе Локальные репозитории Git выберите команду Клонировать, в поле URL-адреса
введите https://github.com/gregmalcolm/python_koans , укажите папку для клонируемых файлов и
нажмите кнопку Клонировать.

TIP
В папку , указанную в Team Explorer , будут приниматься клонируемые файлы. В отличие от использования
команды git clone , клонирование в Team Explorer не создает автоматически вложенную папку с именем
репозитория.

4. По завершении клонирования в списке Локальные репозитории Git появится имя репозитория.


Дважды щелкните это имя, чтобы перейти к панели мониторинга репозитория в Team Explorer .

5. В разделе Решения выберите Создать.


6. В появившемся диалоговом окне Создание проекта перейдите к языку Python (или выполните
поиск по слову Python) выберите вариант На основе существующего кода Python , укажите имя
проекта, задайте папку репозитория в поле Расположение и щелкните ОК. В появившемся мастере
выберите Готово.

7. Последовательно выберите элементы меню Вид > Обозреватель решений.


8. В обозревателе решений разверните узел python3 , щелкните правой кнопкой мыши файл
contemplate_koans.py и выберите пункт Set as Star tup File (Задать как файл запуска). Таким
образом вы указываете, какой файл среда Visual Studio должна использовать при запуске проекта.

9. Выберите пункт меню Проект > Свойства Koans , откройте вкладку Общие и задайте каталог
python3 в качестве рабочей папки. Этот шаг является обязательным, так как по умолчанию в Visual
Studio в качестве рабочей папки используется корневой каталог проекта, а не папка с файлом
запуска (python3\contemplate_koans.py, который вы видите в свойствах проекта). Код программы
ищет файл koans.txt в рабочем каталоге, поэтому если не изменить это значение, во время
выполнения произойдет ошибка.
10. Чтобы запустить программу, нажмите клавиши CTRL +F5 или последовательно выберите Отладка
> Запустить без отладки. Если происходит ошибка FileNotFoundError для файла koans.txt,
проверьте рабочую папку, как описано на предыдущем шаге.

11. Если программа выполняется успешно, в строке 17 файла python3/koans/about_asserts.py должна


создаваться ошибка утверждения. Это сделано намеренно: в программу умышленно внесены ошибки,
чтобы вы учились работе с Python, исправляя их. (Дополнительные сведения можно найти на сайте
проекта Ruby Koans, который послужил источником вдохновения для Python Koans.)

12. Откройте файл python3/koans/about_asserts.py, перейдя к нему в обозревателе решений и


дважды щелкнув его. Обратите внимание на то, что по умолчанию в редакторе номера строк не
показаны. Чтобы изменить это поведение, выберите пункт меню Сервис > Параметры, в нижней
части диалогового окна щелкните Показать все параметры, а затем перейдите к узлу
Текстовый редактор > Python > Общие и установите флажок Номера строк .

13. Исправьте ошибку, изменив аргумент False в строке 17 на True . Строка должна выглядеть
следующим образом:

self.assertTrue(True) # This should be True


14. Запустите программу еще раз. Если в Visual Studio появятся предупреждения об ошибках, выберите
ответ Да , чтобы продолжить выполнение кода. После этого начнется первая проверка и программа
должна остановиться на следующей ошибке. При необходимости продолжайте исправлять ошибки и
повторно запускать программу.

IMPORTANT
С помощью этого краткого руководства вы создали прямой клон репозитория python_koans в GitHub. Такой
репозиторий защищен автором от непосредственного изменения, поэтому попытка зафиксировать в нем
изменения завершится неудачей. На практике разработчики вместо этого создают вилку такого репозитория в
собственной учетной записи GitHub, вносят в нее изменения, а затем создают запросы на вытягивание для
отправки изменений в исходный репозиторий. При наличии собственной вилки укажите ее URL-адрес вместо URL-
адреса исходного репозитория, который использовался ранее.

Следующие шаги
Учебник. Работа с Python в Visual Studio

См. также
Определение существующего интерпретатора Python вручную
Как установить поддержку Python в Visual Studio под управлением Windows
Расположения установки
Краткое руководство. Создание проекта из
шаблона Cookiecutter
21.10.2020 • 2 minutes to read • Edit Online

После установки поддержки Python в Visual Studio можно легко создать проект на основе шаблона
Cookiecutter, включая множество шаблонов, опубликованных в GitHub. Cookiecutter предоставляет
графический пользовательский интерфейс для поиска шаблонов, ввода их параметров и создания проектов
и файлов. В Visual Studio 2017 и более поздних версий этот компонент уже встроен. В более ранних
версиях Visual Studio его нужно устанавливать отдельно.

1. Для этого краткого руководства сначала установите дистрибутив Python Anaconda3, который
включает в себя необходимые пакеты Python для приведенного здесь шаблона Cookiecutter.
Запустите установщик Visual Studio, выберите Изменить, разверните параметры разработки
Python в правой части экрана и выберите Anaconda3 (32- или 64-разрядную версию). Имейте в
виду, что установка может занять некоторое время в зависимости от скорости Интернета, но это
самый простой способ установить необходимые пакеты.

2. Запустите Visual Studio.


3. Выберите Файл > Создать > Из Cookiecutter . При выборе этой команды в Visual Studio
открывается окно с шаблонами.

4. Выберите шаблон Microsoft/python-sklearn-classifier-cookiecutter и щелкните Далее . (Этот


процесс может занять несколько минут при первом использовании конкретного шаблона, так как
Visual Studio устанавливает необходимые пакеты Python.)
5. В следующим шаге укажите расположение для нового проекта в поле Создать в и нажмите
Создать и открыть проект .

6. По завершении процесса появится сообщение Файлы успешно созданы с помощью шаблона...


. Проект автоматически открывается в обозревателе решений.
7. Чтобы запустить программу, нажмите клавиши CTRL +F5 или последовательно выберите Отладка >
Запустить без отладки.

Следующие шаги
Учебник. Работа с Python в Visual Studio

См. также
Использование расширения Cookiecutter
Определение существующего интерпретатора Python вручную
Установка поддержки Python в Visual Studio 2015 и более ранних версиях
Расположения установки
Установка поддержки Python в Visual Studio
21.10.2020 • 2 minutes to read • Edit Online

NOTE
Сейчас Python поддерживается только в Visual Studio для Windows. В Mac и Linux его поддержка реализуется
посредством Visual Studio Code.

1. Скачайте и запустите последнюю версию Visual Studio Installer для Windows (поддержка Python
имеется в выпуске 15.2 и более поздних). Если вы уже установили Visual Studio, запустите установщик
Visual Studio и перейдите к шагу 2.
Установка Visual Studio Community

TIP
Выпуск Community предназначен для индивидуальных разработчиков, использования при аудиторном
обучении и в научных исследованиях , а также разработки решений с открытым кодом. Если программу
планируется использовать в других целях , установите Visual Studio Professional или Visual Studio Enterprise.

2. В установщике предлагается список рабочих нагрузок, то есть групп связанных параметров для
определенных целей разработки. Для Python выберите рабочую нагрузку Разработка на Python и
нажмите Установить.

3. Чтобы быстро протестировать поддержку Python, запустите Visual Studio, нажмите клавиши ALT +I ,
чтобы открыть интерактивное окно Python , и введите 2+2 . Если вы не увидите результат 4 ,
проверьте выполненные действия.

Следующий шаг
Шаг 1. Создание проекта Python

См. также раздел


Определение существующего интерпретатора Python вручную
Установка поддержки Python в Visual Studio 2015 и более ранних версиях
Расположения установки
Руководство. Работа с Python в Visual Studio
21.10.2020 • 7 minutes to read • Edit Online

Python — это популярный язык программирования, который отличается надежностью, гибкостью и


простотой освоения. Его можно бесплатно использовать на любых операционных системах, и он
поддерживается широким сообществом разработчиков. Кроме того, для него доступно множество
бесплатных библиотек. Python поддерживает все способы разработки, включая веб-приложения, веб-
службы, классические приложения, скрипты и научные вычисления. Его используют многие
университеты, ученые, профессиональные и непрофессиональные разработчики.

Visual Studio обеспечивает первоклассную поддержку языка Python. В этом учебнике рассматриваются
перечисленные ниже действия.

Шаг 0. Установка
Шаг 1. Создание проекта Python (эта статья).
Шаг 2. Написание и выполнение кода для ознакомления с функцией IntelliSense в Visual Studio на
практике.
Шаг 3. Создание дополнительного кода в интерактивном окне REPL.
Шаг 4. Выполнение готовой программы в отладчике Visual Studio
Шаг 5. Установка пакетов и управление средами Python.
Шаг 6. Работа с Git.

предварительные требования
Visual Studio 2017 с установленной рабочей нагрузкой Python. См. дополнительные сведения об
использовании Python в Visual Studio.

Visual Studio 2019 с установленной рабочей нагрузкой Python. См. дополнительные сведения об
использовании Python в Visual Studio.

Вы также можете использовать более раннюю версию Visual Studio с установленным подключаемым
модулем Инструменты Python для Visual Studio. См. руководство по установке поддержки Python в Visual
Studio.

Шаг 1. Создание проекта Python


С помощью проекта в Visual Studio производится управление всеми файлами, составляющими
приложение, включая исходный код, ресурсы, конфигурации и другие данные. Проект формализует и
обеспечивает взаимосвязь между всеми файлами проекта, а также между ними и внешними ресурсами,
которые используются несколькими проектами. Таким образом, благодаря проектам расширять и
развивать приложение становится гораздо проще, чем когда вы контролируете взаимосвязи в
произвольных папках, скриптах, текстовых файлах или даже у себя в голове.

В этом учебнике вы начнете работу с простого проекта, содержащего один пустой файл кода.

1. В Visual Studio выберите Файл > Создать > Проект (CTRL +SHIFT +N ), после чего откроется
диалоговое окно Создание проекта . В нем можно просмотреть шаблоны для разных языков,
после чего выбрать один из них для вашего проекта и указать, куда среда Visual Studio должна
поместить файлы.

2. Чтобы просмотреть шаблоны Python, выберите Установленные > Python в области слева или
выполните поиск по слову "Python". Поиск — это отличный способ найти шаблон, если вы не
помните, где он находится в дереве языков.

Обратите внимание на то, что поддержка Python в Visual Studio включает в себя ряд шаблонов
проектов, включая веб-приложения на платформах Bottle, Flask и Django. Однако для целей
данного пошагового руководства мы начнем с пустого проекта.

3. Выберите шаблон Приложение Python , укажите имя проекта и нажмите кнопку ОК.
4. Через несколько секунд в окне обозревателя решений Visual Studio (1) будет показана
структура проекта. Файл кода по умолчанию откроется в редакторе (2). Кроме того, откроется
окно Свойства (3), в котором приводятся дополнительные сведения для элемента, выбранного в
обозревателе решений, включая его точное расположение на диске.

5. Потратьте несколько минут на знакомство с обозревателем решений, который служит для


просмотра файлов и папок проекта.
(1) Полужирным шрифтом выделен ваш проект , имя которого вы указали в окне Создание
проекта . На диске этот проект представлен файлом .pyproj в папке проекта.

(2) На верхнем уровне находится решение, имя которого по умолчанию совпадает с именем
проекта. Решение, представленное на диске файлом SLN, является контейнером для одного или
нескольких связанных проектов. Например, если вы создаете расширение C++ для приложения
Python, этот проект C++ может входить в то же решение. Решение также может включать в себя
проект веб-службы и проекты специальных тестовых программ.

(3) В проекте можно увидеть файлы исходного кода. В нашем примере это один файл .py. При
выборе файла его свойства приводятся в окне Свойства . Если дважды щелкнуть файл, он
откроется в соответствующем средстве.

(4) Кроме того, в проекте есть узел Окружения Python . Если развернуть его, можно увидеть
доступные интерпретаторы Python. Развернув узел интерпретатора, вы увидите библиотеки,
установленные в этой среде (5).

Щелкните правой кнопкой мыши любой узел или элемент в обозревателе решений, чтобы
открыть меню с применимыми командами. Например, с помощью команды Переименовать
можно изменить имя любого узла или элемента, включая проект и решение.

Следующий шаг
Написание и запуск кода

Дополнительные подробности
Проекты Python в Visual Studio
Сведения о языке Python на сайте python.org
Python для начинающих (python.org)
Шаг 2. Написание и запуск кода
21.10.2020 • 5 minutes to read • Edit Online

Предыдущий шаг: создание проекта Python

Хотя управление файлами проекта осуществляется в обозревателе решений, с содержимым файлов,


например файлов исходного кода, вы обычно работаете в окне редактора. Редактор определяет тип
редактируемого файла, включая язык программирования (на основе расширения файла), и обеспечивает
характерные для этого языка возможности, например раскраску синтаксических конструкций и
автоматическое завершение с помощью IntelliSense.

1. После создания проекта Python Application в редакторе Visual Studio откроется пустой файл по
умолчанию с именем PythonApplication1.py.

2. В редакторе начните вводить print("Hello, Visual Studio") . По мере ввода функция IntelliSense в
Visual Studio покажет варианты автозавершения. Выделенный параметр в раскрывающемся списке —
это вариант завершения по умолчанию, который применяется при нажатии клавиши TAB .
Завершения очень удобны при использовании длинных инструкций или идентификаторов.

3. Функция IntelliSense отображает различные сведения в зависимости от используемой инструкции,


вызываемой функции и т. д. Если в функции print ввести ( после print для указания вызова
функции, будет показана полная информация об использовании этой функции. Во всплывающем
окне IntelliSense также полужирным шрифтом выделяется текущий аргумент (в этом случае это
value ):

4. Завершите инструкцию следующим образом:

print("Hello, Visual Studio")

5. Обратите внимание на раскраску синтаксических конструкций, которая позволяет отличить


оператор print от аргумента "Hello Visual Studio" . Кроме того, на время удалите последний
символ " в строке и обратите внимание на то, как код, содержащий синтаксические ошибки,
подчеркивается в Visual Studio красной линией. Чтобы исправить ошибку, снова добавьте символ " .

TIP
Visual Studio предоставляет полный контроль над внешним видом и поведением среды разработки, что
позволяет настроить ее, как вам нравится. Выберите пункт меню Сервис > Параметры и изучите
параметры на вкладках Сред а и Текстовый ред актор. По умолчанию вы видите ограниченный набор
параметров. Чтобы просмотреть все параметры для каждого языка программирования, щелкните
Показать все параметры внизу диалогового окна.

6. Чтобы выполнить весь написанный код, нажмите клавиши CTRL +F5 или выберите команду меню
Отладка > Запуск без отладки. Если в коде все еще есть ошибки, в Visual Studio будут выведены
предупреждения.

7. При запуске программы появляется окно консоли с результатами, так же как при запуске
интерпретатора Python с файлом PythonApplication1.py из командной строки. Чтобы закрыть это
окно и вернуться в редактор Visual Studio, нажмите любую клавишу.

8. Помимо инструкций и функций, IntelliSense выводит варианты для завершения операторов Python
import и from . Эти варианты позволяют легко узнать, какие модули доступны в вашей среде и какие
члены доступны в определенном модуле. В редакторе удалите строку print и начните вводить
import . Список модулей появляется после ввода пробела:

9. Завершите строку, введя или выбрав sys .


10. В следующей строке введите from , чтобы снова вывести список модулей:
11. Выберите или введите math , а затем пробел и import , чтобы отобразился список элементов модуля:

12. Затем импортируйте элементы sin , cos и radians . Обратите внимание, как для каждого из них
будут выводиться варианты автозавершения. По завершении код должен выглядеть следующим
образом:

import sys
from math import cos, radians

TIP
Принцип функции завершения заключается в следующем — по мере ввода появляются подстроки со
словами, в которых совпадают части или буквы в начале слова, и даже отображаются пропущенные
символы. Дополнительные сведения см. в руководстве по редактированию кода.

13. Добавьте еще код для печати значений косинуса в интервале до 360 градусов.

for i in range(360):
print(cos(radians(i)))

14. Снова запустите программу, нажав клавиши CTRL +F5 или выбрав пункт меню Отладка > Запуск
без отладки. По завершении закройте окно вывода.

Следующий шаг
Использование интерактивного окна REPL

Дополнительные подробности
Изменить код
Форматирование кода
Рефакторинг кода
Использование PyLint
Шаг 3. Использование интерактивного окна REPL
21.10.2020 • 8 minutes to read • Edit Online

Предыдущий шаг. Написание и запуск кода

Интерактивное окно Visual Studio для Python предоставляет цикл REPL (read–eval–print loop), который
значительно сокращает обычный цикл "редактирование — сборка — отладка". Интерактивное окно
предоставляет все возможности REPL, доступные в командной строке Python. Оно также очень упрощает
обмен кодом с помощью исходных файлов в редакторе Visual Studio. Выполнение этой задачи с помощью
командной строки представляет сложность.

NOTE
Для решения проблем с REPL обязательно установите пакеты ipython и ipykernel . Сведения об установке
пакетов см. в статье Справочная информация по вкладкам окна "Окружения Python".

1. Чтобы открыть интерактивное окно, в обозревателе решений щелкните правой кнопкой


мыши среду Python проекта (например, Python 3.6 (32- разрядная версия) , как на рисунке выше)
и выберите пункт Открыть интерактивное окно. Также можно выбрать Вид > Другие окна >
Интерактивные окна Python в главном меню Visual Studio.

2. Интерактивное окно открывается под окном редактора со стандартной командной строкой REPL
Python >>> . С помощью раскрывающегося списка Окружения можно выбрать определенный
интерпретатор для работы. Кроме того, часто требуется увеличить интерактивное окно. Для
этого можно перетащить разделитель между двумя окнами:
TIP
Размеры любых окон в Visual Studio можно изменять, перетаскивая граничные разделители. Вы также
можете перетаскивать окна за пределы окна Visual Studio и изменять их расположение внутри этого окна,
как вам нравится. Подробные сведения см. в статье Настройка макетов окон.

3. Введите несколько операторов, например print("Hello, Visual Studio") , и выражений, например


123/456 , чтобы сразу увидеть результаты:

4. Когда вы начнете вводить многострочный оператор, например определение функции, в


интерактивном окне будет отображаться приглашение ... для продолжения строк, которое, в
отличие от командной строки REPL, поддерживает автоматический отступ:

5. Все элементы, вводимые в интерактивном окне, записываются в журнал. В нем также, в отличие
от командной строки REPL, сохраняются многострочные элементы. Например, вместо того чтобы
повторно создавать функцию по одной строке, можно просто восстановить все определение
функции f как единое целое и изменить имя на make_double .

6. Visual Studio может передавать несколько строк кода из окна редактора в интерактивное окно.
Эта возможность позволяет хранить код в исходном файле и легко передавать отдельные его части
в интерактивное окно. После этого с такими фрагментами кода можно работать в удобной среде
REPL вместо того, чтобы выполнять всю программу. Чтобы увидеть, как работает эта функция,
замените цикл for в файле PythonApplication1.py следующим кодом:

# Create a string with spaces proportional to a cosine of x in degrees


def make_dot_string(x):
return ' ' * int(20 * cos(radians(x)) + 20) + 'o'

7. Выберите операторы функций import , from и make_dot_string в файле .py. Щелкните правой
кнопкой мыши выделенный текст и выберите Отправить код в интерактивное окно (или
нажмите клавиши Ctrl +ВВОД). Фрагмент кода будет немедленно вставлен в интерактивное окно,
после чего начнется его выполнение. Так как код определил функцию, можно быстро проверить эту
функцию, вызвав ее несколько раз:

TIP
Если в редакторе не выделен фрагмент , при нажатии клавиш CTRL +ВВОД в интерактивном окне
выполнится текущая строка кода, а курсор автоматически установится в следующей строке. Это
позволяет легко выполнять код в пошаговом режиме, многократно нажимая клавиши CTRL +ВВОД, что
невозможно при использовании командной строки Python. Таким образом также возможно пошаговое
выполнение кода без запуска отладчика, в том числе не с самого начала программы.

8. Кроме того, можно скопировать и вставить несколько строк кода, например приведенный ниже
фрагмент , в интерактивное окно из любого источника, что трудно сделать с помощью командной
строки REPL для Python. При вставке интерактивное окно запускает этот код так же, как при
вводе с клавиатуры.

for i in range(360):
s = make_dot_string(i)
print(s)

9. Как можно видеть, код работает нормально, но выходные данные не очень впечатляют. Другое
значение шага в цикле for сделает косинусоиду более наглядной. К счастью, так как весь цикл for
хранится в журнале REPL как единое целое, можно легко вернуться и внести изменения, а затем еще
раз проверить функцию. Сначала восстановите цикл for , нажав клавишу со стрелкой вверх. Затем
нажмите клавишу со стрелкой влево или вправо, чтобы начать переход по коду (пока вы не
сделаете это, при нажатии клавиш со стрелками вверх и вниз будет происходить переход по
журналу). Перейдите к спецификации range и измените ее на range(0, 360, 12) . Затем нажмите
клавиши CTRL +ВВОД (в любом месте кода), чтобы снова выполнить весь оператор:

10. Повторяйте эту процедуру, пробуя различные значения шага, пока не найдете оптимальное. Можно
также сделать так, чтобы волна повторялась, увеличив диапазон, например range(0, 1800, 12) .

11. Если вас устраивает код в интерактивном окне , выберите его. Затем щелкните код правой
кнопкой мыши и выберите Скопировать код (Ctrl +Shift +C ). Наконец, вставьте выбранный код в
редактор. Обратите внимание на то, что при использовании этой возможности в Visual Studio
автоматически пропускаются выходные данные, а также символы >>> и ... . Например, на
приведенном ниже рисунке показано использование команды Копировать код применительно к
выделенному фрагменту, включающему приглашения и выходные данные:

При вставке в редакторе остается только код:

for i in range(0, 1800, 12):


s = make_dot_string(i)
print(s)

Чтобы скопировать содержимое интерактивного окна полностью, включая приглашения и


выходные данные, используйте стандартную команду Копировать.

12. Итак, вы обработали небольшую часть кода с помощью среды REPL в интерактивном окне, а затем
легко добавили этот код в исходный файл проекта. Если снова выполнить этот код с помощью
клавиш CTRL +F5 (или команды Отладка > Начать без отладки), отобразятся требуемые
результаты.

Следующий шаг
Выполнение кода в отладчике

Дополнительные подробности
Работа с интерактивным окном Python
Использование IPython REPL
Шаг 4. Выполнение кода в отладчике
21.10.2020 • 12 minutes to read • Edit Online

Предыдущий шаг. Использование интерактивного окна REPL

Помимо возможности управления проектами, расширенных возможностей редактирования и


интерактивного окна, Visual Studio предоставляет полнофункциональную поддержку отладки для кода
Python. В отладчике можно выполнять код пошагово, включая каждую итерацию цикла. Кроме того, можно
приостанавливать программу, если выполняются определенные условия. При приостановке программы в
отладчике можно полностью изучить ее состояние и изменить значения переменных. Эти действия
необходимы для выявления источников ошибок в программе. Кроме того, они позволяют тщательно
отслеживать поток работы программы.

1. Замените код в файле PythonApplication1.py приведенным ниже кодом. Этот вариант кода расширяет
make_dot_string , что позволяет изучать отдельные шаги в отладчике. Он также помещает цикл for
в функцию main и выполняет его явным образом, вызывая эту функцию.

from math import cos, radians

# Create a string with spaces proportional to a cosine of x in degrees


def make_dot_string(x):
rad = radians(x) # cos works with radians
numspaces = int(20 * cos(radians(x)) + 20) # scale to 0-40 spaces
st = ' ' * numspaces + 'o' # place 'o' after the spaces
return st

def main():
for i in range(0, 1800, 12):
s = make_dot_string(i)
print(s)

main()

2. Убедитесь, что код работает правильно, нажав клавишу F5 или выбрав команду меню Отладка >
Начать отладку. Это запускает выполнение кода в отладчике, но так как вы еще не настроили
приостановку программы во время выполнения, выводится только шаблон волны для нескольких
итераций. Нажмите любую клавишу, чтобы закрыть окно вывода.
TIP
Чтобы закрыть окно вывода автоматически после завершения программы, выберите команду меню Сервис
> Параметры, разверните узел Python , выберите Отлад ка и снимите флажок Ожид ать вход ные
д анные при нормальном завершении работы процесса:

3. Установите точку останова в операторе , щелкнув один раз серое поле возле этой строки или
for
поместив курсор в этой строке и выбрав команду Отладка > Точка останова (клавиша F9 ). В
сером поле появляется красная точка для указания точки останова (как показано ниже стрелкой):

4. Снова запустите отладчик (F5 ), и вы увидите, что выполнение кода остановится в строке с этой
точкой останова. Здесь можно просмотреть стек вызовов и переменные. Переменные, относящиеся к
области действия, приводятся в окне Видимые , если они определены. В нижней части этого окна
можно также перейти к представлению Локальные .В нем отображаются все переменные, которые
найдены средой Visual Studio в текущей области действия (включая функции), даже если они еще не
определены.
5. Обратите внимание на панель инструментов отладки (показана ниже) в верхней части окна Visual
Studio. Эта панель инструментов предоставляет быстрый доступ к наиболее часто используемым
командам отладки (которые также находятся в меню Отладка ).

Кнопки располагаются слева направо в следующем порядке:

Продолжить (F5 ) — программа выполняется до следующей точки останова или до конца.


Прервать все (CTRL +ALT +BREAK ) — приостанавливает программу, которая выполняется
длительное время.
Остановить отладку (SHIFT +F5 ) — программа останавливается в текущем месте, и работа
отладчика завершается.
Перезапустить (CTRL +SHIFT +F5 ) — программа останавливается в текущем месте и
перезапускается в отладчике с начала.
Показать следующий оператор (ALT +NUM * ) — переход к строке кода, которая должна
быть выполнена следующей. Эта команда наиболее полезна в случае, если вы просматриваете
код во время сеанса отладки и хотите быстро перейти к месту, где работа отладчика была
приостановлена.
Шаг с заходом (F11 ) — выполняет следующую строку кода с заходом в вызываемые функции.
Шаг с обходом (F10 ) — выполняет следующую строку кода без захода в вызываемые функции.
Шаг с выходом (Shift +F11 ) — текущая функция выполняется до конца, после чего выполнение
приостанавливается в вызывающем коде.
6. Выполните применительно к оператору for шаг с обходом с помощью команды Шаг с обходом.
Пошаговое выполнение означает , что отладчик выполняет текущую строку кода, включая все
вызовы функций, после чего сразу приостанавливает выполнение программы. Обратите внимание на
то, как переменная i теперь определена в окнах Локальные и Видимые .

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

8. Выполните еще несколько шагов с обходом, наблюдая за тем, как меняются значения переменных в
окнах Локальные и Видимые .

9. В окне Локальные или Видимые в столбце Значение дважды щелкните поле переменной i или
s , чтобы изменить ее значение. Чтобы применить изменение, нажмите клавишу ВВОД или
щелкните в любой области за пределами поля со значением.

10. Продолжите пошаговое выполнение кода с помощью команды Шаг с заходом. Шаг с заходом
означает , что отладчик заходит во все вызываемые функции, о которых у него есть отладочные
сведения, например make_dot_string . Внутри функции make_dot_string вы можете изучать ее
локальные переменные и пошагово выполнять ее код.

11. Продолжайте пошагово выполнять код с помощью команды Шаг с заходом и обратите внимание
на то, что после достижения конца функции make_dot_string вы возвращаетесь в цикл for , а
переменная s принимает новое значение. Когда вы снова перейдете к оператору print , обратите
внимание на то, что выполнение шага с заходом для print не приводит к заходу в эту функцию.
Связано это с тем, что функция print не написана на языке Python, а представляет собой машинный
код внутри среды выполнения Python.

12. Продолжайте выполнять шаги с заходом, пока вы снова не попадете в функцию make_dot_string .
Теперь используйте команду Шаг с выходом и обратите внимание на то, что вы вернетесь в цикл
for. Команда Шаг с выходом означает , что отладчик выполняет функцию до конца, а затем
автоматически приостанавливает выполнение в вызывающем коде. Это полезно в случае, если вы
пошагово выполняете определенную часть большой функции, но остальную ее часть вам
отлаживать не нужно и вы не хотите устанавливать отдельную точку останова в вызывающем коде.

13. Чтобы продолжить выполнение программы после достижения очередной точки останова,
используйте команду Продолжить (F5 ). Так как вы установили точку останова в цикле for , при
следующей итерации произойдет остановка.

14. Пошаговое выполнение сотен итераций цикла может быть утомительным, поэтому в Visual Studio к
точке останова можно добавить условие. В этом случае отладчик будет приостанавливать
выполнение программы в точке останова, только если условие соблюдается. Например, можно
настроить условие для точки останова в операторе for так, чтобы выполнение в ней прерывалось,
только если значение переменной i превышает 1600. Чтобы задать это условие, щелкните правой
кнопкой мыши красную точку, обозначающую точку останова, и выберите пункт Условия
(сочетание клавиш Alt +F9 > C ). В появившемся всплывающем окне Параметры точки останова
введите i > 1600 в качестве выражения и выберите Закрыть. Нажмите клавишу F5 , чтобы
продолжить работу, и обратите внимание на то, что до того, как произойдет следующий останов,
будет выполнено несколько итераций.

15. Чтобы программа выполнялась до конца, отключите точку останова, щелкнув в поле точку правой
кнопкой мыши и выбрав команду Выключить точку останова (CTRL +F9 ). Затем выберите
команду Продолжить (или нажмите клавишу F5 ), чтобы запустить программу. Когда выполнение
программы завершится, сеанс отладки в Visual Studio будет закрыт и вы вернетесь в режим
редактирования. Обратите внимание, что точку останова можно также удалить, выбрав ее точку или
щелкнув точку правой кнопкой мыши и выбрав пункт Удалить точку останова , но при этом также
будут удалены все заданные условия.

TIP
В некоторых ситуациях , например, когда не удается запустить интерпретатор Python, окно выходных данных
может автоматически закрываться сразу после появления, из-за чего увидеть сообщения об ошибках невозможно.
Если такое происходит , в обозревателе решений щелкните проект правой кнопкой мыши, выберите пункт
Свойства, откройте вкладку Отлад ка и добавьте -i в поле Аргументы интерпретатора. Этот аргумент
вынуждает интерпретатор перейти в интерактивный режим после завершения программы, оставив окно
открытым, пока вы не нажмете клавиши CTRL +Z > ВВОД для выхода.

Дальнейшие действия
Установка пакетов в окружении Python

Дополнительные подробности
Отладка
Полную документацию по возможностям отладки Visual Studio можно найти в статье Отладка в Visual
Studio.
Шаг 5. Установка пакетов в окружении Python
21.10.2020 • 5 minutes to read • Edit Online

Предыдущий шаг. Выполнение кода в отладчике

Сообщество разработчиков на Python создало тысячи полезных пакетов, которые вы можете включать в
свои проекты. В Visual Studio имеется пользовательский интерфейс для управления пакетами в средах
Python.

Просмотр окружений
1. Выберите команду меню Просмотр > Другие окна > Окружения Python . Откроется окно
Окружения Python (как узел обозревателя решений), в котором представлены разные среды,
доступные вам. Список содержит как среды, установленные с помощью установщика Visual Studio,
так и среды, которые вы установили отдельно. В их число входят глобальные, виртуальные среды и
среды Conda. Среда, выделенная полужирным шрифтом, — это среда, используемая по умолчанию
для новых проектов. Дополнительные сведения о работе со средами см. в разделе Создание
окружений Python и управление ими в средах Visual Studio.

NOTE
Можно также открыть окно "Окружения Python", выбрав окно Обозревателя решений и нажав сочетание
клавиш CTRL+K, CTRL+` . Если сочетание клавиш не работает и окно "Окружения Python" отсутствует в
меню, возможно, не установлена рабочая нагрузка Python. Инструкции по установке Python см. в статье
Установка поддержки Python в Visual Studio.

2. На вкладке Обзор среды можно быстро получить доступ к интерактивному окну этой среды, а
также к ее папке установки и интерпретаторам. Например, щелкните ссылку Открыть
интерактивное окно, и в Visual Studio откроется интерактивное окно для этой среды.

3. Теперь создайте проект , выбрав пункт меню Файл > Создать > Проект , а затем выбрав шаблон
Приложение Python . В появившийся файл кода вставьте приведенный ниже код, который строит
косинусоиду, как в предыдущих шагах учебника, но теперь в виде графика. Кроме того, можно
использовать ранее созданный проект и заменить код.

from math import radians


import numpy as np # installed with matplotlib
import matplotlib.pyplot as plt

def main():
x = np.arange(0, radians(1800), radians(12))
plt.plot(x, np.cos(x), 'b')
plt.show()

main()

4. В открытом проекте Python можно открыть окно "Окружения Python" из Обозревателя решений,
щелкнув правой кнопкой мыши Окружения Python и выбрав Просмотреть все окружения
Python .

5. Если в окне редактора вы наведете указатель мыши на операторы импорта numpy и matplotlib , вы
заметите, что они не разрешены. Это связано с тем, что пакеты не были установлены в глобальную
среду по умолчанию.
Установка пакетов с помощью окна "Окружения Python"
1. В окне "Окружения Python" выберите среду по умолчанию для новых проектов Python и перейдите
на вкладку Пакеты. На ней вы увидите список пакетов, установленных в настоящее время в среде.
2. Установите пакет matplotlib , введя его имя в поле поиска, а затем выбрав параметр Выполнить
команду "pip install matplotlib" . Будет установлен пакет matplotlib , а также все пакеты, от
которых он зависит (в данном случае — numpy ).
3. Согласитесь на повышение прав, если появится соответствующий запрос.
4. Установленный пакет появится в окне Окружения Python . Если щелкнуть знак X справа от пакета,
он будет удален.
NOTE
Под названием среды может появиться небольшой индикатор выполнения, который указывает на то, что
Visual Studio создает базу данных IntelliSense для нового пакета. На вкладке IntelliSense также приводятся
более подробные сведения. Имейте в виду , что, пока база данных не будет готова, функции IntelliSense,
такие как автозавершение и проверка синтаксиса, будут неактивны для этого пакета в редакторе.

В Visual Studio 2017 версии 15.6 и более поздних версий используются другие (более быстрые) методы для
работы с IntelliSense. На вкладке IntelliSense отображается соответствующее сообщение.

Запуск программы
1. После установки matplotlib запустите программу с отладчиком (F5 ) или без него (CTRL +F5 ), чтобы
увидеть результат.
Дальнейшие действия
Работа с Git

Дополнительные подробности
Среды Python
Сведения о Django в Visual Studio
Сведения о Flask в Visual Studio
Шаг 6. Работа с Git
21.10.2020 • 4 minutes to read • Edit Online

Предыдущий шаг. Установка пакетов и управление средами Python

Visual Studio обеспечивает прямую интеграцию с локальными репозиториями Git, а также удаленными
репозиториями, находящимися в таких службах, как GitHub и Azure Repos. Эта интеграция включает в себя
клонирование репозитория, фиксацию изменений и управление ветвями.

В этой статье представлены общие сведения о создании локального репозитория Git для существующего
проекта и некоторых возможностях Visual Studio, связанных с Git.

1. Открыв проект в Visual Studio, например проект из предыдущего шага, щелкните решение правой
кнопкой мыши и выберите Добавить решение в систему управления версиями. В Visual Studio
создается локальный репозиторий Git, содержащий код вашего проекта.

2. Если Visual Studio определяет , что управление проектом осуществляется в репозитории Git, в нижнем
правом углу окна Visual Studio появляются связанные с Git элементы управления. Эти элементы
управления показывают ожидающие фиксации, изменения, имя репозитория и ветвь. Наведите
указатель на эти элементы управления для просмотра дополнительных сведений.

3. Когда вы создаете репозиторий или выбираете любой элемент управления Git, в Visual Studio
открывается окно Team Explorer (это окно можно открыть в любое время с помощью команды меню
Вид > Team Explorer ). В окне представлены три основные области. Вы можете переключаться
между ними с помощью раскрывающегося списка в заголовке Team Explorer . Кроме того, если
выбрать элемент управления Отправить (значок со стрелкой вверх), отображается область
Синхронизация, которая предоставляет операции для публикации:

4. Выберите Изменения (или элемент управления Git со значком карандаша), чтобы просмотреть
незафиксированные изменения и при необходимости зафиксировать их.
Дважды щелкните файл в списке Изменения, чтобы открыть представление различий для этого
файла:

5. Выберите Ветви (или элемент управления Git с именем ветви), чтобы изучить ветви и выполнять
операции объединения и перемещения изменений из одной ветви в другую:

6. При выборе элемента управления Git с именем репозитория (CosineWave на предыдущем рисунке) в
Team Explorer отображается интерфейс подключения, с помощью которого можно быстро
перейти в другой репозиторий.

7. При использовании локального репозитория зафиксированные изменения помещаются сразу в него.


Если установлено подключение к удаленному репозиторию, щелкните заголовок с раскрывающимся
меню в Team Explorer , выберите Синхронизировать, чтобы перейти к разделу Синхронизация, и
используйте представленные там команды вытягивания и принесения.
Дополнительные подробности
Общие инструкции по созданию проекта из удаленного репозитория Git см. в статье Краткое руководство.
Клонирование репозитория с кодом Python в Visual Studio.

Подробное руководство и инструкции по обработке конфликтов слияния, проверке кода с запросами на


вытягивание, перемещении изменений из одной ветви в другую и отборе изменений см. в руководстве по
началу работы с Git и Azure Repos.

Обзор руководства
На этом руководство по Python в Visual Studio завершено. В этом руководстве вы узнали, как:

создавать проекты и просматривать их содержимое;


использовать редактор кода и запустить проект ;
использовать интерактивное окно для разработки нового кода и быстрого копирования этого кода в
редактор;
запускать готовую программу в отладчике Visual Studio;
устанавливать пакеты и управлять средами Python;
работать с кодом в репозитории Git.

Далее вы можете заняться изучением основных понятий и практических руководств, включая следующие
статьи:

Создание расширения C++ для Python


Публикация в службу приложений Azure
Профилирование
Модульное тестирование
Руководство. Начало работы с веб-платформой
Django в Visual Studio
21.10.2020 • 25 minutes to read • Edit Online

Django — это высокоуровневая платформа Python для быстрого создания безопасных и масштабируемых
веб-систем. В этом руководстве представлены сведения о платформе Django в контексте шаблонов
проекта, предоставляемых Visual Studio для упрощения создания веб-приложений на основе Django.

В этом руководстве описано следующее.

создавать базовый проект Django в репозитории Git с помощью шаблона "Пустой веб-проект Django"
(этап 1);
создавать приложение Django с одной страницей и преобразовать эту страницу для просмотра с
помощью шаблона (шаг 2);
обслуживать статические файлы, добавлять страницы и использовать наследование шаблонов (шаг 3);
использовать шаблон веб-проекта Django для создания приложения с несколькими страницами и
адаптивным дизайном (этап 4);
выполнять проверку подлинности пользователей (шаг 5);
с помощью шаблона веб-проекта опроса Django создать приложение, использующее модели, миграции
базы данных и настройки в интерфейсе администратора (шаг 6).

предварительные требования
Visual Studio 2017 или более поздней версии в системе Windows со следующими параметрами:
Рабочая нагрузка Разработка на Python (вкладка Рабочая нагрузка в установщике).
Инструкции см. в статье Установка поддержки Python в Visual Studio.
Git для Windows и расширение GitHub для Visual Studio на вкладке Отдельные
компоненты в разделе Средства кода .

Шаблоны проектов Django также входят в состав всех ранних версий инструментов Python для Visual
Studio, хотя сведения могут отличаться от рассматриваемых в этом руководстве (особенно это касается
более ранних версий платформы Django).

Разработка Python в настоящее время не поддерживается в Visual Studio для Mac. В системах Mac и Linux
используйте расширение Python в Visual Studio Code.

Проекты Visual Studio и проекты Django


В терминологии Django "проект Django" состоит из нескольких файлов конфигурации на уровне сайта
вместе с одним или несколькими "приложениями", развертываемыми на веб-узел для создания полного
веб-приложения. Проект Django может содержать несколько приложений. Точно так же приложение
может находиться в нескольких проектах Django.

Проект Visual Studio может содержать проект Django вместе с несколькими приложениями. В целях
упрощения в этом руководстве для проекта Visual Studio используется понятие "проект ". Когда же
говорится о проекте Django, используется конкретное словосочетание "проект Django".

Во время работы с этим руководством вы создадите одно решение Visual Studio с тремя отдельными
проектами Django, каждый из которых содержит одно приложение Django. Сохраняя проекты в одном и
том же решении, вы можете легко переключаться между различными файлами для сравнения.
Шаг 1–1. Создание проекта и решения Visual Studio
Обычно при работе с Django из командной строки нужно сначала создать проект , выполнив команду
django-admin startproject <project_name> . В Visual Studio использование шаблона "Пустой веб-проект
Django" обеспечивает ту же структуру, что и в проекте и решении Visual Studio.
1. В Visual Studio выберите Файл > Создать > Проект , выполните поиск по запросу "Django" и
выберите шаблон Пустой веб- проект Django . (Шаблон также можно найти в папке Python >
Интернет в списке слева.)

2. В нижней части диалогового окна в полях введите следующие сведения (как показано на
предыдущем рисунке), а затем нажмите кнопку ОК.

Имя. В качестве имени проекта Visual Studio укажите BasicProject . Это имя используется также и
для проекта Django.
Расположение . Укажите расположение для создания решения и проекта Visual Studio.
Решение . Оставьте в этом поле значение по умолчанию Создать новое решение .
Имя решения. Укажите LearningDjango . В этом руководстве данное имя подходит для
решения как контейнер для нескольких проектов.
Создать каталог для решения. Оставьте флажок установленным (по умолчанию).
Создать новый репозиторий Git . Выберите этот параметр (по умолчанию флажок не
установлен), чтобы при создании решения в Visual Studio был создан локальный репозиторий Git.
Если этот параметр не отображается, запустите Visual Studio Installer и добавьте Git для
Windows и Расширение GitHub для Visual Studio на вкладке Отдельные компоненты в
разделе Средства для работы с кодом.
3. Через некоторое время в Visual Studio отобразится диалоговое окно с сообщением Для этого
проекта требуются внешние пакеты (как показано ниже). Это диалоговое окно открывается,
так как шаблон включает файл requirements.txt, ссылающийся на последнюю версию пакета
Django 1.x. (Выберите Показать необходимые пакеты, чтобы просмотреть точный список
зависимостей.)
4. Выберите параметр I will install them myself (Я установлю их самостоятельно). В ближайшее время
вы можете создать виртуальное окружение и исключить его из системы управления версиями.
(Окружение всегда можно создать из requirements.txt.)

Шаг 1–2. Проверка элементов управления Git и публикация в


удаленном репозитории
Так как вы выбрали Создать новый репозиторий Git в диалоговом окне Новый проект , проект уже
был зафиксирован в локальной системе управления версиями сразу после завершения процесса создания.
На этом шаге вы ознакомитесь с элементами управления Git в Visual Studio и окном Team Explorer , в
котором вы будете работать с системой управления версиями.

1. Проверьте элементы управления Git в нижнем углу главного окна Visual Studio. Эти элементы
управления отображаются в следующем порядке (слева направо): неотправленные фиксации,
незафиксированные изменения, имя репозитория и текущая ветвь.

NOTE
Если вы не выбрали параметр Созд ать новый репозиторий Git в диалоговом окне Новый проект,
элементы управления Git отображают только команду Добавить в систему управления версиями,
которая создает локальный репозиторий.

2. Нажмите кнопку "Изменить" и в Visual Studio на странице изменений откроется окно Team
Explorer . Так как созданный проект уже зафиксирован в системе управления версиями
автоматически, ожидающие изменения не отобразятся.
3. В строке состояния Visual Studio нажмите кнопку фиксации (стрелка вверх со значением 2 ), чтобы
открыть страницу Синхронизация в Team Explorer . Так как у вас есть только локальный
репозиторий, страница предоставляет простые варианты для публикации репозитория для разных
удаленных репозиториев.

Для своих проектов вы можете выбрать любую службу. В этом руководстве используется GitHub.
Завершенный пример кода для работы см. в репозитории Microsoft/python-sample-vs-learning-
django.
4. При выборе любого из элементов управления Публикация Team Explorer предложит проверить
зависимости для получения дополнительной информации. Например, при публикации примера для
этого руководства сначала нужно было создать репозиторий, и в этом случае параметр Отправить
в удаленный репозиторий использовался с URL-адресом репозитория.
Если у вас нет репозитория, параметры Опубликовать в GitHub и Отправить в Azure DevOps
позволяют создать его непосредственно из Visual Studio.

5. При работе с этим руководством вы будете периодически использовать элементы управления в


Visual Studio для фиксации и отправки изменений. Мы напомним вам об этом при необходимости.

TIP
Для быстрого перемещения в Team Explorer выберите заголовок (Изменения или Отправить), чтобы открыть
контекстное меню доступных страниц.

Вопрос. Каковы преимущества использования системы управления версиями с самого начала проекта?
Ответ. Прежде всего использование системы управления версиями с самого начала, особенно если вы
также используете удаленный репозиторий, обеспечивает регулярное резервное копирование вашего
проекта. В отличие от поддержки проекта только в локальной файловой системе, система управления
версиями также предоставляет полную историю изменений и возможность отменить изменения одного
файла или всего проекта. История изменений помогает определить причину регрессий (сбои при
тестировании). Кроме того, система управления версиями необходима в случае, если над проектом
работают несколько человек. Она управляет перезаписыванием и обеспечивает разрешение конфликтов.
Наконец, система управления версиями, которая является формой автоматизации, отлично подходит для
автоматизации сборки, тестирования и управления выпусками. Это первый шаг в использовании DevOps
для проекта, и так как барьеры для входа настолько низки, нет оснований не использовать систему
управления версиями с самого начала.

Дополнительные сведения о системе управления версиями как средства автоматизации см. в статье Mobile
DevOps - The Source of Truth: The Role of Repositories in DevOps (DevOps для мобильных устройств.
Источник правды. Роль репозиториев в DevOps) в журнале MSDN. Эта статья написана для мобильных
приложений, однако она применима также и к веб-приложениям.

Вопрос. Можно ли отменить автоматическую фиксацию нового проекта в Visual Studio?


Ответ. Да. Чтобы отключить автоматическую фиксацию, перейдите на страницу Параметры в Team
Explorer , выберите Git > Глобальные параметры, снимите флажок Commit changes after merge by
default (Фиксировать изменения после объединения по умолчанию), а затем нажмите кнопку Обновить.

Шаг 1–3. Создание виртуального окружения и его исключение из


системы управления версиями
Теперь, когда вы настроили систему управления версиями для своего проекта, можно создать виртуальное
окружение, которое содержит необходимые пакеты Django для проекта. Затем с помощью Team Explorer
вы сможете исключить папку окружения из системы управления версиями.

1. В обозревателе решений щелкните правой кнопкой мыши элемент Окружения Python и


выберите Добавление виртуального окружения.
2. Откроется диалоговое окно Добавление виртуального окружения с сообщением Найден
файл requirements.txt . Это сообщение указывает , что Visual Studio использует данный файл для
настройки виртуального окружения.

3. Нажмите кнопку Создать, чтобы принять параметры по умолчанию. (При желании вы можете
изменить имя виртуального окружения, просто изменив имя своей подпапки. Однако env является
стандартным соглашением.)

4. Согласитесь с привилегиями администратора при появлении запроса, а затем подождите несколько


минут , пока Visual Studio загружает и устанавливает пакеты. Для Django этот процесс представляет
собой расширение нескольких тысяч файлов в примерно столько же подпапок! Ход выполнения
отображается в окне Вывод Visual Studio. Во время ожидания просмотрите раздел вопросов.

5. В элементах управления Visual Studio Git (в строке состояния) выберите индикатор изменений (со
значением 99* ), который открывает страницу Изменения в Team Explorer .

Создание виртуального окружения привело к многочисленным изменениям, но вам не нужно


включать их в систему управления версиями, потому что вы (или кто-то еще, клонирующий проект )
в любое время сможете воссоздать окружение из requirements.txt.

Чтобы исключить виртуальное окружение, щелкните правой кнопкой мыши папку env и выберите
Игнорировать эти локальные элементы.
6. После исключения виртуального окружения единственными оставшимися изменениями являются
файл проекта и .gitignore. Файл .gitignore содержит добавленную запись для папки виртуального
окружения. Вы можете дважды щелкнуть файл, чтобы увидеть различия.

7. Введите сообщение о фиксации и нажмите кнопку Зафиксировать все , а затем при желании
отправьте фиксации в удаленный репозиторий.

Вопрос. Зачем нужно создавать виртуальное окружение ?


Ответ. Виртуальное окружение — это хороший способ изолировать конкретные зависимости вашего
приложения. Такая изоляция позволяет избежать конфликтов в глобальном окружении Python и помогает
как тестированию, так и совместной работе. Позже при разработке приложения вы неизменно используете
множество необходимых пакетов Python. Сохраняя пакеты в виртуальном окружении, зависящем от
проекта, вы сможете легко обновить файл requirements.txt проекта, описывающий это окружение в
системе управления версиями. При копировании проекта на любые другие компьютеры, включая серверы
сборки, серверы развертывания и другие компьютеры разработки, легко воссоздать окружение, используя
только requirements.txt (поэтому окружение не должно находиться в системе управления версиями). См.
дополнительные сведения о виртуальных окружениях.

Вопрос. Как удалить виртуальное окружение , которое уже было привязано к системе управления
версиями?
Ответ. Сначала измените файл .gitignore, чтобы исключить папку. Найдите раздел с комментарием
# Python Tools for Visual Studio (PTVS) в конце и добавьте новую строку для папки виртуального
окружения, например /BasicProject/env . (Так как в Visual Studio файл не отображается в обозревателе
решений, откройте его напрямую с помощью команды меню Файл > Открыть > Файл. Вы также можете
открыть файл из Team Explorer . На странице Параметры выберите Параметры репозитория,
перейдите в раздел Пропуск и файлы атрибутов, а затем щелкните ссылку Изменить рядом с
.gitignore .)
Во-вторых, откройте окно команд, перейдите к папке типа BasicProject, содержащей папку виртуального
окружения, например env, и выполните команду git rm -r env . Затем скопируйте эти изменения из
командной строки ( git commit -m 'Remove venv' ) или зафиксируйте на странице изменений в Team
Explorer .
Шаг 1–4. Изучение стереотипного кода
После завершения создания проекта изучите стереотипный код проекта Django (который снова совпадает
с кодом, созданным командой CLI django-admin startproject <project_name> ).

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


командной строки Django manage.py, которую Visual Studio автоматически устанавливает в качестве
файла запуска проекта. Запустите служебную программу в командной строке с помощью
python manage.py <command> [options] . Для выполнения стандартных задач Django Visual Studio
предоставляет удобные команды меню. В обозревателе решений щелкните проект правой
кнопкой мыши и выберите пункт Python , чтобы открыть список. Некоторые из этих команд
используются при работе с данным руководством.

2. В вашем проекте находится папка с именем проекта. В ней содержатся основные файлы проекта
Django.
__init.py — пустой файл, который сообщает Python, что эта папка представляет собой пакет
Python.
wsgi.py — точка входа для веб-серверов, совместимых с WSGI, для использования в проекте.
Обычно этот файл не нужно изменять, так как он предоставляет обработчики для рабочих
веб-серверов.

Файл settings.py содержит параметры для проекта Django, которые вы изменяете в процессе
разработки веб-приложения.

Файл urls.py содержит таблицу содержимого для проекта Django, которое вы также изменяете
в процессе разработки.
3. Как отмечалось ранее, шаблон Visual Studio также добавляет в проект файл requirements.txt,
определяющий зависимость пакета Django. Этот файл предлагает создать виртуальное окружение
при первом создании проекта.

Вопрос. Может ли Visual Studio создать файл requirements.txt из виртуального окружения после
установки других пакетов?
Ответ. Да. Разверните узел Окружения Python , щелкните свое виртуальное окружение правой кнопкой
мыши и выберите команду Создать requirements.txt . Эту команду хорошо использовать периодически
при изменении окружения и фиксировать изменения в файле requirements.txt в системе управления
версиями вместе с любыми другими изменениями кода, которые зависят от этого окружения. Если вы
настроили непрерывную интеграцию на сервере сборки, каждый раз при изменении окружения
необходимо создавать файл и фиксировать изменения.

Шаг 1–5. Запуск пустого проекта Django


1. В Visual Studio выберите Отладка > Начать отладку (F5 ) или нажмите кнопку Веб- сервер на
панели инструментов (браузер может отличаться).

2. Запуск сервера означает запуск команды manage.py runserver <port> , которая запускает встроенный
сервер разработки Django. Если в Visual Studio отображается сообщение Не удалось запустить
отладчик с сообщением об отсутствии файла запуска, щелкните правой кнопкой мыши файл
manage.py в обозревателе решений и выберите пункт Задать как файл запуска .
3. При запуске сервера откроется окно консоли, в котором также отображается журнал сервера. Visual
Studio автоматически открывает браузер для http://localhost:<port> . Однако, так как в проекте
Django нет приложений, Django отображает только страницу по умолчанию, чтобы сообщить о
нормальном состоянии процесса работы.

4. По окончании остановите сервер, закрыв консольное окно или используя команду Отладка >
Остановить отладку в Visual Studio.
Вопрос. Является ли Django веб-сервером и платформой?
Ответ. Да и нет. Django имеет встроенный веб-сервер, который используется для целей разработки. Этот
веб-сервер используется, когда вы запускаете веб-приложение локально, например при отладке в Visual
Studio. Однако при развертывании на веб-узел Django вместо него использует веб-сервер узла. Модуль
wsgi.py в проекте Django отвечает за подключение к рабочим серверам.
Вопрос. В чем разница между использованием команд меню "Отладка" и команд сервера в подменю
проекта Python?
Ответ. В дополнение к командам меню Отладка и кнопкам панели инструментов вы также можете
запустить сервер с помощью команд Python > Запуск сервера или Python > Запуск сервера
отладки в контекстном меню проекта. Обе команды открывают окно консоли, в котором содержится
локальный URL-адрес (localhost:port) для работающего сервера. Однако вы должны вручную открыть
браузер с этим URL-адресом. Запуск сервера отладки автоматически не запускает отладчик Visual Studio.
При желании вы можете присоединить отладчик к процессу позже с помощью команды Отладка >
Присоединение к процессу.

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

Tutorial step 2: Create a Django app with views and page templates (Руководство (шаг 2). Создание
приложения Django с представлениями и шаблонами страниц)

Дополнительные подробности
Код проекта Django: Writing your first Django app, part 1 (Написание первого приложения Django (часть
1)) (docs.djangoproject.com)
Административная служебная программа: django-admin и manage.py (docs.djangoproject.com)
Руководство по исходному коду на сайте GitHub: Microsoft/python-sample-vs-learning-django
Шаг 2. Создание приложения Django с
представлениями и шаблонами страниц
21.10.2020 • 25 minutes to read • Edit Online

Предыдущий шаг. Создание проекта и решения Visual Studio

В проекте Visual Studio имеются только компоненты на уровне сайта проекта Django, с помощью которых
можно выполнить одно или несколько приложений Django. Следующий шаг — создание первого
одностраничного приложения.

На этом шаге вы научитесь делать следующее:

Создание одностраничного приложения Django (шаг 2–1).


Запуск приложения из проекта Django (шаг 2–2).
Преобразование представления с помощью HTML (шаг 2–3).
Преобразование представления с помощью шаблона страницы Django (шаг 2–4).

Шаг 2-1. Создание приложения со стандартной структурой


Приложение Django — это отдельный пакет Python, который содержит набор связанных файлов для
определенной цели. Проект Django может содержать любое количество приложений. Это отражает тот
факт , что веб-узел может обслуживать любое количество отдельных точек входа с одного доменного
имени. Например, проект Django для такого домена как contoso.com может содержать одно приложение
для www.contoso.com , второе — для support.contoso.com и третье — для docs.contoso.com. В этом случае
проект Django обрабатывает параметры и маршрутизацию URL-адресов на уровне сайтов (в файлах urls.py
и settings.py), в то время как каждое приложение имеет собственное значение и реакцию на событие через
внутреннюю маршрутизацию, представления, модели, статические файлы и административный интерфейс.

Приложение Django обычно начинается со стандартного набора файлов. Visual Studio предоставляет
шаблоны элемента для запуска приложения Django в проекте Django, а также интегрированную команду
меню, которая выполняет ту же функцию.

Шаблоны. В обозревателе решений щелкните проект правой кнопкой мыши и выберите


Добавить > Новый элемент . В диалоговом окне Добавить новый элемент выберите шаблон
Приложение Django 1.9 , укажите имя приложения в поле Имя и нажмите кнопку O К.

Встроенная команда. В обозревателе решений щелкните проект правой кнопкой мыши и


выберите Добавить > Приложение Django . Эта команда запрашивает имя и создает приложение
Django 1.9.
Создайте приложение с именем HelloDjangoApp, используя любой из методов. В результате будет создана
папка в проекте с тем же именем, которая содержит элементы, как описано в указанной ниже таблице.

ЭЛЕМЕНТ ОПИСАНИЕ

__init__.py Файл, определяющий приложение в качестве пакета.


ЭЛЕМЕНТ ОПИСАНИЕ

migrations Папка, в которой Django хранит скрипты, обновляющие


базу данных в соответствии с изменениями в моделях.
Затем средства миграции Django применяют
необходимые изменения к любой из предыдущих версий
базы данных для соответствия текущим моделям. С
помощью миграции вы можете сконцентрироваться на
работе с моделями и позволить Django обрабатывать
базовую схему базы данных. Сведения о миграции см. в
шаге 6. Теперь папка просто содержит файл __init__.py
(это значит , что папка определяет собственный пакет
Python).

templates Папка для шаблонов страницы Django содержит один


файл index.html в папке с именем приложения. (В Visual
Studio 2017 15.7 и более ранних версий этот файл
находится прямо под шаблонами, и в шагах 2–4 вы
создаете вложенную папку.) Шаблоны — это блоки
HTML-кода, в которые представления могут добавлять
сведения для динамического отображения страницы.
Переменные шаблона страницы, например
{{ content }} в index.html, — это заполнители для
динамических значений, как описано далее в этой статье
(шаг 2). Обычно приложения Django создают
пространство имен для своих шаблонов, помещая их в
подпапку , которая соответствует имени приложения.

admin.py Файл Python, в котором расширяется административный


интерфейс приложения (см. шаг 6), используемый для
просмотра и изменения данных в базе данных.
Изначально файл содержит только оператор,
from django.contrib import admin . По умолчанию
Django содержит стандартный административный
интерфейс благодаря записям в файле settings.py проекта
Django, который можно включить, раскомментировав
имеющиеся записи в urls.py.

apps.py Файл Python, который определяет класс конфигурации


для приложения (см. после этой таблицы ниже).

models.py Модели — это определенные функциями объекты


данных , с помощью которых представления
взаимодействуют с основной базой данных приложения
(см. шаг 6). Django предоставляет уровень подключения к
базе данных , поэтому приложениям не нужно
обрабатывать эти сведения. Файл models.py — это
стандартное расположение для создания моделей.
Изначально он содержит только оператор
from django.db import models .

tests.py Файл Python, содержащий базовую структуру


модульных тестов.
ЭЛЕМЕНТ ОПИСАНИЕ

views.py Представления — это то, что вы обычно представляете


в качестве веб-страниц. Они принимают HTTP-запрос и
возвращают HTTP-ответ. Представления обычно
отображаются в виде HTML-кода в веб-браузерах ,
однако представление не обязательно должно быть
видимым (как промежуточная форма). Представление
определяется функцией Python, которая отвечает за
обработку HTML-кода для отправки в браузер. Файл
views.py — это стандартное расположение для создания
представлений. Изначально он содержит только
оператор from django.shortcuts import render .

При использовании имени HelloDjangoApp файл app.py имеет следующее содержимое:

from django.apps import AppConfig

class HelloDjangoAppConfig(AppConfig):
name = 'HelloDjango'

Вопрос. Отличается ли создание приложения Django в Visual Studio от создания приложения в


командной строке ?
Ответ. Если выполнить команду Добавить > Приложение Django или Добавить > Новый элемент в
шаблоне приложения Django, будут созданы те же файлы, что и при использовании команды Django
manage.py startapp <app_name> . Преимуществом создания приложения в Visual Studio является то , что папка
приложения и все ее файлы автоматически интегрируются в проект. С помощью той же команды Visual
Studio можно создать любое количество приложений в проекте.

Шаг 2-2. Запуск приложения из проекта Django


Теперь, если вы снова запустите проект в Visual Studio (используя кнопку панели инструментов или
выполнив команды Отладка > Начать отладку), отобразится страница по умолчанию. Содержимое
приложения не отобразится, так как для этого необходимо определить страницу приложения и добавить
приложение в проект Django.

1. В папке HelloDjangoApp измените значение views.py в соответствии с кодом ниже, который


определяет представление с именем index:

from django.shortcuts import render


from django.http import HttpResponse

def index(request):
return HttpResponse("Hello, Django!")

2. В папке BasicProject (созданной в шаге 1) измените значение urls.py, чтобы оно по крайней мере
соответствовало следующему коду (при необходимости можно оставить полезные комментарии):

from django.conf.urls import include, url


import HelloDjangoApp.views

# Django processes URL patterns in the order they appear in the array
urlpatterns = [
url(r'^$', HelloDjangoApp.views.index, name='index'),
url(r'^home$', HelloDjangoApp.views.index, name='home'),
]
Каждый шаблон URL-адреса описывает представления, в которые Django направляет определенные
URL-адреса, связанные с сайтом (это фрагмент после https://www.domain.com/ ). Первая запись в
urlPatterns , которая начинается с регулярного выражения ^$ , — это маршрутизация для корня
сайта, "/". Вторая запись ^home$ конкретно направляет /home. К одному представлению можно иметь
любое количество маршрутов.

3. Повторно запустите проект , чтобы отобразилось сообщение Hello, Django! , как определено
представлением. По завершении остановите сервер.

Фиксация в системе управления версиями


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

1. Нажмите кнопку изменения в нижней части Visual Studio (выделена кружком ниже), чтобы перейти к
Team Explorer .

2. В Team Explorer введите сообщение фиксации, например "Создать исходное приложение Django" и
выберите Зафиксировать все . После завершения фиксации отобразится сообщение Фиксация
<hash> создана локально. Синхронизируйте , чтобы использовать изменения совместно
с сервером. Если вы хотите отправить изменения в удаленный репозиторий, выберите
Синхронизировать, а затем — Отправить в разделе Исходящие фиксации. Кроме того, вы
можете накапливать несколько локальных фиксаций перед отправкой в удаленный репозиторий.

Вопрос. Что означает префикс r перед строками маршрутизации?


Ответ. Префикс r в строке Python означает raw (без обработки). Это предписывает Python не использовать
escape-символы в строке. Так как в регулярных выражениях используется множество специальных
символов, использование префикса r значительно упрощает чтение этих строк по сравнению с тем, если бы
они содержали определенное количество escape-символов \.

Вопрос. Что означают символы ^ и $ в записях маршрутизации URL -адреса?


Ответ. В регулярных выражениях, определяющих шаблоны URL-адреса, ^ означает start of line (начало
строки), а $ — end of line (конец строки), где URL-адреса аналогичным образом являются относительными
для корня сайта (часть за https://www.domain.com/ ). Регулярное выражение ^$ фактически означает blank
(пусто) и поэтому соответствует полному URL-адресу https://www.domain.com/ (ничего не добавляется к
корню сайта). Шаблон ^home$ точно соответствует https://www.domain.com/home/ . (Django не использует
косую черту (/) в конце сопоставления шаблона.)

Если вы не используете в конце регулярного выражения символ $, как в случае с ^home , то шаблон URL-
адреса соответствует любому URL-адресу, который начинается с home, например home, homework,
homestead и home192837.
Чтобы поэкспериментировать с разными регулярными выражениями, попробуйте воспользоваться
интерактивными средствами, например regex101.com в pythex.org.

Шаг 2-3. Преобразование представления с помощью HTML


Функция index в views.py создает только ответы HTTP в простом текстовом формате для страницы.
Большинство реальных веб-страниц, разумеется, предоставляют ответы с большим количеством страниц
HTML, которые часто содержат фактические данные. На самом деле основной причиной для определения
представления с помощью функции является возможность создать содержимое динамически.

Так как аргумент в HttpResponse — это просто строка, вы можете создать любой необходимый HTML-код в
строке. Вот простой пример. Замените функцию index указанным ниже кодом (сохраняя при этом
имеющиеся операторы from ), который создает HTML-ответ с помощью динамического содержимого. Оно
обновляется каждый раз при обновлении страницы.

from datetime import datetime

def index(request):
now = datetime.now()

html_content = "<html><head><title>Hello, Django</title></head><body>"


html_content += "<strong>Hello Django!</strong> on " + now.strftime("%A, %d %B, %Y at %X")
html_content += "</body></html>"

return HttpResponse(html_content)

Повторно запустите проект , чтобы отобразилось сообщение Hello, Django! в понедельник, 16 апреля,
2018 г. в 16:28:10. Обновите страницу, чтобы обновить время, и убедитесь, что содержимое создается при
каждом запросе. По завершении остановите сервер.

TIP
Чтобы быстро остановить и перезапустить проект , выполните команду меню Отлад ка > Перезапустить
(CTRL +SHIFT +F5 ) или нажмите кнопку Перезапуск на панели инструментов отладки:

Шаг 2-4. Преобразование представления с помощью шаблона


страницы
Создание HTML в коде работает нормально для маленьких страниц. Однако по мере усложнения страниц
обычно нужно сохранить статические части HTML своей страницы (вместе с ссылками на файлы CSS и
JavaScript) в качестве ее шаблонов, в которые вы затем вставите динамическое содержимое, созданное в
коде. В предыдущем разделе только дата и время вызова now.strftime являлись динамическими. Это
значит , что остальное содержимое можно поместить в шаблон страницы.

Шаблон страницы Django — это блок HTML-кода, содержащий любое количество маркеров замены,
которые называются переменными. Они разделены {{ и }} , как и в {{ content }} . Затем модуль
шаблонов Django заменяет переменные динамическим содержимым, предоставленным в коде.

В следующих шагах показано использование шаблонов страницы.

1. В папке BasicProject, содержащей проект Django, откройте файл settings.py и добавьте имя
приложения HelloDjangoApp в список INSTALLED_APPS . Добавление приложения в список указывает
проекту Django, что в приложении уже есть папка с идентичным именем.

INSTALLED_APPS = [
'HelloDjangoApp',
# Other entries...
]

2. Кроме того, в settings.py убедитесь в том, что объект TEMPLATES содержит следующую строку
(включена по умолчанию), которая указывает Django, что нужно найти шаблоны в папке templates
установленного приложения:

'APP_DIRS': True,

3. В папке HelloDjangoApp откройте файл шаблона страницы templates/HelloDjangoApp/index.html (или


templates/index.html в Visual Studio 2017 15.7 и более ранних версий), чтобы увидеть, что в нем
находится только одна переменная {{ content }} :

<html>
<head><title></title></head>

<body>

{{ content }}

</body>
</html>

4. В папке HelloDjangoApp откройте views.py и замените функцию приведенным ниже кодом, в


index
котором используется вспомогательная функция django.shortcuts.render . Вспомогательная функция
render предоставляет упрощенный интерфейс для работы с шаблонами страницы. Не забудьте
сохранить все имеющиеся операторы from .

from django.shortcuts import render # Added for this step

def index(request):
now = datetime.now()

return render(
request,
"HelloDjangoApp/index.html", # Relative path from the 'templates' folder to the template file
# "index.html", # Use this code for VS 2017 15.7 and earlier
{
'content': "<strong>Hello Django!</strong> on " + now.strftime("%A, %d %B, %Y at %X")
}
)

Первый аргумент в render , как можно увидеть, — это объект запроса, за которым следует
относительный путь к файлу шаблона в папке templates приложения. Файл шаблона называется в
соответствии с поддерживаемым представлением, если это уместно. Третий аргумент в render
представляет собой словарь переменных, к которым относится шаблон. Вы можете добавить объект
в словарь. В этом случае переменная в шаблоне может ссылаться на {{ object.property }} .

5. Запустите проект и просмотрите выходные данные. Должно отобразиться идентичное сообщение,


что и на шаге 2–2. Оно означает , что шаблон работает.
Обратите внимание, что HTML, используемый в свойстве content , отображается только в качестве
обычного текста, так как функция render автоматически экранирует этот HTML. Автоматическое
экранирование предотвращает случайные уязвимости в отношении атак путем внедрения кода:
разработчики часто собирают входные данные с одной страницы и используют их в качестве
значения на другой странице с помощью заполнителя шаблона. Экранирование служит
напоминанием о том, что HTML-код рекомендуется хранить в шаблоне страницы, а не в коде. К
счастью, создание дополнительных переменных при необходимости не представляет трудностей.
Например, измените index.html с шаблонами в соответствии со следующими исправлениями, в
которых добавлен заголовок страницы и сохранено все форматирование в шаблоне страницы:

<html>
<head>
<title>{{ title }}</title>
</head>
<body>
<strong>{{ message }}</strong>{{ content }}
</body>
</html>

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

def index(request):
now = datetime.now()

return render(
request,
"HelloDjangoApp/index.html", # Relative path from the 'templates' folder to the template file
# "index.html", # Use this code for VS 2017 15.7 and earlier
{
'title' : "Hello Django",
'message' : "Hello Django!",
'content' : " on " + now.strftime("%A, %d %B, %Y at %X")
}
)

6. Остановите сервер и перезапустите проект. Вы можете заметить, что теперь страница отображается
должным образом.

7. Visual Studio 2017 версии 15.7 или более ранних версий. В качестве завершающего этапа
переместите шаблоны в подпапку, имя которой совпадает с именем приложения, которое создает
пространство имен и позволяет избежать возможных конфликтов с другими приложениями,
добавленными в проект. (Шаблоны в Visual Studio 2017 15.8+ делают это автоматически.) Другими
словами, создайте вложенную папку в templates с именем HelloDjangoApp, переместите файл
index.html в эту вложенную папку и измените функцию представления index так, чтобы она
ссылалась на новый путь шаблона HelloDjangoApp/index.html. Затем запустите проект , убедитесь, что
страница отображается должным образом и остановите сервер.

8. Зафиксируйте изменения в системе управления версиями и обновите удаленный репозиторий при


необходимости, как описано в шаге 2–2.

Вопрос. Следует ли хранить шаблоны страницы в отдельном файле ?


Ответ. Хотя шаблоны обычно хранятся в отдельных HTML-файлах, вы также можете использовать
встроенный шаблон. Чтобы сохранить четкое разделение между исправлением и кодом, рекомендуется
использовать отдельный файл.

Вопрос. Следует ли использовать в шаблонах расширение файлов HTML?


Ответ. Использовать расширение .html для файлов шаблона страницы совсем необязательно, так как вы
всегда определяете точный относительный путь к файлу во втором аргументе функции render . Однако
Visual Studio (и другие редакторы) обычно предоставляет такие функции, как завершение кода или
разметка синтаксиса, для файлов HTML , что значительно важнее того, что шаблоны страниц не имеют
строгого формата HTML.

На самом деле при работе с проектом Django Visual Studio автоматически обнаруживает , если HTML-файл,
который вы редактируете, фактически является шаблоном Django, и предоставляет несколько функций с
автоматическим завершением. Например, когда вы начинаете вводить комментарий шаблона страницы
Django, {# , Visual Studio автоматически предоставляет вам закрывающие символы #} . В командах
Закомментировать выделенный фрагмент и Раскомментировать выделенный фрагмент (в
меню Изменить > Дополнительно или на панели инструментов) также используются комментарии
шаблона, а не HTML.

Вопрос. При запуске проекта отображается ошибка, что шаблон не найден. В чем проблема?
Ответ. Если отображаются сообщения о том, что не удается найти шаблон, убедитесь в том, что вы
добавили приложение в файл settings.py проекта Django в списке INSTALLED_APPS . Без этой записи Django не
сможет выполнять поиск в папке templates приложения.

Вопрос. Почему организация пространства имен шаблона важна?


Ответ. Когда платформа Django выполняет поиск шаблона, упомянутого в функции render , она использует
первый найденный файл, который соответствует относительному пути. Если у вас есть несколько
приложений Django в одном проекте, использующие одну структуру папок для шаблонов, скорее всего,
одно приложение будет непреднамеренно использовать шаблон из другого приложения. Чтобы избежать
подобных ошибок, всегда создавайте вложенную папку в папке templates приложения, которая
соответствует имени приложения. Это позволит избежать любого дублирования.

Следующие шаги
Обработка статических файлов, добавление страниц и использование наследования шаблонов

Дополнительные подробности
Write your first view (Написание первого представления) (docs.djangoproject.com)
Дополнительные сведения о возможностях шаблонов Django, таких как включение и наследование, см. в
статье The Django template language (Язык шаблона Django) (docs.djangoproject.com)
Regular Expressions (Регулярные выражения) (LinkedIn)
Исходный код учебника на GitHub: Microsoft/python-sample-vs-learning-django
Шаг 3. Обработка статических файлов, добавление
страниц и использование наследования шаблонов
с помощью приложения Django
21.10.2020 • 17 minutes to read • Edit Online

Предыдущий шаг. Создание приложения Django с представлениями и шаблонами страниц

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


одной страницей автономного HTML. Современные веб-приложения обычно состоят из многих страниц и
используют общие ресурсы, такие как файлы CSS и JavaScript, для обеспечения согласованного стиля и
реакции на события.

На этом шаге вы научитесь делать следующее:

с помощью шаблонов элементов Visual Studio быстро добавлять новые файлы различных типов с
удобным стереотипным кодом (шаг 3.1);
настраивать проект Django для обслуживания статических файлов (шаг 3–2);
добавлять дополнительные страницы в приложение (шаг 3–3);
использовать наследование шаблона для создания заголовка и панели навигации, которая используется
на разных страницах (шаг 3–4).

Шаг 3-1. Знакомство с шаблонами элементов


По мере разработки приложения Django обычно добавляется множество дополнительных файлов Python,
HTML, CSS и JavaScript. Для каждого типа файла (а также других файлов, таких как web.config, которые
могут понадобиться для развертывания) Visual Studio предоставляет удобные шаблоны элементов для
начала работы.

Чтобы просмотреть доступные шаблоны, перейдите к обозревателю решений, щелкните правой


кнопкой мыши папку, в которой необходимо создать элемент , выберите Добавить > Новый элемент :
Чтобы использовать шаблон, выберите нужный шаблон, укажите имя файла и нажмите кнопку ОК. При
добавлении элемента таким образом автоматически добавляется файл в проект Visual Studio и отмечает
изменения для системы управления версиями.

Вопрос. Как Visual Studio определяет, какой шаблон элемента предложить?


Ответ. Файл проекта Visual Studio (PYPROJ) содержит идентификатор типа проекта, который помечает его
как проект Python. Visual Studio использует этот тип идентификатора для отображения шаблонов
элементов, подходящих для типа проекта. Таким образом Visual Studio может предоставлять богатый
набор шаблонов элементов для многих типов проектов, который не требуется отсортировывать каждый
раз.

Шаг 3-2. Обработка статических файлов из приложения


В веб-приложении, созданном с помощью Python (с помощью любой платформы), файлы Python всегда
выполняются на сервере веб-узла и никогда не передаются на компьютер пользователя. Однако другие
файлы, такие как каскадные таблицы стилей и JavaScript, используются исключительно браузером, поэтому
сервер узла просто доставляет их без изменений всякий раз, когда они запрашиваются. Такие файлы
называются статическими файлами, Django может доставлять их автоматических без необходимости
написания кода.

В проекте Django по умолчанию настроено предоставление статических файлов из папки static приложения
благодаря таким строкам в файле settings.py проекта Django:

# Static files (CSS, JavaScript, Images)


# https://docs.djangoproject.com/en/1.9/howto/static-files/

STATIC_URL = '/static/'

STATIC_ROOT = posixpath.join(*(BASE_DIR.split(os.path.sep) + ['static']))

Файлы можно организовать, используя любую предпочитаемую структуру папок в static, а затем
использовать относительные пути в этой папке для обращения к файлам. Чтобы продемонстрировать этот
процесс, в следующих шагах в приложение добавляется файл каскадных таблиц стилей, а затем эта таблица
стилей используется в шаблоне index.html:

1. В обозревателе решений в проекте Visual Studio щелкните папку HelloDjangoApp правой


кнопкой мыши, выберите Добавить > Новая папка и назовите папку static .

2. Щелкните папку static правой кнопкой мыши и выберите Добавить > Новый элемент . В
открывшемся диалоговом окне выберите шаблон Таблица стилей, назовите файл site.css и
нажмите кнопку ОК. Файл site.css появится в проекте и откроется в редакторе. Структура папки
должна выглядеть похоже на структуру на следующем рисунке:

3. Замените все содержимое site.css следующим кодом и сохраните файл:

.message {
font-weight: 600;
color: blue;
}

4. Замените содержимое файла templates/HelloDjangoApp/index.html приложения приведенным ниже


кодом, который заменяет элемент <strong> , используемый в шаге 2, элементом <span> ,
ссылающимся на класс стиля message . Использование класса стиля таким образом дает большую
гибкость в стилизации элемента. (Если вы не переместили файл index.html во вложенную папку в
templates при использовании Visual Studio 2017 15.7 и более ранних версий, ознакомьтесь со
сведениями об организации пространства имен шаблонов в шагах 2–4.)

<html>
<head>
<title>{{ title }}</title>
{% load staticfiles %} <!-- Instruct Django to load static files -->
<link rel="stylesheet" type="text/css" href="{% static 'site.css' %}" />
</head>
<body>
<span class="message">{{ message }}</span>{{ content }}
</body>
</html>

5. Запустите проект для просмотра результатов. Остановите сервер после выполнения и зафиксируйте
изменения в системе управления версиями, если это необходимо (как описано на шаге 2).

Вопрос. Какое назначение у тега {% load staticfiles %}?


Ответ. Строка {% load staticfiles %} необходима для ссылки на статические файлы в таких элементах, как
<head> и <body> . В примере, показанном в этом разделе, staticfiles ссылается на пользовательский набор
тегов шаблона Django, который позволяет использовать синтаксис {% static %} для ссылки на статические
файлы. Без {% load staticfiles %} при выполнении приложения отобразится исключение.

Вопрос. Существуют ли соглашения для организации статических файлов?


Ответ. Вы можете добавить другие файлы CSS, JavaScript и HTML в свою папку static любым способом.
Типичный способ организации статических файлов — это создание вложенных папок fonts, scripts и content
(для таблиц стилей и других файлов). В каждом случае не забудьте включить эти папки в относительный
путь к файлу в ссылках {% static %} .

Вопрос. Можно ли выполнить эту задачу без использования тега {% load staticfiles %}?
Ответ. Да, можете.

<html>
<head>
<title>{{ title }}</title>
<link rel="stylesheet" type="text/css" href="../../static/site.css" />
</head>
<body>
<span class="message">{{ message }}</span>{{ content }}
</body>
</html>

Шаг 3-3. Добавление страницы в приложение


Добавление еще одной страницы в приложение означает :

добавление функции Python, которая определяет представление;


добавление шаблона для исправления страницы;
добавление необходимой маршрутизации в файл urls.py проекта Django.

Следующие действия добавляются на странице "Дополнительные сведения" проекта HelloDjangoApp и


связывают эту страницу с домашней страницей:

1. В обозревателе решений щелкните правой кнопкой мыши папку templates/HelloDjangoApp ,


выберите Добавить > Новый элемент , щелкните шаблон элемента HTML- страница , назовите
файл about.html и нажмите кнопку ОК.

TIP
Если команда Новый элемент не появляется в меню Добавить, убедитесь, что вы остановили сервер,
чтобы служба Visual Studio вышла из режима отладки.

2. Замените содержимое about.html следующей разметкой (вы замените явную ссылку на домашнюю
страницу простой навигационной панелью в шаге 3–4):
<html>
<head>
<title>{{ title }}</title>
{% load staticfiles %}
<link rel="stylesheet" type="text/css" href="{% static 'site.css' %}" />
</head>
<body>
<div><a href="home">Home</a></div>
{{ content }}
</body>
</html>

3. Откройте файл views.py приложения и добавьте функцию с именем about , которая использует
шаблон:

def about(request):
return render(
request,
"HelloDjangoApp/about.html",
{
'title' : "About HelloDjangoApp",
'content' : "Example app page for Django."
}
)

4. Откройте файл urls.py проекта Django и добавьте следующую строку в массив urlPatterns :

url(r'^about$', HelloDjangoApp.views.about, name='about'),

5. Откройте файл templates/HelloDjangoApp/index.html и добавьте следующую строку под элементом


<body> , чтобы задать ссылку на страницу сведений (опять же, вы замените эту ссылку навигационной
панелью в шаге 3–4):

<div><a href="about">About</a></div>

6. Сохраните все файлы с помощью команды меню Файл > Сохранить все или просто нажмите
клавиши CTRL +SHIFT +S . (Технически этот шаг не требуется, так как при запуске проекта в Visual
Studio файлы автоматически сохраняются. Однако об этой команде лучше знать.)
7. Выполните проект , чтобы просмотреть результаты и проверьте перемещение по страницам.
Закройте сервер после завершения.

Вопрос. Я пытался использовать index для связи с домашней страницей, но он не работает. Почему?
Ответ. Несмотря на то, что функция, представления во views.py, называется index , шаблоны
маршрутизации URL-адресов в файле urls.py проекта Django не содержат регулярных выражений, которые
совпадают со строкой "index". Чтобы сопоставить эту строку, необходимо добавить еще одну запись для
шаблона ^index$ .

Как показано в следующем разделе, лучше использовать тег {% url '<pattern_name>' %} в шаблоне
страницы, чтобы ссылаться на имя шаблона. В этом случае Django создаст соответствующий URL-адрес.
Например, замените <div><a href="home">Home</a></div> в about.html на
<div><a href="{% url 'index' %}">Home</a></div> . Использование index работает , потому что первый шаблон
URL-адреса в urls.py называется index (из-за аргумента name='index' ). Вы также можете использовать home
для обозначения второго шаблона.
Шаг 3-4. Использование наследования шаблона для создания
заголовка и навигационной панели
Вместо создания явных навигационных ссылок на каждой странице современные веб-приложения обычно
используют заголовок фирменной символики и панель навигации, которая предоставляет самые важные
ссылки на страницы, всплывающие меню и т. д. Убедитесь, что заголовок и навигационная панель
одинаковы на всех страницах, но не повторяйте один и тот же код в каждом шаблоне страницы. Вместо
этого необходимо определить общие компоненты всех страниц в одном месте.

Система шаблонов Django предоставляет два способа повторного использования определенных элементов
в нескольких шаблонах: включение и наследование.

Включение. Это другие шаблоны страниц, которые вставляются в определенное место в ссылочном
шаблоне, используя синтаксис {% include <template_path> %} . Кроме того, можно использовать
переменную, если необходимо динамически изменять путь в коде. Включение обычно используется в
тексте страницы для извлечения общего шаблона в определенном расположении на странице.

Наследование. В начале шаблона страницы используется {% extends <template_path> %} для


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

В обоих случаях <template_path> относится к папке templates приложения ( ../ или ./ также разрешены).

Базовый шаблон отделяет блоки с помощью тегов {% block <block_name> %} и {% endblock %} . Если
ссылочный шаблон использует теги с тем же именем блока, содержимое блока перезаписывает содержимое
базового шаблона.

Далее демонстрируется наследование:

1. В папке templates/HelloDjangoApp приложения создайте HTML-файл (с помощью пункта


контекстного меню Добавить > Новый элемент или Добавить > HTML- страница ) с именем
layout.html и замените его содержимое приведенным ниже кодом. Вы увидите, что этот шаблон
содержит блок под названием content, который должен быть заменен для всех ссылающихся страниц:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>{{ title }}</title>
{% load staticfiles %}
<link rel="stylesheet" type="text/css" href="{% static 'site.css' %}" />
</head>

<body>
<div class="navbar">
<a href="/" class="navbar-brand">Hello Django</a>
<a href="{% url 'home' %}" class="navbar-item">Home</a>
<a href="{% url 'about' %}" class="navbar-item">About</a>
</div>

<div class="body-content">
{% block content %}{% endblock %}
<hr/>
<footer>
<p>&copy; 2018</p>
</footer>
</div>
</body>
</html>

2. Добавьте следующие стили в файл static/site.css приложения (в этом пошаговом руководстве мы не


пытаемся продемонстрировать гибкость дизайна; эти стили просто позволяют получить интересные
результаты):

.navbar {
background-color: lightslategray;
font-size: 1em;
font-family: 'Trebuchet MS', 'Lucida Sans Unicode', 'Lucida Grande', 'Lucida Sans', Arial, sans-
serif;
color: white;
padding: 8px 5px 8px 5px;
}

.navbar a {
text-decoration: none;
color: inherit;
}

.navbar-brand {
font-size: 1.2em;
font-weight: 600;
}

.navbar-item {
font-variant: small-caps;
margin-left: 30px;
}

.body-content {
padding: 5px;
font-family:'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
}

3. Измените templates/HelloDjangoApp/index.html для ссылки на базовый шаблон и переопределения


блока content. Можно увидеть, что с помощью наследования этот шаблон упрощается:
{% extends "HelloDjangoApp/layout.html" %}
{% block content %}
<span class="message">{{ message }}</span>{{ content }}
{% endblock %}

4. Измените файл templates/HelloDjangoApp/about.html так, чтобы он тоже ссылался на базовый шаблон


и блок content в нем переопределялся:

{% extends "HelloDjangoApp/layout.html" %}
{% block content %}
{{ content }}
{% endblock %}

5. Запустите сервер для просмотра результатов. Закройте сервер после завершения.

6. Так как в приложение были внесены значительные изменения, самое время зафиксировать изменения
в системе управления версиями.

Следующие шаги
Tutorial step 4: Use the full Django Web Project template (Руководство (шаг 4). Использование полного
шаблона веб-проекта Django)

Дополнительные подробности
Развертывание веб-приложения в Службе приложений Azure
Writing your first Django app, part 3 (Написание первого приложения Django (часть 3))
(docs.djangoproject.com)
Дополнительные сведения о возможностях шаблонов Django, таких как поток управления, см. в статье
The Django template language (Язык шаблона Django) (docs.djangoproject.com).
Подробные сведения об использовании тега {% url %} см. в разделе url в статье Built-in template tags and
filters for Django templates reference (Встроенные теги и фильтры шаблонов для ссылки на шаблоны
Django) (docs.djangoproject.com).
Исходный код учебника на GitHub: Microsoft/python-sample-vs-learning-django
Шаг 4. Использование полного шаблона веб-
проекта Django
21.10.2020 • 12 minutes to read • Edit Online

Предыдущий шаг: Обработка статических файлов, добавление страниц и использование


наследования шаблонов

Теперь, когда вы ознакомились с основами Django, создав в Visual Studio приложение на основе шаблона
"Пустой веб-проект Django", вам будет легче создать более полное приложение с помощью шаблона "Веб-
проект Django".

На этом этапе вы сделаете следующее:

создадите более полное веб-приложение Django с помощью шаблона "Веб-проект Django" и изучите
структуру проекта (шаг 4.1);
узнаете, какие представления и шаблоны страниц создаются при использовании шаблона проекта, в
котором содержится три страницы, наследованные от шаблона базовой страницы, и используются
статические библиотеки JavaScript, такие как jQuery и Bootstrap (ша 4.2);
узнаете, как реализуется маршрутизация URL-адресов, предоставляемая шаблоном (шаг 4.3).

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

Шаг 4.1. Создание проекта на основе шаблона


1. В Visual Studio перейдите к обозревателю решений, щелкните правой кнопкой мыши решение
LearningDjango , созданное ранее в рамках этого руководства, и выберите Добавить > Новый
проект . (Если же вы хотите использовать новое решение, вместо этого выберите Файл > Создать
> Проект .)
2. В диалоговом окне создания проекта найдите и выберите шаблон Веб- проект Django , присвойте
проекту имя DjangoWeb и нажмите кнопку ОК.

3. Так как шаблон также включает файл requirements.txt, в Visual Studio запрашивается расположение
для установки этих зависимостей. Выберите параметр Install into a vir tual environment
(Установка в виртуальном окружении) и в диалоговом окне Добавление виртуального
окружения выберите Создать, чтобы принять значения по умолчанию.

4. Когда в Visual Studio завершится настройка виртуального окружения, следуйте инструкциям в


отображаемом файле readme.html, чтобы создать суперпользователя Django (т. е. администратора).
Щелкните правой кнопкой мыши проект Visual Studio и выберите команду Python > Создать
суперпользователя Django , а затем следуйте инструкциям на экране. Обязательно запишите имя
пользователя и пароль, так как они понадобятся для тестирования аутентификации в приложении.

5. Назначьте проект DjangoWeb в качестве проекта по умолчанию для решения Visual Studio. Для
этого в обозревателе решений щелкните правой кнопкой мыши имя проекта и выберите
Назначить запускаемым проектом. Запускаемый проект , выделенный полужирным шрифтом,
выполняется при запуске отладчика.
6. Выберите Отладка > Начать отладку (F5 ) или нажмите кнопку Веб- сервер на панели
инструментов, чтобы запустить сервер:

7. Приложение, созданное с помощью шаблона, содержит три страницы — домашнюю страницу, а


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

9. Вы можете оставить приложение запущенным и пройти следующие разделы.


Чтобы остановить работу приложения и зафиксировать изменения в системе управления исходным
кодом, сначала откройте страницу Изменения в Team Explorer , щелкните правой кнопкой мыши
папку виртуального окружения (возможно, env ) и выберите Игнорировать эти локальные
элементы.

Просмотр элементов, созданных с помощью шаблона


В общем на основе шаблона "Веб-проект Django" создается следующая структура:

Файлы в корневом каталоге проекта:


manage.py — административная служебная программа Django;
db.sqlite3 — база данных SQLite по умолчанию;
requirements.txt — файл, который содержит зависимость от Django 1.x;
readme.html — файл, который отображается в Visual Studio после создания проекта. Как
упоминалось в предыдущем разделе, следуйте приведенным ниже инструкциям, чтобы создать
учетную запись суперпользователя (администратора) для приложения.
В папке app содержатся все файлы приложения, включая представления, модели, тесты, формы,
шаблоны и статические файлы (см. шаг 4–2). Обычно эту папку нужно переименовать, указав более
уникальное имя приложения.
В папке DjangoWeb проекта Django содержатся стандартные файлы проекта: __init__.py, settings.py,
urls.py и wsgi.py. На основе шаблона в settings.py уже задана конфигурация для файлов базы данных и
приложения. Также в urls.py уже указаны пути ко всем страницам приложения, включая форму входа.

Вопрос. Можно ли предоставлять проектам Visual Studio общий доступ к виртуальному окружению ?
Ответ. Да, но при этом учитывайте, что, вероятно, со временем для разных проектов будут использоваться
разные пакеты. Таким образом, в общем виртуальном окружении будут содержаться все пакеты для всех
проектов, в которых используется окружение.

Чтобы все равно использовать существующее виртуальное окружение, сделайте следующее:

1. Когда в Visual Studio будет предложено установить зависимости, выберите вариант Я установлю их
самостоятельно.
2. В обозревателе решений щелкните правой кнопкой мыши узел Окружения Python и выберите
Добавить существующее виртуальное окружение .
3. Перейдите к папке виртуального окружения и выберите ее. Затем нажмите кнопку ОК.

Шаг 4.2. Сведения о представлениях и шаблонах страниц,


созданных с использованием шаблона проекта
При запуске проекта вы увидите, что приложение содержит три представления: домашняя страница, а
также страницы со сведениями и контактными данными. Код этих представлений хранится в папке
app/views. Каждая функция представления просто вызывает django.shortcuts.render с путем к шаблону и
простым объектом словаря. Например, страница сведений обрабатывается функцией about :

def about(request):
"""Renders the about page."""
assert isinstance(request, HttpRequest)
return render(
request,
'app/about.html',
{
'title':'About',
'message':'Your application description page.',
'year':datetime.now().year,
}
)

Шаблоны хранятся в папке templates/app приложения. Как правило, app нужно переименовать, указав имя
фактического приложения. Файл базового шаблона (layout.html) является самым большим. В нем
содержатся ссылки на все необходимые статические файлы (JavaScript и CSS), определяется блок content,
переопределяемый другими страницами, и предоставляется еще один блок с именем scripts. Эти области
показаны в следующем фрагменте файла layout.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />

<!-- Define a viewport for Bootstrap's responsive rendering -->


<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{ title }} - My Django Application</title>

{% load staticfiles %}
<link rel="stylesheet" type="text/css" href="{% static 'app/content/bootstrap.min.css' %}" />
<link rel="stylesheet" type="text/css" href="{% static 'app/content/site.css' %}" />
<script src="{% static 'app/scripts/modernizr-2.6.2.js' %}"></script>
</head>
<body>
<!-- Navbar omitted -->

<div class="container body-content">

<!-- "content" block that pages are expected to override -->


{% block content %}{% endblock %}
<hr/>
<footer>
<p>&copy; {{ year }} - My Django Application</p>
</footer>
</div>

<!-- Additional scripts; use the "scripts" block to add page-specific scripts. -->
<script src="{% static 'app/scripts/jquery-1.10.2.js' %}"></script>
<script src="{% static 'app/scripts/bootstrap.js' %}"></script>
<script src="{% static 'app/scripts/respond.js' %}"></script>
{% block scripts %}{% endblock %}

</body>
</html>

Каждый шаблон отдельной страницы (about.html, contact.html и index.html) дополняет основной шаблон
layout.html. about.html — это самый простой шаблон, в котором отображаются теги {% extends %} и
{% block content %} .

{% extends "app/layout.html" %}

{% block content %}

<h2>{{ title }}.</h2>


<h3>{{ message }}</h3>

<p>Use this area to provide additional information.</p>

{% endblock %}

Шаблоны index.html и contact.html имеют такую же структуру, но предоставляют больше содержимого в


блоке content.

В папке templates/app есть еще и файл четвертой страницы login.html вместе с файлом loginpartial.html,
указанным в layout.html с помощью {% include %} . Эти файлы шаблона рассматриваются на шаге 5 с
инструкциями по аутентификации.

Вопрос. Можно ли добавить отступ перед тегами {% block %} и {% endblock %} в шаблоне страницы
Django?
Ответ. Да, шаблоны страниц Django будут работать без шибок, если добавить отступ перед тегами блоков,
например, чтобы выровнять их в соответствующих родительских элементах. Они не отделяются отступом
в шаблонах страниц, созданных на основе шаблона проекта Visual Studio, чтобы вы могли четко видеть, где
они расположены.

Шаг 4.3. Сведения о маршрутизации URL-адресов, создаваемой на


основе шаблона
Файл urls.py проекта Django, созданный на основе шаблона "Веб-проект Django", содержит такой код:

from datetime import datetime


from django.conf.urls import url
import django.contrib.auth.views

import app.forms
import app.views

urlpatterns = [
url(r'^$', app.views.home, name='home'),
url(r'^contact$', app.views.contact, name='contact'),
url(r'^about$', app.views.about, name='about'),
url(r'^login/$',
django.contrib.auth.views.login,
{
'template_name': 'app/login.html',
'authentication_form': app.forms.BootstrapAuthenticationForm,
'extra_context':
{
'title': 'Log in',
'year': datetime.now().year,
}
},
name='login'),
url(r'^logout$',
django.contrib.auth.views.logout,
{
'next_page': '/',
},
name='logout'),
]

Первые три шаблона URL-адресов сопоставляются непосредственно с представлениями home , contact и


about в файле views.py приложения. А в шаблонах ^login/$ и ^logout$ используются встроенные
представления Django вместо представлений, определяемых приложением. Также в вызовах метода url
содержатся дополнительные данные для настройки представления. Эти вызовы рассматриваются на шаге
5.
Вопрос. Почему в созданном мной проекте в шаблоне URL -адреса about используется ^about, а не
^about$, как показано в этом разделе ?
Ответ. Отсутствие символа $ в конце регулярного выражения — это просто ошибка, которая встречается
во многих версиях шаблона проекта. Шаблон URL-адреса для страницы сведений работает без ошибок. Но
без символа $ в конце он также соответствует таким URL-адресам: about=django, about09876,
aboutoflaughter и т. д. В этом примере символ $ в конце выражения используется для создания URL-
адресов, соответствующих только about.

Дальнейшие действия
Аутентификация пользователей в Django

Дополнительные подробности
Развертывание веб-приложения в Службе приложений Azure
Writing your first Django app, part 4 - forms and generic views (Написание первого приложения Django.
Часть 4 — формы и универсальные представления) (docs.djangoproject.com)
Руководство по исходному коду на сайте GitHub: Microsoft/python-sample-vs-learning-django
Шаг 5. Аутентификация пользователей в Django
21.10.2020 • 9 minutes to read • Edit Online

Предыдущий шаг. Использование полного шаблона веб- проекта Django

Так как аутентификация является распространенным требованием для веб-приложений, в шаблоне "Веб-
проект Django" предусмотрен базовый поток проверки подлинности. (В шаблоне "Веб-проект опроса
Django", который описан в шаге 6 этого руководства, также реализован такой поток.) При использовании
любого из шаблонов проектов Django в Visual Studio в файл settings.py проекта Django включаются все
модули, необходимые для проверки подлинности.

На этом шаге вы научитесь делать следующее:

Как использовать поток проверки подлинности, предоставляемый в шаблонах Visual Studio (шаг 5.1)

Шаг 5-1. Использование потока проверки подлинности


Далее приведены инструкции по тестированию потока проверки подлинности и описаны связанные части
проекта:

1. Если вы еще не выполнили инструкции по созданию учетной записи суперпользователя


(администратора) в файле readme.html в корневом каталоге проекта, сделайте это сейчас.
2. Запустите приложение из Visual Studio. Для этого последовательно выберите Отладка > Начать
отладку (F5 ). Когда приложение появится в браузере, обратите внимание, что элемент управления
входом отображается в правом верхнем углу панели навигации.

3. Откройте templates/app/layout.html и обратите внимание, что элемент <div class="navbar ...>


содержит тег {% include app/loginpartial.html %} . Тег {% include %} указывает системе шаблонов
Django получить содержимое включенного на этом этапе файла в шаблоне.
4. Откройте templates/app/loginpartial.html и посмотрите, как используется условный тег
и тег {% else %} для отображения разных элементов
{% if user.is_authenticated %}
пользовательского интерфейса в зависимости от того, прошел ли пользователь проверку
подлинности:
{% if user.is_authenticated %}
<form id="logoutForm" action="/logout" method="post" class="navbar-right">
{% csrf_token %}
<ul class="nav navbar-nav navbar-right">
<li><span class="navbar-brand">Hello {{ user.username }}!</span></li>
<li><a href="javascript:document.getElementById('logoutForm').submit()">Log off</a></li>
</ul>
</form>

{% else %}

<ul class="nav navbar-nav navbar-right">


<li><a href="{% url 'login' %}">Log in</a></li>
</ul>

{% endif %}

5. Так как при первом запуске приложения пользователи, прошедшие аутентификацию, отсутствуют ,
код шаблона отображает только ссылку входа по относительному пути "login". В соответствии с
заданным значением в urls.py, как показано в предыдущем разделе, этот маршрут сопоставляется с
представлением django.contrib.auth.views.login . Это представление получает следующие данные:

{
'template_name': 'app/login.html',
'authentication_form': app.forms.BootstrapAuthenticationForm,
'extra_context':
{
'title': 'Log in',
'year': datetime.now().year,
}
}

template_name определяет шаблон для страницы входа. В нашем случае это templates/app/login.html.
Свойство extra_context добавляется к данным контекста, по умолчанию переданным в шаблон.
Наконец, authentication_form указывает класс формы для использования с именем для входа. В
шаблоне это свойство отображается как объект form . Значение по умолчанию — AuthenticationForm
(из django.contrib.auth.views ). В шаблоне проекта Visual Studio вместо него используется форма,
определенная в файле приложения forms.py:

from django import forms


from django.contrib.auth.forms import AuthenticationForm
from django.utils.translation import ugettext_lazy as _

class BootstrapAuthenticationForm(AuthenticationForm):
"""Authentication form which uses boostrap CSS."""
username = forms.CharField(max_length=254,
widget=forms.TextInput({
'class': 'form-control',
'placeholder': 'User name'}))
password = forms.CharField(label=_("Password"),
widget=forms.PasswordInput({
'class': 'form-control',
'placeholder':'Password'}))

Как видим, этот класс формы является производным от AuthenticationForm . В частности он


переопределяет поля имени пользователя и пароля для добавления текста заполнителя. Шаблон
Visual Studio включает этот явный код, основываясь на предположении, что вам потребуется
настроить форму, например добавить функцию для проверки надежности пароля.
6. При переходе на страницу входа в приложении отображается шаблон login.html. Переменные
{{ form.username }} и {{ form.password }}отвечают за отображение форм CharField из
BootstrapAuthenticationForm . Кроме того , есть встроенный раздел для отображения сведений об
ошибках проверки и готовый элемент для входа в социальные сети на тот случай, если вы решите
добавить эти службы.

{% extends "app/layout.html" %}

{% block content %}

<h2>{{ title }}</h2>


<div class="row">
<div class="col-md-8">
<section id="loginForm">
<form action="." method="post" class="form-horizontal">
{% csrf_token %}
<h4>Use a local account to log in.</h4>
<hr />
<div class="form-group">
<label for="id_username" class="col-md-2 control-label">User name</label>
<div class="col-md-10">
{{ form.username }}
</div>
</div>
<div class="form-group">
<label for="id_password" class="col-md-2 control-label">Password</label>
<div class="col-md-10">
{{ form.password }}
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="hidden" name="next" value="/" />
<input type="submit" value="Log in" class="btn btn-default" />
</div>
</div>
{% if form.errors %}
<p class="validation-summary-errors">Please enter a correct user name and password.</p>
{% endif %}
</form>
</section>
</div>
<div class="col-md-4">
<section id="socialLoginForm"></section>
</div>
</div>

{% endblock %}

7. При отправке формы в Django выполняется аутентификация учетных данных (например, учетных
данных суперпользователя). Если аутентификация не будет пройдена, вы останетесь на текущей
странице, но для form.errors будет задано значение true. При успешной аутентификации Django
выполняет переход по относительному URL-адресу в следующее поле,
<input type="hidden" name="next" value="/" /> . В нашем случае это домашняя страница ( / ).

8. Теперь, когда снова отображается домашняя страница, при отображении шаблона loginpartial.html
свойство user.is_authenticated имеет значение true. В результате отображается сообщение Hello
( имя пользователя) и элемент управления выходом. С помощью user.is_authenticated можно
проверить аутентификацию в других частях приложения.
9. Чтобы проверить, авторизован ли прошедший аутентификацию пользователь для доступа к
определенным ресурсам, необходимо получить от базы данных конкретные разрешения.
Дополнительные сведения см. в статье об использовании системы аутентификации Django
(документация Django).
10. В частности суперпользователь или администратор авторизованы для доступа к встроенным
интерфейсам администратора Django с использованием относительных URL-адресов /admin/ и
/admin/doc/. Включить их можно так:
a. Установите в своей среде пакет docutils Python. Для этого удобно добавить docutils в файл
requirements.txt, а затем в обозревателе решений развернуть узел Среды Python ,
щелкнуть правой кнопкой мыши используемую среду и выбрать Установить из файла
requirements.txt .
b. Откройте файл urls.py проекта Django и удалите комментарии по умолчанию из следующих
записей:

from django.conf.urls import include


from django.contrib import admin
admin.autodiscover()

# ...
urlpatterns = [
# ...
url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
url(r'^admin/', include(admin.site.urls)),
]

c. В файле settings.py проекта Django перейдите к коллекции INSTALLED_APPS и добавьте


'django.contrib.admindocs' .

d. Когда вы перезапускаете приложение, можно перейти по адресам /admin/ и admin/doc/, чтобы


выполнять такие задачи, как создание дополнительных учетных записей пользователей.

11. Последняя часть потока аутентификации — это процедура выхода. Как видим в loginpartial.html,
ссылка Выход просто отвечает за выполнение запроса POST по относительному URL-адресу /login.
Затем запрос обрабатывается встроенным представлением django.contrib.auth.views.logout . В этом
представлении не отображается пользовательский интерфейс. Просто выполняется переход к
домашней странице (как показано в файле urls.py для шаблона ^logout$). Если вам нужно, чтобы
отображалась страница выхода из системы, сначала измените шаблон URL-адреса следующим
образом, добавив свойство template_name и удалив свойство next_page:
url(r'^logout$',
django.contrib.auth.views.logout,
{
'template_name': 'app/loggedoff.html',
# 'next_page': '/',
},
name='logout')

Затем создайте templates/app/loggedoff.html со следующим (минимальным) содержимым:

{% extends "app/layout.html" %}
{% block content %}
<h3>You have been logged off</h3>
{% endblock %}

Выводится следующий результат :

12. По завершении остановите работу сервера и снова зафиксируйте изменения в системе управления
версиями.

Вопрос. Для чего нужен тег {% csrf_token %}, который отображается в элементах <form>?
Ответ. Тег {% csrf_token %} содержит встроенную в Django функцию защиты от подделки межсайтовых
запросов (CSRF) (документация Django). Обычно этот тег добавляется в каждый элемент , для которого
используются методы запросов POST, PUT или DELETE, такой как форма. С помощью функции отображения
в шаблон ( render ) затем вставляются необходимые средства защиты.

Следующие шаги
Использование шаблона веб-проекта Django для опросов

Дополнительные подробности
User authentication in Django (Аутентификация пользователя в Django) (docs.djangoproject.com)
Исходный код учебника на GitHub: Microsoft/python-sample-vs-learning-django
Шаг 6. Использование шаблона веб-проекта
Django для опросов
21.10.2020 • 32 minutes to read • Edit Online

Предыдущий шаг. Аутентификация пользователей в Django

Ознакомившись с шаблоном "Веб-проект Django" Visual Studio, вы теперь можете рассмотреть третий
шаблон Django "Веб-проект опроса Django", который создается на базе того же кода и иллюстрирует
работу с базой данных.

На этом шаге вы научитесь делать следующее.

Создание проекта на основе шаблона и инициализация базы данных (шаг 6–1)


Ознакомление с моделями данных (шаг 6–2)
Применение миграций (шаг 6–3)
Ознакомление с представлениями и шаблонами страниц, созданных с использованием шаблона проекта
(шаг 6–4)
Создание настраиваемого административного интерфейса (шаг 6–5)

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

Шаг 6-1. Создание проекта и инициализация базы данных


1. В Visual Studio перейдите к обозревателю решений, щелкните правой кнопкой мыши решение
LearningDjango , созданное ранее в рамках этого руководства, и выберите Добавить > Новый
проект . (Если же вы хотите использовать новое решение, вместо этого выберите Файл > Создать
> Проект .)
2. В диалоговом окне создания проекта найдите и выберите шаблон Веб- проект опроса Django ,
вызовите проект "DjangoPolls" и нажмите кнопку ОК.

3. Как и другие шаблоны проектов в Visual Studio, шаблон "Веб-проект опроса Django" содержит файл
requirements.txt, в котором Visual Studio запрашивает , куда установить эти зависимости. Выберите
параметр Install into a vir tual environment (Установка в виртуальном окружении) и в диалоговом
окне Добавление виртуального окружения выберите Создать, чтобы принять значения по
умолчанию.

4. После завершения настройки виртуального окружения в Python следуйте инструкциям в


отображаемом файле readme.html, чтобы инициализировать базу данных и создать
суперпользователя Django (т. е. администратора). Для этого сначала щелкните правой кнопкой
мыши проект DjangoPolls в обозревателе решений, выберите команду Python > Миграция
Django , затем еще раз щелкните проект правой кнопкой мыши, выберите команду Python >
Создание суперпользователя Django и следуйте инструкциям. (При попытке сначала создать
суперпользователя отобразится сообщение об ошибке, так как база данных не инициализирована.)
5. Для проекта DjangoPolls установите значение по умолчанию для решения Visual Studio, щелкнув
правой кнопкой мыши этот проект в обозревателе решений и выбрав пункт Назначить
запускаемым проектом. Запускаемый проект , выделенный полужирным шрифтом, выполняется
при запуске отладчика.

6. Выберите Отладка > Начать отладку (F5 ) или нажмите кнопку Веб- сервер на панели
инструментов, чтобы запустить сервер:

7. Приложение, созданное с помощью шаблона, содержит три страницы — домашнюю страницу,


вкладки "О программе" и "Контактные сведения", перемещаться по которым можно с использованием
верхней панели навигации. Выделите пару минут на просмотр различных частей приложения
(страницы "О программе" и "Контактные сведения" очень похожи на страницу "Веб-проект Django" и
не будут обсуждаться в дальнейшем).

8. Кроме того, выберите ссылку Администрирование на панели навигации, где отображается экран
входа. Это указывает на то, что административный интерфейс доступен только для
администраторов, прошедших проверку подлинности. Воспользуйтесь учетными данными
суперпользователя, после чего вы будете направлены на страницу "/admin", которая включена по
умолчанию при использовании этого шаблона проекта.
9. Вы можете оставить приложение запущенным и пройти следующие разделы.
Чтобы остановить работу приложения и зафиксировать изменения в системе управления исходным
кодом, сначала откройте страницу Изменения в Team Explorer , щелкните правой кнопкой мыши
папку виртуального окружения (возможно, env ) и выберите Игнорировать эти локальные
элементы.

Анализ содержимого проекта


Как было отмечено ранее, с большей частью содержимого проекта, созданного на основе шаблона "Веб-
проект опроса Django", вы должны быть знакомы, если изучили другие шаблоны проектов Visual Studio. В
дополнительных шагах этой статьи приведены более значительные изменения и дополнения, а именно
модели данных и дополнительные представления.

Вопрос. Какое действие выполняет команда "Миграция Django"?


Ответ. Команда Миграция Django выполняет команду manage.py migrate , которая запускает все скрипты в
папке app/migrations, которая еще не запускалась. В этом случае команда выполняет скрипт 0001_initial.py в
этой папке, чтобы настроить необходимую схему в базе данных.

Скрипт миграции создается с помощью команды manage.py makemigrations , которая проверяет файл
models.py приложения, сравнивает его с текущим состоянием базы данных и создает необходимые скрипты
для миграции схемы базы данных в соответствии с текущими моделями. Эта функция Django чрезвычайно
полезная во время обновлений и изменений моделей со временем. Создавая и выполняя миграции, можно
постоянно синхронизировать модели с базой данных, прилагая незначительные усилия.

Миграция выполняется на шаге 6–3 далее в этой статье.

Шаг 6-2. Ознакомление с моделями данных


Модели с именами Poll и Choice для приложения определены в app/models.py. Каждая из них относится к
классу Python, производному от django.db.models.Model и использующему методы класса models , такие как
CharField и IntegerField , для определения полей в модели, сопоставляемых со столбцами базы данных.
from django.db import models
from django.db.models import Sum

class Poll(models.Model):
"""A poll object for use in the application views and repository."""
text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')

def total_votes(self):
"""Calculates the total number of votes for this poll."""
return self.choice_set.aggregate(Sum('votes'))['votes__sum']

def __unicode__(self):
"""Returns a string representation of a poll."""
return self.text

class Choice(models.Model):
"""A poll choice object for use in the application views and repository."""
poll = models.ForeignKey(Poll)
text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)

def votes_percentage(self):
"""Calculates the percentage of votes for this choice."""
total = self.poll.total_votes()
return self.votes / float(total) * 100 if total > 0 else 0

def __unicode__(self):
"""Returns a string representation of a choice."""
return self.text

Как видите, в Poll сохраняется описание в поле text и дата публикации в pub_date . Эти поля являются
единственными, которые существуют для класса Poll в базе данных. Значение поля total_votes
вычисляется во время выполнения.

Модель Choice связана с моделью Poll через поле poll , которое содержит описание в text и сохраняет
количество для этого выбора в votes . Значение поля votes_percentage вычисляется во время выполнения и
не содержится в базе данных.

Полный список типов полей — CharField (ограниченный текст ) TextField (неограниченный текст ),
EmailField , URLField , DateTimeField , IntegerField , DecimalField , BooleanField , ForeignKey и ManyToMany .
Каждое поле принимает некоторые атрибуты, такие как max_length . Атрибут blank=True означает , что
поле необязательное. null=true означает , что значение необязательное. Кроме того, есть атрибут choices
, который ограничивает значения только теми, что находятся в массиве кортежей значений данных, и теми,
что отображаются в кортежах. (См. ссылку на поле модели в документации по Django.)

Вы можете проверить, что именно хранится в базе данных, просмотрев файл db.sqlite3 в проекте с помощью
таких средств, как браузер SQLite. В базе данных поле внешнего ключа, такое как poll , в модели Choice
хранится в виде poll_id . Django обрабатывает сопоставление автоматически.

Как правило, работа с базой данных в Django подразумевает работу исключительно с вашими моделями,
чтобы программа Django могла управлять основной базой данных от вашего имени.

Заполнение базы данных значениями из samples.json


Изначально база данных не содержит опросы. С помощью административного интерфейса можно добавить
опросы вручную в URL-адрес "/admin", а также посетить страницу "/seed" на работающем сайте, чтобы
заполнить базу данных опросами, определенными в файле samples.json приложения.

В файл urls.py проекта Django добавлен шаблон URL-адреса url(r'^seed$', app.views.seed, name='seed'), .
Представление seed в app/views.py загружает файл samples.json и создает необходимые объекты модели.
Затем Django автоматически создает соответствующие записи в основной базе данных.

Обратите внимание на использование декоратора @login_required для указания уровня авторизации для
представления.

@login_required
def seed(request):
"""Seeds the database with sample polls."""
samples_path = path.join(path.dirname(__file__), 'samples.json')
with open(samples_path, 'r') as samples_file:
samples_polls = json.load(samples_file)

for sample_poll in samples_polls:


poll = Poll()
poll.text = sample_poll['text']
poll.pub_date = timezone.now()
poll.save()

for sample_choice in sample_poll['choices']:


choice = Choice()
choice.poll = poll
choice.text = sample_choice
choice.votes = 0
choice.save()

return HttpResponseRedirect(reverse('app:home'))

Чтобы увидеть результат , сначала запустите приложение. Вы убедитесь, что опросов еще нет. Посетите
URL-адрес "/seed", и когда приложение возвратится на домашнюю страницу, вы увидите, что опросы стали
доступны. Опять же, вы можете изучить необработанный файл db.sqlite3 с помощью такого средства, как
браузер SQLite.

Вопрос. Можно ли инициализировать базу данных с помощью административной служебной программы


Django?
Ответ. Да, выполнить задачу, подобную заполнению страницы в приложении, можно с помощью команды
django-admin loaddata. При работе с полным веб-приложением можно использовать сочетание двух
методов: инициализировать базу данных из командной строки, а затем преобразовать страницу начальных
значений в интерфейс API, в который можно отправлять любые произвольные объекты JSON, а не
полагаться на жестко запрограммированный файл.

Шаг 6-3. Использование миграций


При запуске команды manage.py makemigrations (с помощью контекстного меню в Visual Studio) после
создания проекта в Django создается файл app/migrations/0001_initial.py. Этот файл содержит скрипт ,
который создает таблицы исходной базы данных.

Так как со временем в модели постоянно вносятся изменения, Django позволяет легко поддерживать
актуальность базовой схемы базы данных в отношении этих моделей. Общий рабочий процесс выглядит
следующим образом:

1. Внесите изменения в модели в вашем файле models.py.


2. В Visual Studio щелкните правой кнопкой мыши проект в обозревателе решений и выберите Python
команду > Django Make Migrations (Выполнить миграцию Django). Как упоминалось ранее, эта
команда создает скрипты в app/migrations для переноса базы данных из текущего состояния в новое.
3. Чтобы применить скрипты к фактической базе данных, щелкните правой кнопкой мыши проект и
выберите Python > Миграция Django .

Django отслеживает , какие миграции были применены к любой конкретной базе данных. Таким образом,
при выполнении команды миграции Django применяет необходимую миграцию. К примеру, если при
создании новой пустой базы данных выполнить команду миграции, будут применены все скрипты миграции
и база данных будет переведена в актуальное состояние, соответствующее текущим моделям.
Аналогичным образом, если внести несколько изменений в модели и создать миграции на компьютере
разработчика, можно применить накопительные миграции к рабочей базе данных, выполнив команду
миграции на рабочем сервере. Django повторно применяет только те скрипты миграции, которые были
созданы после последней миграции рабочей базы данных.

Чтобы увидеть эффект от изменения модели, сделайте следующее:

1. Добавьте необязательное поле author в app/models.py модели Poll, присоединив следующую строку
после поля pub_date , чтобы получить необязательное поле author :

author = models.CharField(max_length=100, blank=True)

2. Сохраните файл, затем щелкните правой кнопкой мыши проект DjangoPolls в обозревателе
решений и выберите команду Python > Django Make Migrations (Выполнить миграцию Django).

3. Выберите команду Проект > Показать все файлы, чтобы увидеть в папке migrations созданный
скрипт с именем, начинающимся с 002_auto_ . Щелкните правой кнопкой мыши файл и выберите
команду Include In Project (Включить в проект ). Затем можно выбрать Проект > Show All Files
(Показать все файлы) еще раз, чтобы восстановить исходное представление. (Подробные сведения
об этом шаге см. во втором вопросе ниже.)

4. При необходимости откройте этот файл, чтобы проверить, как в Django создается скрипт изменения
с предыдущего состояния модели на новое состояние.

5. Щелкните правой кнопкой мыши проект Visual Studio и выберите Python > Миграция Django ,
чтобы применить изменения к базе данных.

6. При желании откройте базу данных в соответствующем средстве просмотра, чтобы подтвердить
изменение.

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

Вопрос. Что произойдет, если забыть выполнить команду миграции после внесения изменений в
модели?
Ответ. Если модели не соответствуют содержимому базы данных, работа программы Django завершается
ошибкой во время выполнения с соответствующими исключениями. Например, если вы забыли перенести
изменение модели, описанное в предыдущем разделе, появится сообщение об ошибке no such column:
app_poll.author :

.
Вопрос. Почему в обозревателе решений после выполнения команды Django Make Migrations
(Выполнить миграцию Django ) не отображаются вновь созданные скрипты?
Ответ. Несмотря на то, что вновь созданные скрипты находятся в папке app/migrations и применяются при
выполнении команды Миграция Django , они не отображаются автоматически в обозревателе
решений из-за того, что не были добавлены в проект Visual Studio. Чтобы они отображались, сначала
выберите Проект > команду меню Show All Files (Показать все файлы) или кнопку панели инструментов,
выделенную на рисунке ниже. Если выполнить эту команду, в обозревателе решений будут
отображаться все файлы в папке проекта, при этом для элементов, которые не были добавлены в сам
проект , будут использоваться значки с пунктирной линией. Щелкните правой кнопкой мыши файлы,
которые требуется добавить, и выберите Include In Project (Включить в проект ), в результате чего они
также будут добавлены в систему управления исходным кодом со следующей фиксацией.
Вопрос. Можно ли узнать, какие виды миграции будут применяться перед запуском команды миграции?
Ответ. Да, воспользуйтесь командой django-admin showmigrations.

Шаг 6-4. Сведения о представлениях и шаблонах страниц,


созданных с использованием шаблона проекта
Большинство представлений, созданных с использованием шаблона "Веб-проект опроса Django", такие как
представления для страниц "О программе" и "Контактные сведения", похожи на представления, созданные с
использованием шаблона "Веб-проект Django", с которым вы работали ранее в этом руководстве.
Отличительной чертой приложения Polls является то, что для домашней страницы используются модели,
как и для нескольких добавленных страниц для голосования и просмотра результатов опроса.

Для начала первая строка в массиве urlpatterns в файле urls.py проекта Django — это нечто большее, чем
просто перенаправление к представлению приложения. Вместо этого она получает файл urls.py
приложения:

from django.conf.urls import url, include


import app.views

urlpatterns = [
url(r'^', include('app.urls', namespace="app")),
# ..
]

Файл app/urls.py содержит более интересный код маршрутизации (пояснительные комментарии


добавлены):
urlpatterns = [
# Home page routing
url(r'^$',
app.views.PollListView.as_view(
queryset=Poll.objects.order_by('-pub_date')[:5],
context_object_name='latest_poll_list',
template_name='app/index.html',),
name='home'),

# Routing for a poll page, which use URLs in the form <poll_id>/,
# where the id number is captured as a group named "pk".
url(r'^(?P<pk>\d+)/$',
app.views.PollDetailView.as_view(
template_name='app/details.html'),
name='detail'),

# Routing for <poll_id>/results pages, again using a capture group


# named pk.
url(r'^(?P<pk>\d+)/results/$',
app.views.PollResultsView.as_view(
template_name='app/results.html'),
name='results'),

# Routing for <poll_id>/vote pages, with the capture group named


# poll_id this time, which becomes an argument passed to the view.
url(r'^(?P<poll_id>\d+)/vote/$', app.views.vote, name='vote'),
]

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


вставить выражение в regex101.com, чтобы получить объяснение простым языком. (Вам потребуется
создать escape-символы для косых черт / , добавив обратную косую черту \ перед ними. Это не является
обязательным в Python из-за наличия префикса r в строке, означающего "raw".)

В Django синтаксис ?P<name>pattern создает группу с именем name , которая передается как аргументы в
представления в порядке их отображения. В коде, показанном выше, PollsDetailView и PollsResultsView
получают аргумент с именем pk и app.views.vote принимает аргумент с именем poll_id .

Вы также можете видеть, что большая часть представлений — это не просто прямые ссылки на функцию
представления в app/views.py. Вместо этого большинство из них ссылаются на класс в одном и том же
файле, который является производным от django.views.generic.ListView или django.views.generic.DetailView
. Базовые классы предоставляют методы as_view , которые принимают аргумент template_name для
определения шаблона. Базовый класс ListView , который был использован для домашней страницы, также
ожидает свойство queryset , содержащее данные, и свойство context_object_name с именем переменной, по
которому необходимо ссылаться на данные в шаблоне, в этом случае latest_poll_list .

Теперь можно проверить домашнюю страницу в PollListView , что определено следующим образом в
app/views.py:

class PollListView(ListView):
"""Renders the home page, with a list of all polls."""
model = Poll

def get_context_data(self, **kwargs):


context = super(PollListView, self).get_context_data(**kwargs)
context['title'] = 'Polls'
context['year'] = datetime.now().year
return context

Все это выполнено для определения модели, с которой работает представление (Poll), а также
переопределяет метод get_context_data , чтобы добавить значения title и year в контекст.
Основа шаблона (templates/app/index.html) выглядит так:

{% if latest_poll_list %}
<table class="table table-hover">
<tbody>
{% for poll in latest_poll_list %}
<tr>
<td>
<a href="{% url 'app:detail' poll.id %}">{{poll.text}}</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<!-- ... other content omitted ... -->
{% endif %}

Проще говоря, шаблон получает список объектов Poll в latest_poll_list , а затем выполняет итерацию
этого списка, чтобы создать строку таблицы, содержащую ссылку на каждый опрос с помощью значения
text опроса. В теге {% url %} "app:detail" указывает на шаблон URL-адреса в app/urls.py с именем "detail" с
помощью poll.id в качестве аргумента. В результате этого Django создает URL-адрес с помощью
соответствующего шаблона и использует его для ссылки. Такая технологическая перспективность
означает , что этот шаблон URL-адреса можно изменить в любое время, а создаваемые ссылки
автоматически обновляются для сопоставления.

Классы PollDetailView и PollResultsView в app/views.py (здесь не показаны) практически идентичны


PollListView , за исключением того , что являются производным от DetailView вместо этого. Их
соответствующие шаблоны, app/templates/details.html и app/templates/results.html, помещают
соответствующие поля из моделей в различные элементы управления HTML. Отличительной чертой
details.html является то, что варианты для опроса содержатся в форме HTML, которая при отправке
выполняет запрос POST к URL-адресу /vote. Как показано выше, этот шаблон URL-адреса направляется в
app.views.vote , который реализуется следующим образом (обратите внимание на аргумент poll_id ,
который снова представляет собой именованную группу в регулярном выражении, используемом в
перенаправлении к этому представлению):

def vote(request, poll_id):


"""Handles voting. Validates input and updates the repository."""
poll = get_object_or_404(Poll, pk=poll_id)
try:
selected_choice = poll.choice_set.get(pk=request.POST['choice'])
except (KeyError, Choice.DoesNotExist):
return render(request, 'app/details.html', {
'title': 'Poll',
'year': datetime.now().year,
'poll': poll,
'error_message': "Please make a selection.",
})
else:
selected_choice.votes += 1
selected_choice.save()
return HttpResponseRedirect(reverse('app:results', args=(poll.id,)))

Здесь в представлении нет своего собственного соответствующего шаблона, как в других страницах.
Вместо этого оно проверяет выбранный опрос, отображающий сообщение 404, если опрос не существует
(на случай, если ввести URL-адрес в формате "vote/1a2b3c"). Затем оно проверяет , является ли выбранный
вариант допустимым для опроса. Если нет , блок except просто отображает страницу сведений снова с
сообщением об ошибке. Если вариант допустим, представление подсчитывает голоса и перенаправляет на
страницу результатов.

Шаг 6-5. Создание настраиваемого административного


интерфейса
Последняя часть шаблона "Веб-проект опроса Django" представляет собой пользовательские расширения
для административного интерфейса Django по умолчанию, как показано выше в этой статье на шаге 6–1. По
умолчанию интерфейс предоставляет возможности управления пользователями и группами и ничего
более. Шаблон проекта Polls добавляет функции, которые позволяют также управлять опросами.

Во-первых, в шаблоны URL-адреса в urls.py проекта Django по умолчанию добавлен


url(r'^admin/', include(admin.site.urls)), . Шаблон "admin/doc" также добавлен путем закомментирования.

Приложение содержит файл admin.py, который Django автоматически запускает при посещении
административного интерфейса благодаря добавлению django.contrib.admin в массив INSTALLED_APPS в
settings.py. Код в этом файле, как указано в шаблоне проекта, выглядит следующим образом:

from django.contrib import admin


from app.models import Choice, Poll

class ChoiceInline(admin.TabularInline):
"""Choice objects can be edited inline in the Poll editor."""
model = Choice
extra = 3

class PollAdmin(admin.ModelAdmin):
"""Definition of the Poll editor."""
fieldsets = [
(None, {'fields': ['text']}),
('Date information', {'fields': ['pub_date']}),
]
inlines = [ChoiceInline]
list_display = ('text', 'pub_date')
list_filter = ['pub_date']
search_fields = ['text']
date_hierarchy = 'pub_date'

admin.site.register(Poll, PollAdmin)

Как видите, класс PollAdmin является производным от django.contrib.admin.ModelAdmin и настраивает


количество полей с помощью имен из модели Poll , которой он управляет. Эти поля описаны в параметрах
ModelAdmin в документации по Django.
Если вызвать admin.site.register , класс подключится к модели ( Poll ) и добавит его в интерфейс
администратора. Ниже приведен общий результат :
Следующие шаги
NOTE
Если вы зафиксировали свое решение Visual Studio с системой управления исходным кодом в ходе работы с этим
руководством, настало время сделать другую фиксацию. Ваше решение должно соответствовать исходному коду
руководства на сайте GitHub: Microsoft/python-sample-vs-learning-django.

Вы узнали все о шаблонах "Пустой веб-проект Django", "Веб-проект Django" и "Веб-проект опроса Django" в
Visual Studio. Вы ознакомились с основами Django, а именно с использованием представлений и шаблонов, и
изучили маршрутизацию, проверку подлинности и использование моделей базы данных. Теперь вы можете
создать свое собственное веб-приложение с любыми необходимыми представлениями и моделями.

Запуск веб-приложения на компьютере разработчика — это лишь один шаг, чтобы сделать приложение
доступным для клиентов. Следующие шаги могут включать приведенные ниже задачи:

Развертывание веб-приложения на рабочий сервер, например в службу приложений Azure. См.


статью Публикация в "Службе приложений Azure".

Настройка страницы 404 путем создания шаблона с именем templates/404.html. При наличии Django
использует этот шаблон вместо шаблона по умолчанию. Дополнительные сведения см. в разделе о
представлениях ошибок в документации по Django.

Написание модульных тестов tests.py. Шаблоны проектов Visual Studio предоставляют отправные
точки для них. Дополнительные сведения можно получить в статьях по написанию первого
приложения Django и тестированию Django в документации по Django.

Изменение приложения с SQLite на хранилище данных промышленного уровня, например PostgreSQL,


MySQL и SQL Server (все из них могут размещаться на платформе Azure). Как описано в статье про
использование SQLite (sqlite.org), SQLite отлично работает с сайтами с низким и средним уровнем
трафика с менее чем 100 тысяч попаданий/день, но использовать большие объемы не
рекомендуется. Кроме того, он работает только на одном компьютере, поэтому может
использоваться в любом сценарии с несколькими серверами, таком как балансировка нагрузки и
георепликация. Сведения о поддержке Django в других базах данных см. в разделе Database setup
(Настройка базы данных). Вы можете также использовать пакет SDK Azure для Python, чтобы
работать со службами хранилища Azure, такими как таблицы и большие двоичные объекты.

Настройте конвейер непрерывной интеграции или непрерывного развертывания в таких службах,


как Azure DevOps. В дополнение к работе с системой управления исходным кодом (в Azure Repos,
GitHub или в другом месте), можно настроить проект Azure DevOps для автоматического выполнения
модульных тестов в качестве необходимого условия для выпуска, а также настроить конвейер для
развертывания на промежуточный сервер для дополнительных тестов перед развертыванием в
рабочей среде. Кроме того, Azure DevOps интегрируется с решениями мониторинга, такими как App
Insights, и закрывает весь цикл гибкими средствами планирования. Дополнительные сведения см. в
статье Создание конвейера CI/CD для Python с помощью проекта Azure DevOps и в общей
документации по Azure DevOps.
Руководство. Начало работы с веб-платформой
Flask в Visual Studio
21.10.2020 • 26 minutes to read • Edit Online

Flask — это упрощенная платформа Python для веб-приложений, которая обеспечивает основные
возможности маршрутизации URL-адресов и визуализации страниц.

Flask называют "микро"-платформой, так как она не предоставляет напрямую такие функции, как проверка
форм, абстракция базы данных, проверка подлинности и т. д. Эти функции предоставляются специальными
пакетами Python, называемыми расширениями Flask. Расширения легко интегрируются с Flask и
отображаются так, как будто являются частью самой среды Flask. Например, Flask не предоставляет модуль
шаблонов страницы. Использование шаблонов обеспечивается расширениями, такими как Jinja и Jade, как
демонстрируется в этом учебнике.

В этом руководстве описано следующее.

создавать базовый проект Flask в репозитории Git с помощью шаблона "Пустой веб-проект Flask" (шаг
1);
создавать приложение Flask с одной страницей и преобразовать эту страницу для просмотра с помощью
шаблона (шаг 2);
обслуживать статические файлы, добавлять страницы и использовать наследование шаблонов (шаг 3);
использовать шаблон веб-проекта Flask для создания приложения с несколькими страницами и
адаптивным дизайном (шаг 4).
Используйте шаблон "Веб-проект опроса Flask", чтобы создать приложение опроса, использующее
различные варианты хранения (хранилище Azure, MongoDB или память).

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

NOTE
Этот учебник отличается от Краткого руководства Flask, которое содержит дополнительные сведения о Flask, а
также об использовании различных шаблонов проектов Flask, которые предоставляют более широкие
возможности для создания собственных проектов. Например, шаблоны проектов автоматически устанавливают
пакет Flask при создании проекта, вместо установки пакета вручную, как показано в кратком руководстве.

предварительные требования
Visual Studio 2017 или более поздней версии в системе Windows со следующими параметрами:
Рабочая нагрузка Разработка на Python (вкладка Рабочая нагрузка в установщике).
Инструкции см. в статье Установка поддержки Python в Visual Studio.
Git для Windows и расширение GitHub для Visual Studio на вкладке Отдельные
компоненты в разделе Средства кода .

Шаблоны проектов Flask также входят в состав всех ранних версий инструментов Python для Visual Studio,
хотя и могут незначительно отличаться от рассматриваемых в этом руководстве.
Разработка Python в настоящее время не поддерживается в Visual Studio для Mac. В системах Mac и Linux
используйте расширение Python в Visual Studio Code.

Шаг 1–1. Создание проекта и решения Visual Studio


1. В Visual Studio выберите Файл > Создать > Проект , выполните поиск по запросу "Flask" и
выберите шаблон Пустой веб- проект Flask . (Шаблон также можно найти в папке Python >
Интернет в списке слева.)

2. В нижней части диалогового окна в полях введите следующие сведения (как показано на
предыдущем рисунке), а затем нажмите кнопку ОК.

Имя. В качестве имени проекта Visual Studio укажите BasicProject . Это имя используется также и
для проекта Flask.
Расположение . Укажите расположение для создания решения и проекта Visual Studio.
Имя решения. Укажите LearningFlask . В этом руководстве данное имя подходит для решения
как контейнер для нескольких проектов.
Создать каталог для решения. Оставьте флажок установленным (по умолчанию).
Создать новый репозиторий Git . Выберите этот параметр (по умолчанию флажок не
установлен), чтобы при создании решения в Visual Studio был создан локальный репозиторий Git.
Если этот параметр не отображается, запустите Visual Studio Installer и добавьте Git для
Windows и Расширение GitHub для Visual Studio на вкладке Отдельные компоненты в
разделе Средства для работы с кодом.
3. Через некоторое время в Visual Studio отобразится диалоговое окно с сообщением Для этого
проекта требуются внешние пакеты (как показано ниже). Это диалоговое окно открывается,
так как шаблон включает файл requirements.txt, ссылающийся на последнюю версию пакета Flask 1.x.
(Выберите Показать необходимые пакеты, чтобы просмотреть точный список зависимостей.)
4. Выберите параметр I will install them myself (Я установлю их самостоятельно). В ближайшее время
вы можете создать виртуальное окружение и исключить его из системы управления версиями.
(Окружение всегда можно создать из requirements.txt.)

Шаг 1–2. Проверка элементов управления Git и публикация в


удаленном репозитории
Так как вы выбрали Создать новый репозиторий Git в диалоговом окне Новый проект , проект уже
был зафиксирован в локальной системе управления версиями сразу после завершения процесса создания.
На этом шаге вы ознакомитесь с элементами управления Git в Visual Studio и окном Team Explorer , в
котором вы будете работать с системой управления версиями.

1. Проверьте элементы управления Git в нижнем углу главного окна Visual Studio. Эти элементы
управления отображаются в следующем порядке (слева направо): неотправленные фиксации,
незафиксированные изменения, имя репозитория и текущая ветвь.

NOTE
Если вы не выбрали параметр Созд ать новый репозиторий Git в диалоговом окне Новый проект,
элементы управления Git отображают только команду Добавить в систему управления версиями,
которая создает локальный репозиторий.

2. Нажмите кнопку "Изменить" и в Visual Studio на странице изменений откроется окно Team
Explorer . Так как созданный проект уже зафиксирован в системе управления версиями
автоматически, ожидающие изменения не отобразятся.
3. В строке состояния Visual Studio нажмите кнопку фиксации (стрелка вверх со значением 2 ), чтобы
открыть страницу Синхронизация в Team Explorer . Так как у вас есть только локальный
репозиторий, страница предоставляет простые варианты для публикации репозитория для разных
удаленных репозиториев.

Для своих проектов вы можете выбрать любую службу. В этом руководстве используется GitHub.
Завершенный пример кода для работы см. в репозитории Microsoft/python-sample-vs-learning-flask.

4. При выборе любого из элементов управления Публикация Team Explorer предложит проверить
зависимости для получения дополнительной информации. Например, при публикации примера для
этого руководства сначала нужно было создать репозиторий, и в этом случае параметр Отправить
в удаленный репозиторий использовался с URL-адресом репозитория.
Если у вас нет репозитория, параметры Опубликовать в GitHub и Отправить в Azure DevOps
позволяют создать его непосредственно из Visual Studio.

5. При работе с этим руководством вы будете периодически использовать элементы управления в


Visual Studio для фиксации и отправки изменений. Мы напомним вам об этом при необходимости.

TIP
Для быстрого перемещения в Team Explorer выберите заголовок (Изменения или Отправить), чтобы открыть
контекстное меню доступных страниц.

Вопрос. Каковы преимущества использования системы управления версиями с самого начала проекта?
Ответ. Прежде всего использование системы управления версиями с самого начала, особенно если вы
также используете удаленный репозиторий, обеспечивает регулярное резервное копирование вашего
проекта. В отличие от поддержки проекта только в локальной файловой системе, система управления
версиями также предоставляет полную историю изменений и возможность отменить изменения одного
файла или всего проекта. История изменений помогает определить причину регрессий (сбои при
тестировании). Кроме того, система управления версиями необходима в случае, если над проектом
работают несколько человек. Она управляет перезаписыванием и обеспечивает разрешение конфликтов.
Наконец, система управления версиями, которая является формой автоматизации, отлично подходит для
автоматизации сборки, тестирования и управления выпусками. Это первый шаг в использовании DevOps
для проекта, и так как барьеры для входа настолько низки, нет оснований не использовать систему
управления версиями с самого начала.

Дополнительные сведения о системе управления версиями как средства автоматизации см. в статье Mobile
DevOps - The Source of Truth: The Role of Repositories in DevOps (DevOps для мобильных устройств. Источник
правды. Роль репозиториев в DevOps) в журнале MSDN. Эта статья написана для мобильных приложений,
однако она применима также и к веб-приложениям.

Вопрос. Можно ли отменить автоматическую фиксацию нового проекта в Visual Studio?


Ответ. Да. Чтобы отключить автоматическую фиксацию, перейдите на страницу Параметры в Team
Explorer , выберите Git > Глобальные параметры, снимите флажок Commit changes after merge by
default (Фиксировать изменения после объединения по умолчанию), а затем нажмите кнопку Обновить.

Шаг 1–3. Создание виртуального окружения и его исключение из


системы управления версиями
Теперь, когда вы настроили систему управления версиями для своего проекта, можно создать виртуальное
окружение для необходимых пакетов Flask. Затем с помощью Team Explorer вы сможете исключить папку
окружения из системы управления версиями.

1. В обозревателе решений щелкните правой кнопкой мыши элемент Окружения Python и


выберите Добавление виртуального окружения.
2. Откроется диалоговое окно Добавление виртуального окружения с сообщением Найден
файл requirements.txt . Это сообщение указывает , что Visual Studio использует данный файл для
настройки виртуального окружения.

3. Нажмите кнопку Создать, чтобы принять параметры по умолчанию. (При желании вы можете
изменить имя виртуального окружения, просто изменив имя своей подпапки. Однако env является
стандартным соглашением.)

4. Согласитесь с привилегиями администратора при появлении запроса, а затем подождите несколько


минут , пока Visual Studio загружает и устанавливает пакеты. Для Flask и зависимостей этот процесс
представляет собой расширение нескольких тысяч файлов и примерно 100 подпапок. Ход
выполнения отображается в окне Вывод Visual Studio. Во время ожидания просмотрите раздел
вопросов. Можно также просмотреть описание зависимостей Flask на странице установки Flask
(flask.pcocoo.org).
5. В элементах управления Visual Studio Git (в строке состояния) выберите индикатор изменений (со
значением 99* ), который открывает страницу Изменения в Team Explorer .

Создание виртуального окружения привело к многочисленным изменениям, но вам не нужно


включать их в систему управления версиями, потому что вы (или кто-то еще, клонирующий проект ) в
любое время сможете воссоздать окружение из requirements.txt.

Чтобы исключить виртуальное окружение, щелкните правой кнопкой мыши папку env и выберите
Игнорировать эти локальные элементы.
6. После исключения виртуального окружения единственными оставшимися изменениями являются
файл проекта и .gitignore. Файл .gitignore содержит добавленную запись для папки виртуального
окружения. Вы можете дважды щелкнуть файл, чтобы увидеть различия.

7. Введите сообщение о фиксации и нажмите кнопку Зафиксировать все , а затем при желании
отправьте фиксации в удаленный репозиторий.

Вопрос. Зачем нужно создавать виртуальное окружение ?


Ответ. Виртуальное окружение — это хороший способ изолировать конкретные зависимости вашего
приложения. Такая изоляция позволяет избежать конфликтов в глобальном окружении Python и помогает
как тестированию, так и совместной работе. Позже при разработке приложения вы неизменно используете
множество необходимых пакетов Python. Сохраняя пакеты в виртуальном окружении, зависящем от
проекта, вы сможете легко обновить файл requirements.txt проекта, описывающий это окружение в системе
управления версиями. При копировании проекта на любые другие компьютеры, включая серверы сборки,
серверы развертывания и другие компьютеры разработки, легко воссоздать окружение, используя только
requirements.txt (поэтому окружение не должно находиться в системе управления версиями). См.
дополнительные сведения о виртуальных окружениях.

Вопрос. Как удалить виртуальное окружение , которое уже было привязано к системе управления
версиями?
Ответ. Сначала измените файл .gitignore, чтобы исключить папку. Найдите раздел с комментарием
в конце и добавьте новую строку для папки виртуального
# Python Tools for Visual Studio (PTVS)
окружения, например /BasicProject/env . (Так как в Visual Studio файл не отображается в обозревателе
решений, откройте его напрямую с помощью команды меню Файл > Открыть > Файл. Вы также можете
открыть файл из Team Explorer . На странице Параметры выберите Параметры репозитория,
перейдите в раздел Пропуск и файлы атрибутов, а затем щелкните ссылку Изменить рядом с
.gitignore .)
Во-вторых, откройте окно команд, перейдите к папке типа BasicProject, содержащей папку виртуального
окружения, например env, и выполните команду git rm -r env . Затем скопируйте эти изменения из
командной строки ( git commit -m 'Remove venv' ) или зафиксируйте на странице изменений в Team
Explorer .

Шаг 1–4. Изучение стереотипного кода


1. После завершения создания проекта вы увидите решение и проект в обозревателе решений, где
проект содержит только два файла, app.py и requirements.txt:

2. Как уже отмечалось, в файле requirements.txt указана зависимость пакета Flask. Этот файл
предлагает создать виртуальное окружение при первом создании проекта.

3. Один файл app.py состоит из трех частей. Первая часть — инструкция import для Flask, создающая
экземпляр класса Flask , который присваивается переменной app , а затем назначает переменную
wsgi_app (она удобна при развертывании на веб-узле, но сейчас не используется):

from flask import Flask


app = Flask(__name__)

# Make the WSGI interface available at the top level so wfastcgi can get it.
wsgi_app = app.wsgi_app

4. Вторая часть, в конце файла, — небольшой дополнительный фрагмент кода, который запускает
сервер разработки Flask с определенными значениями узла и порта, полученными из переменных
среды (по умолчанию localhost:5555):

if __name__ == '__main__':
import os
HOST = os.environ.get('SERVER_HOST', 'localhost')
try:
PORT = int(os.environ.get('SERVER_PORT', '5555'))
except ValueError:
PORT = 5555
app.run(HOST, PORT)

5. Третья часть — короткий фрагмент кода, который назначает функцию маршруту URL-адресов, то
есть функция предоставляет ресурс, определяемый URL-адресом. Маршруты определяются с
помощью декоратора @app.route Flask, аргументом которого является относительный URL-адрес из
корня сайта. Как видно в коде, здесь функция возвращает только строку текста, которая может
использоваться для отображения в браузере. В последующих шагах отображаются более полные
страницы с помощью HTML.

@app.route('/')
def hello():
"""Renders a sample page."""
return "Hello World!"
Вопрос. Для чего предназначен аргумент name в классе Flask?
Ответ. Аргумент представляет имя модуля или пакет приложения и сообщает Flask, где следует искать
шаблоны, статические файлы и другие ресурсы, относящиеся к приложению. Для приложений,
содержащихся в одном модуле, __name__ всегда имеет правильное значение. Он также важен для
расширений, которым требуется отладочная информация. Дополнительные сведения и дополнительные
аргументы см. в документации по классу Flask (flask.pocoo.org).

Вопрос. Может ли функция иметь несколько декораторов маршрута?


Ответ. Да, можно использовать любое необходимое число декораторов, если одна функция обслуживает
несколько маршрутов. Например, чтобы использовать функцию hello для "/" и "/hello", используйте
следующий код:

@app.route('/')
@app.route('/hello')
def hello():
"""Renders a sample page."""
return "Hello World!"

Вопрос. Как Flask обрабатывает переменные маршруты URL -адресов и параметры запроса?
Ответ. В маршруте можно пометить любую переменную с помощью <variable_name> , и Flask передаст эту
переменную в функцию с помощью именованного аргумента. Переменная может быть частью URL-пути
или параметра запроса. Например, маршрут в виде '/hello/<name> формирует строковый аргумент name в
функции и, используя ?message=<msg> в маршруте, выполняет анализ значения, заданного для параметра
запроса "message=", а затем передает его в функцию в качестве msg :

@app.route('/hello/<name>?message=<msg>')
def hello(name, msg):
return "Hello " + name + "! Message is " + msg + "."

Чтобы изменить тип, установите для переменной префикс int , float , path (принимает символы косой
черты для разграничения имен папок) и uuid . Дополнительные сведения см. в разделе Правила
переменных в документации по Flask.

Параметры запроса также доступны через свойство request.args , в частности, через метод
request.args.get . Дополнительные сведения см. в разделе Объект запроса в документации по Flask.

Вопрос. Может ли Visual Studio создать файл requirements.txt из виртуального окружения после
установки других пакетов?
Ответ. Да. Разверните узел Окружения Python , щелкните свое виртуальное окружение правой кнопкой
мыши и выберите команду Создать requirements.txt . Эту команду хорошо использовать периодически
при изменении окружения и фиксировать изменения в файле requirements.txt в системе управления
версиями вместе с любыми другими изменениями кода, которые зависят от этого окружения. Если вы
настроили непрерывную интеграцию на сервере сборки, каждый раз при изменении окружения
необходимо создавать файл и фиксировать изменения.

Шаг 1.5. Запуск проекта


1. В Visual Studio выберите Отладка > Начать отладку (F5 ) или нажмите кнопку Веб- сервер на
панели инструментов (браузер может отличаться).

2. Любая из команд назначает случайный номер порта переменной среды PORT, а затем выполняет
python app.py . Код запускает приложение, используя этот порт в пределах сервера разработки Flask.
Если в Visual Studio отображается Не удалось запустить отладчик с сообщением об отсутствии
файла запуска, в обозревателе решений щелкните правой кнопкой мыши файл app.py и
выберите пункт Задать как файл запуска .

3. При запуске сервера откроется окно консоли, в котором также отображается журнал сервера. Visual
Studio автоматически открывает браузер на странице http://localhost:<port> , где должно появиться
сообщение, подготовленное к просмотру функцией hello :

4. По окончании остановите сервер, закрыв консольное окно или используя команду Отладка >
Остановить отладку в Visual Studio.

Вопрос. В чем разница между использованием команд меню "Отладка" и команд сервера в подменю
проекта Python?
Ответ. В дополнение к командам меню Отладка и кнопкам панели инструментов вы также можете
запустить сервер с помощью команд Python > Запуск сервера или Python > Запуск сервера отладки
в контекстном меню проекта. Обе команды открывают окно консоли, в котором содержится локальный
URL-адрес (localhost:port) для работающего сервера. Однако вы должны вручную открыть браузер с этим
URL-адресом. Запуск сервера отладки автоматически не запускает отладчик Visual Studio. При желании вы
можете присоединить отладчик к процессу позже с помощью команды Отладка > Присоединение к
процессу.

Дальнейшие действия
На этом этапе базовый проект Flask содержит код запуска и код страницы в одном файле. Рекомендуется
разделять эти два аспекта, а также разделять HTML и данные с помощью шаблонов.

Создание приложения Flask с представлениями и шаблонами страниц

Дополнительные подробности
Краткое руководство по Flask (flask.pocoo.org)
Исходный код, используемый в руководстве, на сайте GitHub: Microsoft/python-sample-vs-learning-flask
Шаг 2. Создание приложения Flask с
представлениями и шаблонами страниц
21.10.2020 • 13 minutes to read • Edit Online

Предыдущий шаг. Создание проекта и решения Visual Studio

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

На этом шаге вы научитесь делать следующее:

рефакторинг кода приложения для разделения представлений и кода запуска (шаг 2.1);
преобразование представления с помощью шаблона страницы (шаг 2.2).

Шаг 2-1. Рефакторинг проекта для поддержки дальнейшей


разработки
В коде, созданном с помощью шаблона "Пустой веб-проект Flask", у вас есть один файл app.py, содержащий
код запуска наряду с одним представлением. Для дальнейшей разработки приложения с несколькими
представлениями и шаблонами будет лучше разделить эти аспекты.

1. В папке проекта создайте папку приложения с именем (щелкните правой кнопкой мыши
HelloFlask
проект в обозревателе решений и выберите Добавить > Новая папка .)

2. В папке HelloFlask создайте файл с именем __init__.py со следующим содержимым, которое создает
экземпляр Flask и загружает представления приложения (созданные на следующем шаге):

from flask import Flask


app = Flask(__name__)

import HelloFlask.views

3. В папке HelloFlask создайте файл с именем views.py со следующим содержимым. Имя views.py важно,
так как вы использовали import HelloFlask.views в __init__.py; если имена не будут совпадать, во
время выполнения возникнет ошибка.

from flask import Flask


from HelloFlask import app

@app.route('/')
@app.route('/home')
def home():
return "Hello Flask!"

Помимо переименования функции и маршрутизации к home , этот код содержит код отрисовки
страницы из app.py и импортирует объект app , объявленный в __init__.py.

4. Создайте вложенную папку в HelloFlask с именем templates, которая пока остается пустой.
5. В корневой папке проекта переименуйте файл app.py в runserver.py и сделайте так, чтобы
содержимое совпадало со следующим кодом:

import os
from HelloFlask import app # Imports the code from HelloFlask/__init__.py

if __name__ == '__main__':
HOST = os.environ.get('SERVER_HOST', 'localhost')

try:
PORT = int(os.environ.get('SERVER_PORT', '5555'))
except ValueError:
PORT = 5555

app.run(HOST, PORT)

6. Структура проекта должна выглядеть следующим образом:

7. Выберите Отладка > Начать отладку (F5 ) или нажмите кнопку Веб- сервер на панели
инструментов (браузер может отличаться), чтобы запустить приложение и открыть браузер.
Попробуйте оба маршрута URL-адресов: / и/home.

8. Также можно установить точки останова в разных частях кода и перезапустить приложение для
выполнения последовательности запуска. Например, задайте точку останова в первых строках
runserver.py и HelloFlask_ init _.py, а также в строке return "Hello Flask!" в views.py. Затем
перезапустите приложение (с помощью пункта Отладка > Перезапуск , сочетания клавиш
CTRL +F5 или кнопки на панели инструментов, показанной ниже) и запустите пошаговое выполнение
кода (F10 ) или выполнение из каждой точки останова, нажав клавишу F5 .

9. По завершении остановите приложение.


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

1. Нажмите кнопку изменения в нижней части Visual Studio (выделена кружком ниже), чтобы перейти к
Team Explorer .

2. В Team Explorer введите сообщение фиксации, например "Рефакторинг кода", и выберите


Зафиксировать все . После завершения фиксации отобразится сообщение Фиксация <hash>
создана локально. Синхронизируйте , чтобы использовать изменения совместно с
сервером. Если вы хотите отправить изменения в удаленный репозиторий, выберите
Синхронизировать, а затем — Отправить в разделе Исходящие фиксации. Кроме того, вы
можете накапливать несколько локальных фиксаций перед отправкой в удаленный репозиторий.

Вопрос. Как часто следует выполнять фиксации в системе управления версиями?


Ответ. При фиксации изменений в системе управления версиями создается запись в журнале изменений и
точка, к которой можно вернуть репозиторий при необходимости. Кроме того, в каждой фиксации можно
проверить конкретные изменения. Поскольку фиксации в Git стоят недорого, рекомендуется чаще
выполнять фиксации, а не накапливать большое число изменений в одной фиксации. Очевидно, что
фиксировать каждое небольшое изменение в отдельном файле тоже не стоит. Обычно фиксация
выполняется при добавлении возможности, изменении структуры (как в этом шаге) или осуществлении
некоторого рефакторинга кода. Кроме того, рекомендуется обсудить частоту и условия фиксаций с
другими участниками команды.

Не стоит путать частоту фиксации и частоту отправки фиксаций в удаленный репозиторий. Несколько
фиксаций можно накапливать в локальном репозитории перед отправкой в удаленный репозиторий. Опять
же, частота фиксаций зависит от решения, принятого командой в отношении управления репозиторием.

Шаг 2-2. Использование шаблона для отображения страницы


Функция home в views.py создает только ответы HTTP в простом текстовом формате для страницы. Тем не
менее большинство реальных веб-страниц предоставляют ответы с большим количеством страниц HTML,
которые часто содержат фактические данные. На самом деле основной причиной для определения
представления с помощью функции является возможность создавать содержимое динамически.

Поскольку возвращаемое значение для представления — просто строка, можно создать любой нужный код
HTML в строке, используя динамическое содержимое. Тем не менее, поскольку рекомендуется разделять
разметку и данные, будет лучше разместить разметку в шаблоне и хранить данные в коде.

1. Для начинающих разработчиков рекомендуется изменить файл views.py так, чтобы он содержал
следующий код, который использует встроенный HTML-код для страницы с некоторым
динамическим содержимым:
from datetime import datetime
from flask import render_template
from HelloFlask import app

@app.route('/')
@app.route('/home')
def home():
now = datetime.now()
formatted_now = now.strftime("%A, %d %B, %Y at %X")

html_content = "<html><head><title>Hello Flask</title></head><body>"


html_content += "<strong>Hello Flask!</strong> on " + formatted_now
html_content += "</body></html>"

return html_content

2. Запустите приложение и обновите страницу несколько раз, чтобы увидеть, что дата и время
обновляются. По завершении остановите приложение.

3. Чтобы преобразовать механизм отрисовки страницы для использования шаблона, создайте файл с
именем index.html в папке templates со следующим содержимым, где {{ content }} — заполнитель
или маркер заполнителя (также называется переменной шаблона), для которого необходимо указать
значение в коде:

<html>
<head><title>Hello Flask</title></head>

<body>
{{ content }}
</body>
</html>

4. Измените функцию home так, чтобы она использовала render_template для загрузки шаблона, и
укажите значение для свойства content, для чего требуется указать именованный аргумент ,
соответствующий имени заполнителя. Flask автоматически выполняет поиск шаблонов в папке
templates, поэтому путь к шаблону указывается относительно этой папки:

def home():
now = datetime.now()
formatted_now = now.strftime("%A, %d %B, %Y at %X")

return render_template(
"index.html",
content = "<strong>Hello, Flask!</strong> on " + formatted_now)

5. Запустите приложение, чтобы увидеть результаты, и обратите внимание на то, что встроенный
HTML-код в значении content не преобразуется как HTML, так как модуль шаблонов (Jinja)
автоматически экранирует HTML-содержимое. Автоматическое экранирование предотвращает
случайные уязвимости к атакам путем внедрения кода: разработчики часто собирают входные
данные с одной страницы и используют их в качестве значения на другой странице с помощью
заполнителя шаблона. Экранирование служит напоминанием о том, что HTML-код не рекомендуется
хранить в коде.

Соответственно, просмотрите файл templates\index.html, чтобы задать четкие заполнители для


каждой части данных в разметке:
<html>
<head>
<title>{{ title }}</title>
</head>
<body>
<strong>{{ message }}</strong>{{ content }}
</body>
</html>

Затем обновите функцию home для предоставления значений для всех заполнителей:

def home():
now = datetime.now()
formatted_now = now.strftime("%A, %d %B, %Y at %X")

return render_template(
"index.html",
title = "Hello Flask",
message = "Hello, Flask!",
content = " on " + formatted_now)

6. Запустите приложение еще раз, чтобы увидеть правильно выводимые данные.

7. Зафиксируйте изменения в системе управления версиями и обновите удаленный репозиторий при


необходимости, как описано в шаге 2.1.

Вопрос. Следует ли хранить шаблоны страницы в отдельном файле ?


Ответ. Хотя шаблоны обычно хранятся в отдельных HTML-файлах, вы также можете использовать
встроенный шаблон. Чтобы сохранить четкое разделение между исправлением и кодом, рекомендуется
использовать отдельный файл.

Вопрос. Следует ли использовать в шаблонах расширение файлов HTML?


Ответ. Использовать расширение .html для файлов шаблона страницы совсем необязательно, так как вы
всегда определяете точный относительный путь к файлу в первом аргументе функции render_template .
Однако Visual Studio (и другие редакторы) обычно предоставляет такие функции, как завершение кода или
разметка синтаксиса, для файлов HTML , что значительно важнее того, что шаблоны страниц не имеют
строгого формата HTML.

На самом деле при работе с проектом Flask Visual Studio автоматически определяет , является ли HTML-
файл, который вы редактируете, шаблоном Flask, и предоставляет несколько функций с автоматическим
завершением. Например, когда вы начинаете вводить комментарий шаблона страницы Flask, {# , Visual
Studio автоматически предоставляет вам закрывающие символы #} . В командах Закомментировать
выделенный фрагмент и Раскомментировать выделенный фрагмент (в меню Изменить >
Дополнительно или на панели инструментов) также используются комментарии шаблона, а не HTML.

Вопрос. Можно ли поместить шаблоны в дополнительные вложенные папки?


Ответ. Да, можно использовать вложенные папки и ссылаться на относительный путь в templates в вызовах
render_template . Это позволяет эффективно создавать пространства имен для шаблонов.
Следующие шаги
Обработка статических файлов, добавление страниц и использование наследования шаблонов

Дополнительные подробности
Flask Quickstart - Rendering Templates (Краткое руководство по Flask — отрисовка шаблонов)
(flask.pocoo.org)
Исходный код учебника на GitHub: Microsoft/python-sample-vs-learning-flask
Шаг 3. Обработка статических файлов, добавление
страниц и использование наследования шаблонов
с помощью приложения Flask
21.10.2020 • 16 minutes to read • Edit Online

Предыдущий шаг. Создание приложения Flask с представлениями и шаблонами страниц

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


одной страницей автономного HTML. Современные веб-приложения обычно состоят из многих страниц и
используют общие ресурсы, такие как файлы CSS и JavaScript, для обеспечения согласованного стиля и
реакции на события.

На этом шаге вы научитесь делать следующее:

с помощью шаблонов элементов Visual Studio быстро добавлять новые файлы различных типов с
удобным стереотипным кодом (шаг 3.1);
обрабатывать статические файлы из кода (шаг 3.2, дополнительный);
добавлять дополнительные страницы в приложение (шаг 3–3);
использовать наследование шаблона для создания заголовка и панели навигации, которая используется
на разных страницах (шаг 3–4).

Шаг 3–1. Знакомство с шаблонами элементов


По мере разработки приложения Flask обычно добавляется гораздо больше дополнительных файлов
Python, HTML, CSS и JavaScript. Для каждого типа файла (а также других файлов, таких как web.config,
которые могут понадобиться для развертывания) Visual Studio предоставляет удобные шаблоны элементов
для начала работы.

Чтобы просмотреть доступные шаблоны, перейдите к обозревателю решений, щелкните правой


кнопкой мыши папку, в которой необходимо создать элемент , выберите Добавить > Новый элемент :
Чтобы использовать шаблон, выберите нужный шаблон, укажите имя файла и нажмите кнопку ОК. При
добавлении элемента таким образом автоматически добавляется файл в проект Visual Studio и отмечает
изменения для системы управления версиями.

Вопрос. Как Visual Studio определяет, какой шаблон элемента предложить?


Ответ. Файл проекта Visual Studio (PYPROJ) содержит идентификатор типа проекта, который помечает его
как проект Python. Visual Studio использует этот тип идентификатора для отображения шаблонов
элементов, подходящих для типа проекта. Таким образом Visual Studio может предоставлять богатый
набор шаблонов элементов для многих типов проектов, который не требуется отсортировывать каждый
раз.

Шаг 3–2. Обработка статических файлов из приложения


В веб-приложении, созданном с помощью Python (с помощью любой платформы), файлы Python всегда
выполняются на сервере веб-узла и никогда не передаются на компьютер пользователя. Однако другие
файлы, такие как каскадные таблицы стилей и JavaScript, используются исключительно браузером, поэтому
сервер узла просто доставляет их без изменений всякий раз, когда они запрашиваются. Такие файлы
называются статическими файлами, Flask может доставлять их автоматически без необходимости
написания кода. В HTML-файлах, например, можно просто ссылаться на статические файлы, используя
относительный путь в проекте. Первый раздел в этом шаге служит для добавления файла CSS в
существующий шаблон страницы.

Если статический файл требуется предоставлять из кода, например через реализацию конечной точки API,
Flask предоставляет удобный метод, который позволяет ссылаться на файлы, используя относительные
пути в папке с именем static (в корневом каталоге проекта). Во втором разделе этого шага демонстрируется
работа этого метода с помощью простого статического файла данных.

В любом случае можно упорядочить файлы в static так, как вам удобно.

Использование статического файла в шаблоне


1. В обозревателе решений в проекте Visual Studio щелкните папку HelloFlask правой кнопкой
мыши, выберите Добавить > Новая папка и назовите папку static .
2. Щелкните папку static правой кнопкой мыши и выберите Добавить > Новый элемент . В
открывшемся диалоговом окне выберите шаблон Таблица стилей, назовите файл site.css и
нажмите кнопку ОК. Файл site.css появится в проекте и откроется в редакторе. Структура папки
должна выглядеть похоже на структуру на следующем рисунке:

3. Замените все содержимое site.css следующим кодом и сохраните файл:

.message {
font-weight: 600;
color: blue;
}

4. Замените содержимое файла templates/index.html приложения приведенным ниже кодом, который


заменяет элемент <strong> , используемый в шаге 2, элементом <span> , ссылающимся на класс стиля
message . Использование класса стиля таким образом дает большую гибкость в стилизации элемента.

<html>
<head>
<title>{{ title }}</title>
<link rel="stylesheet" type="text/css" href="/static/site.css" />
</head>
<body>
<span class="message">{{ message }}</span>{{ content }}
</body>
</html>

5. Запустите проект для просмотра результатов. Остановите приложение после выполнения и


зафиксируйте изменения в системе управления версиями, если это необходимо (как описано в шаге
2).
Обслуживание статического файла из кода
Flask предоставляет функцию с именем serve_static_file , которую можно вызвать из кода для ссылки на
любой файл в папке static проекта. В рамках следующей процедуры создается простая конечная точка API,
которая возвращает статический файл данных.

1. Создайте папку static, если это еще не сделано: в обозревателе решений в проекте Visual Studio
щелкните папку HelloFlask правой кнопкой мыши, выберите Добавить > Новая папка и назовите
папку static .

2. В папке static создайте статический файл данных JSON с именем data.json со следующим содержимым
(бессмысленный пример данных):
{
"01": {
"note" : "Data is very simple because we're demonstrating only the mechanism."
}
}

3. Во views.py добавьте функцию с маршрутом /api/data, которая возвращает статический файл данных
с помощью метода send_static_file :

@app.route('/api/data')
def get_data():
return app.send_static_file('data.json')

4. Запустите приложение и перейдите к конечной точке маршрута, API или данных, чтобы убедиться,
что статический файл возвращается. По завершении остановите приложение.

Вопрос. Существуют ли соглашения для организации статических файлов?


Ответ. Вы можете добавить другие файлы CSS, JavaScript и HTML в свою папку static любым способом.
Типичный способ организации статических файлов — это создание вложенных папок fonts, scripts и content
(для таблиц стилей и других файлов).
Вопрос. Как обрабатывать переменные URL -адреса и параметры запроса в API?
Ответ. См. ответ в шаге 1–4 для вопроса Как Flask обрабатывает переменные маршруты URL-адресов и
параметры запроса?

Шаг 3–3. Добавление страницы в приложение


Добавление еще одной страницы в приложение означает :

добавление функции Python, которая определяет представление;


добавление шаблона для исправления страницы;
добавление необходимой маршрутизации в файл urls.py проекта Flask.

Следующие действия добавляются на странице "Дополнительные сведения" проекта HelloFlask и связывают


эту страницу с домашней страницей:

1. В обозревателе решений щелкните правой кнопкой мыши папку templates , выберите Добавить
> Новый элемент , щелкните шаблон элемента HTML- страница , назовите файл about.html и
нажмите кнопку ОК.

TIP
Если команда Новый элемент не появляется в меню Добавить, убедитесь, что вы остановили
приложение, чтобы среда Visual Studio вышла из режима отладки.

2. Замените содержимое about.html следующей разметкой (вы замените явную ссылку на домашнюю
страницу простой навигационной панелью в шаге 3–4):
<html>
<head>
<title>{{ title }}</title>
<link rel="stylesheet" type="text/css" href="/static/site.css" />
</head>
<body>
<div><a href="home">Home</a></div>
{{ content }}
</body>
</html>

3. Откройте файл views.py приложения и добавьте функцию с именем about , которая использует
шаблон:

@app.route('/about')
def about():
return render_template(
"about.html",
title = "About HelloFlask",
content = "Example app page for Flask.")

4. Откройте файл templates/index.html и добавьте следующую строку прямо в элемент <body> , чтобы
связать страницу сведений (опять же, вы заменяете эту ссылку навигационной панелью в шаге 3–4):

<div><a href="about">About</a></div>

5. Сохраните все файлы с помощью команды меню Файл > Сохранить все или просто нажмите
клавиши CTRL +SHIFT +S . (Технически этот шаг не требуется, так как при запуске проекта в Visual
Studio файлы автоматически сохраняются. Однако об этой команде лучше знать.)
6. Выполните проект , чтобы просмотреть результаты и проверьте перемещение по страницам. После
завершения остановите выполнение приложения.

Вопрос. Имеет ли имя функции страницы значение в Flask?


Ответ. Нет , так как URL-адреса, для которых Flask вызывает функцию для получения ответа, определяет
декоратор @app.route . Разработчики обычно подбирают имя функции в соответствии с маршрутом, но
такое сопоставление необязательно.

Шаг 3–4. Использование наследования шаблона для создания


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

Система шаблонов Flask (по умолчанию Jinja) предоставляет два способа повторного использования
определенных элементов в нескольких шаблонах: включение и наследование.

Включение. Это другие шаблоны страниц, которые вставляются в определенное место в ссылочном
шаблоне, используя синтаксис {% include <template_path> %} . Кроме того, можно использовать
переменную, если необходимо динамически изменять путь в коде. Включение обычно используется в
тексте страницы для извлечения общего шаблона в определенном расположении на странице.
Наследование. В начале шаблона страницы используется {% extends <template_path> %} для
определения общего базового шаблона, на основе которого затем создается ссылочный шаблон.
Наследование обычно используется для определения общего макета, навигационной панели и
других структур для страниц приложения, так что ссылочным шаблонам необходимо только
добавлять или изменять определенные области базового шаблона, называемые блоками.

В обоих случаях <template_path> относится к папке templates приложения ( ../ или ./ также разрешены).

Базовый шаблон отделяет блоки с помощью тегов {% block <block_name> %} и {% endblock %} . Если
ссылающийся на него шаблон использует теги с тем же именем блока, содержимое его блока
переопределяет содержимое базового шаблона.

Далее демонстрируется наследование:

1. В папке templates приложения создайте HTML-файл (с помощью пункта контекстного меню


Добавить > Новый элемент или Добавить > HTML- страница ) с именем layout.html и замените
его содержимое приведенным ниже кодом. Вы увидите, что этот шаблон содержит блок под
названием content, который должен быть заменен для всех ссылающихся страниц:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>{{ title }}</title>
<link rel="stylesheet" type="text/css" href="/static/site.css" />
</head>

<body>
<div class="navbar">
<a href="/" class="navbar-brand">Hello Flask</a>
<a href="{{ url_for('home') }}" class="navbar-item">Home</a>
<a href="{{ url_for('about') }}" class="navbar-item">About</a>
</div>

<div class="body-content">
{% block content %}
{% endblock %}
<hr/>
<footer>
<p>&copy; 2018</p>
</footer>
</div>
</body>
</html>

2. Добавьте следующие стили в файл static/site.css приложения (в этом пошаговом руководстве мы не


пытаемся продемонстрировать гибкость дизайна; эти стили просто позволяют получить интересные
результаты):
.navbar {
background-color: lightslategray;
font-size: 1em;
font-family: 'Trebuchet MS', 'Lucida Sans Unicode', 'Lucida Grande', 'Lucida Sans', Arial, sans-
serif;
color: white;
padding: 8px 5px 8px 5px;
}

.navbar a {
text-decoration: none;
color: inherit;
}

.navbar-brand {
font-size: 1.2em;
font-weight: 600;
}

.navbar-item {
font-variant: small-caps;
margin-left: 30px;
}

.body-content {
padding: 5px;
font-family:'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
}

3. Измените templates/index.html для ссылки на базовый шаблон и переопределения блока content.


Можно увидеть, что с помощью наследования этот шаблон упрощается:

{% extends "layout.html" %}
{% block content %}
<span class="message">{{ message }}</span>{{ content }}
{% endblock %}

4. Измените файл templates/about.html так, чтобы он тоже ссылался на базовый шаблон и блок content в
нем переопределялся:

{% extends "layout.html" %}
{% block content %}
{{ content }}
{% endblock %}

5. Запустите сервер для просмотра результатов. Закройте сервер после завершения.

6. Так как в приложение были внесены значительные изменения, самое время зафиксировать изменения
в системе управления версиями.

Дальнейшие действия
Использование полного шаблона веб-проекта Flask
Дополнительные подробности
Развертывание веб-приложения в Службе приложений Azure
Сведения о дополнительных возможностях шаблонов Jinja, таких как поток управления, см. в
документации по конструктору шаблонов Jinja ( jinja.pocoo.org).
Дополнительные сведения об использовании url_for см. в разделе url_for в документации по объекту
приложения Flask (flask.pocoo.org).
Исходный код, используемый в руководстве, на сайте GitHub: Microsoft/python-sample-vs-learning-flask
Шаг 4. Использование полного шаблона веб-
проекта Flask
21.10.2020 • 12 minutes to read • Edit Online

Предыдущий шаг: Обработка статических файлов, добавление страниц и использование


наследования шаблонов

Теперь, когда вы ознакомились с основами Flask, создав в Visual Studio приложение на основе шаблона для
пустого проекта приложения Flask, вам будет легче создать более полное приложение с помощью шаблона
"Веб-проект Flask".
На этом этапе вы сделаете следующее:

создадите более полное веб-приложение Flask с помощью шаблона "Веб-проект Flask" и изучите
структуру проекта (шаг 4.1);
узнаете, какие представления и шаблоны страниц создаются при использовании шаблона проекта, в
котором содержится три страницы, наследованные от шаблона базовой страницы, и используются
статические библиотеки JavaScript, такие как jQuery и Bootstrap (ша 4.2);
узнаете, как реализуется маршрутизация URL-адресов, предоставляемая шаблоном (шаг 4.3).

Эта статья также относится к шаблону "Веб-проект Flask/Jade", который создает приложение, идентичное
приложению "Веб-проект Flask", с помощью модуля шаблонов Jade вместо Jinja. Дополнительные сведения
представлены в конце этой статьи.

Шаг 4.1. Создание проекта на основе шаблона


1. В Visual Studio перейдите к обозревателю решений, щелкните правой кнопкой мыши решение
LearningFlask , созданное ранее в рамках этого руководства, и выберите Добавить > Новый
проект . (Если же вы хотите использовать новое решение, вместо этого выберите Файл > Создать
> Проект .)
2. В диалоговом окне создания проекта найдите и выберите шаблон Веб- проект Flask , присвойте
проекту имя FlaskWeb и нажмите кнопку ОК.

3. Так как шаблон также включает файл requirements.txt, в Visual Studio запрашивается расположение
для установки этих зависимостей. Выберите параметр Install into a vir tual environment (Установка
в виртуальном окружении) и в диалоговом окне Добавление виртуального окружения
выберите Создать, чтобы принять значения по умолчанию.

4. Когда Visual Studio завершит настройку виртуального окружения, назначьте проект FlaskWeb в
качестве проекта по умолчанию для решения Visual Studio. Для этого в обозревателе решений
щелкните правой кнопкой мыши имя проекта и выберите пункт Назначить запускаемым
проектом. Запускаемый проект , выделенный полужирным шрифтом, выполняется при запуске
отладчика.
5. Выберите Отладка > Начать отладку (F5 ) или нажмите кнопку Веб- сервер на панели
инструментов, чтобы запустить сервер:

6. Приложение, созданное с помощью шаблона, содержит три страницы — домашнюю страницу, а


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

7. Приложение, созданное с помощью шаблона "Веб-проект Flask", использует созданный на основе


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

8. Вы можете оставить приложение запущенным и пройти следующие разделы.


Чтобы остановить работу приложения и зафиксировать изменения в системе управления исходным
кодом, сначала откройте страницу Изменения в Team Explorer , щелкните правой кнопкой мыши
папку виртуального окружения (возможно, env ) и выберите Игнорировать эти локальные
элементы.

Просмотр элементов, созданных с помощью шаблона


Шаблон "Веб-проект Flask" создает структуру, показанную ниже. Содержимое очень похоже на то, которое
мы создали на предыдущих шагах. Различие заключается в том, что шаблон "Веб-проект Flask" содержит
больше структур в папке static, так как он включает jQuery и начальную загрузку, обеспечивая
адаптивность. Шаблон также добавляет страницу контактных данных. В целом, если вы выполнили
предыдущую процедуру в этом учебнике, все компоненты шаблона должны быть вам знакомы.

Файлы в корневом каталоге проекта:


runserver.py — скрипт для запуска приложения на сервере разработки;
requirements.txt — файл, который содержит зависимость от Flask 0.x.
Папка FlaskWeb содержит все файлы приложения:
__init.py__ помечает код приложения как модуль Python, создает объект Flask и импортирует
представления приложения.
views.py содержит код для отображения страниц.
Папка static содержит вложенные папки с именами content (CSS-файлы), fonts (файлы шрифтов) и
scripts (файлы JavaScript).
Папка templates содержит базовый шаблон layout.html вместе с about.html, contact.html и index.html
для отдельных страниц, каждая из которых расширяет layout.html.

Вопрос. Можно ли предоставлять проектам Visual Studio общий доступ к виртуальному окружению ?
Ответ. Да, но при этом учитывайте, что, вероятно, со временем для разных проектов будут использоваться
разные пакеты. Таким образом, в общем виртуальном окружении будут содержаться все пакеты для всех
проектов, в которых используется окружение.

Чтобы все равно использовать существующее виртуальное окружение, сделайте следующее:

1. Когда в Visual Studio будет предложено установить зависимости, выберите вариант Я установлю их
самостоятельно.
2. В обозревателе решений щелкните правой кнопкой мыши узел Окружения Python и выберите
Добавить существующее виртуальное окружение .
3. Перейдите к папке виртуального окружения и выберите ее. Затем нажмите кнопку ОК.

Шаг 4.2. Сведения о представлениях и шаблонах страниц,


созданных с использованием шаблона проекта
При запуске проекта вы увидите, что приложение содержит три представления: домашняя страница, а
также страницы со сведениями и контактными данными. Код этих представлений хранится в папке
FlaskWeb/views.py. Каждая функция представления просто вызывает flask.render_template с путем к
шаблону и переменный список аргументов для значений, присваиваемых шаблону. Например, страница "О
программе" обрабатывается функцией about (декоратор которой обеспечивает маршрутизацию URL-
адресов):

@app.route('/about')
def about():
"""Renders the about page."""
return render_template(
'about.html',
title='About',
year=datetime.now().year,
message='Your application description page.'
)

Функции home и contact практически идентичны, имеют аналогичные декораторы и немного разные
аргументы.

Шаблоны расположены в папке templates приложения. Файл базового шаблона (layout.html) является
самым большим. В нем содержатся ссылки на все необходимые статические файлы (JavaScript и CSS),
определяется блок content, переопределяемый другими страницами, и предоставляется еще один блок с
именем scripts. Эти области показаны в следующем фрагменте файла layout.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />

<!-- Define a viewport for Bootstrap's responsive rendering -->


<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{ title }} - My Flask Application</title>

<link rel="stylesheet" type="text/css" href="/static/content/bootstrap.min.css" />


<link rel="stylesheet" type="text/css" href="/static/content/site.css" />
<script src="/static/scripts/modernizr-2.6.2.js"></script>
</head>

<body>
<!-- Navbar omitted -->

<div class="container body-content">


<!-- "content" block that pages are expected to override -->
{% block content %}{% endblock %}
<hr />
<footer>
<p>&copy; {{ year }} - My Flask Application</p>
</footer>
</div>

<!-- Additional scripts; use the "scripts" block to add page-specific scripts. -->
<script src="/static/scripts/jquery-1.10.2.js"></script>
<script src="/static/scripts/bootstrap.js"></script>
<script src="/static/scripts/respond.js"></script>
{% block scripts %}{% endblock %}

</body>
</html>

Каждый шаблон отдельной страницы (about.html, contact.html и index.html) дополняет основной шаблон
layout.html. about.html — это самый простой шаблон, в котором отображаются теги {% extends %} и
{% block content %} .

{% extends "app/layout.html" %}

{% block content %}

<h2>{{ title }}.</h2>


<h3>{{ message }}</h3>

<p>Use this area to provide additional information.</p>

{% endblock %}

Шаблоны index.html и contact.html имеют такую же структуру, но предоставляют больше содержимого в


блоке content.

Использование шаблона "Веб-проект Flask/Jade"


Как уже отмечалось в начале этой статьи, Visual Studio предоставляет шаблон "Веб-проект Flask/Jade",
который создает приложение, визуально идентичное результату шаблона "Веб-проект Flask". Основное
различие заключается в использовании модуля шаблонов Jade, который является расширением Jinja,
реализующим те же принципы с помощью более краткого кода. В частности, Jade использует ключевые
слова, а не теги, заключенные в разделители {% %}, и позволяет ссылаться на стили CSS и HTML-элементы с
помощью ключевых слов.
Чтобы можно было включить Jade, шаблон проекта должен включать пакет pyjade в файле requirements.txt.

Файл __init__.py приложения содержит строку для

app.jinja_env.add_extension('pyjade.ext.jinja.PyJadeExtension')

В папке templates вы видите файлы JADE вместо шаблонов HTML , и представления в views.py ссылаются на
эти файлы в вызовах к flask.render_template . В противном случае код представлений будет тем же.

Открыв один из файлов JADE, можно увидеть более короткое выражение шаблона. Например, вот
содержимое templates/layout.jade, созданное с помощью шаблона "Веб-проект Flask/Jade":

doctype html
html
head
meta(charset='utf-8')
meta(name='viewport', content='width=device-width, initial-scale=1.0')
title #{title} - My Flask/Jade Application
link(rel='stylesheet', type='text/css', href='/static/content/bootstrap.min.css')
link(rel='stylesheet', type='text/css', href='/static/content/site.css')
script(src='/static/scripts/modernizr-2.6.2.js')
body
.navbar.navbar-inverse.navbar-fixed-top
.container
.navbar-header
button.navbar-toggle(type='button', data-toggle='collapse', data-target='.navbar-collapse')
span.icon-bar
span.icon-bar
span.icon-bar
a.navbar-brand(href='/') Application name
.navbar-collapse.collapse
ul.nav.navbar-nav
li
a(href='/') Home
li
a(href='/about') About
li
a(href='/contact') Contact
.container.body-content
block content
hr
footer
p &copy; #{year} - My Flask/Jade Application

script(src='/static/scripts/jquery-1.10.2.js')
script(src='/static/scripts/bootstrap.js')
script(src='/static/scripts/respond.js')

block scripts

А вот содержимое templates/about.jade, демонстрирующее использование #{ <name>} в качестве


заполнителей:

extends layout

block content
h2 #{title}.
h3 #{message}
p Use this area to provide additional information.

Вы можете поэкспериментировать с синтаксисами Jinja и Jade, чтобы понять, какой из них вам лучше
подходит.

Дальнейшие действия
Шаблон веб-проекта опроса Flask

Дополнительные подробности
Написание первого приложения Flask. Часть 4 — формы и универсальные представления
(docs.djangoproject.com)
Jade на GitHub (документация) (github.com)
Исходный код, используемый в руководстве, на сайте GitHub: Microsoft/python-sample-vs-learning-flask
Шаг 5. Использование шаблона веб-проекта
опроса Flask
21.10.2020 • 20 minutes to read • Edit Online

Предыдущий шаг: Использование полного шаблона веб- проекта Flask

Ознакомившись с шаблоном "Веб-проект Flask" Visual Studio, вы можете рассмотреть третий шаблон Flask,
"Веб-проект опроса Flask", который создается на базе того же кода.
На этом шаге вы научитесь делать следующее.

Создание проекта на основе шаблона и инициализация базы данных (шаг 5.1)


Ознакомление с моделями данных (шаг 5.2)
Общие сведения о резервных хранилищах данных (шаг 5.3)
Общие сведения о представлениях сведений об опросе и результатах опроса (шаг 5.4)

Visual Studio также предоставляет шаблон "Веб-проект опроса Flask/Jade", который выводит идентичное
приложение, однако использует расширение Jade для модуля шаблонов Jinja. Дополнительные сведения см.
в разделе Шаг 4. Использование шаблона "Веб-проект Flask/Jade".

Шаг 5.1. Создание проекта


1. В Visual Studio перейдите к обозревателю решений, щелкните правой кнопкой мыши решение
LearningFlask , созданное ранее в рамках этого руководства, и выберите Добавить > Новый
проект . (Если же вы хотите использовать новое решение, вместо этого выберите Файл > Создать
> Проект .)
2. В диалоговом окне создания проекта найдите и выберите шаблон Веб- проект опроса Flask ,
вызовите проект FlaskPolls и нажмите кнопку ОК.

3. Как и другие шаблоны проектов в Visual Studio, шаблон "Веб-проект опроса Flask" содержит файл
requirements.txt, и Visual Studio запрашивает , куда установить эти зависимости. Выберите параметр
Install into a vir tual environment (Установка в виртуальном окружении) и в диалоговом окне
Добавление виртуального окружения выберите Создать, чтобы принять значения по
умолчанию. (Для этого шаблона требуется платформа Flask, а также пакеты azure-storage и
pymongo. Для шаблона "Веб-проект опроса Flask/Jade" также требуется пакет pyjade.)
4. Для проекта FlaskPolls установите значение по умолчанию для решения Visual Studio, щелкнув
правой кнопкой мыши этот проект в обозревателе решений и выбрав пункт Назначить
запускаемым проектом. Запускаемый проект , выделенный полужирным шрифтом, выполняется
при запуске отладчика.

5. Выберите Отладка > Начать отладку (F5 ) или нажмите кнопку Веб- сервер на панели
инструментов, чтобы запустить сервер:

6. Приложение, созданное с помощью шаблона, содержит три страницы — домашнюю страницу,


вкладки "О программе" и "Контактные сведения", перемещаться по которым можно с использованием
верхней панели навигации. Выделите пару минут на просмотр различных частей приложения
(страницы "О программе" и "Контактные сведения" очень похожи на страницу "Веб-проект Flask" и не
будут обсуждаться в дальнейшем).

7. На домашней странице кнопка Create Sample Polls (Создать пример опроса) инициализирует
хранилище данных приложения с тремя разными опросами, как описано на странице
models/samples.json. По умолчанию приложение использует базу данных в памяти (как показано на
странице "О программе"), которая сбрасывается при каждом перезапуске приложения. Приложение
также содержит код для работы со службой хранилища Azure и MongoDB, как описано далее в этой
статье.

8. После инициализации хранилищ данных вы можете голосовать в разных опросах, как показано на
домашней странице (панель навигации и нижний колонтитул не показаны для удобства):

9. При выборе опроса отображаются его конкретные варианты:

10. Как только вы проголосуете, приложение выведет страницу результатов и позволит вам
проголосовать еще раз:
11. Вы можете оставить приложение запущенным и пройти следующие разделы.
Чтобы остановить работу приложения и зафиксировать изменения в системе управления исходным
кодом, сначала откройте страницу Изменения в Team Explorer , щелкните правой кнопкой мыши
папку виртуального окружения (возможно, env ) и выберите Игнорировать эти локальные
элементы.

Анализ содержимого проекта


Как было отмечено ранее, с большей частью содержимого проекта, созданного на основе шаблона "Веб-
проект опроса Flask" (и шаблона "Веб-проект опроса Flask/Jade"), вы должны быть знакомы, если изучили
другие шаблоны проектов Visual Studio. В дополнительных шагах этой статьи приведены более
значительные изменения и дополнения, а именно модели данных и дополнительные представления.

Шаг 5.2. Ознакомление с моделями данных


Модели данных для приложения — это классы Python с именами Poll и Choice, которые определены в
models/__init__.py. Класс Poll представляет вопрос, для которого коллекция экземпляров Choice
представляет доступные ответы. Кроме того, Poll поддерживает общее число голосов (для любого
варианта) и метод для вычисления статистических данных, которые используются для создания
представлений:
class Poll(object):
"""A poll object for use in the application views and repository."""
def __init__(self, key=u'', text=u''):
"""Initializes the poll."""
self.key = key
self.text = text
self.choices = []
self.total_votes = None

def calculate_stats(self):
"""Calculates some statistics for use in the application views."""
total = 0
for choice in self.choices:
total += choice.votes
for choice in self.choices:
choice.votes_percentage = choice.votes / float(total) * 100 \
if total > 0 else 0
self.total_votes = total

class Choice(object):
"""A poll choice object for use in the application views and repository."""
def __init__(self, key=u'', text=u'', votes=0):
"""Initializes the poll choice."""
self.key = key
self.text = text
self.votes = votes
self.votes_percentage = None

Эти модели данных представляют собой универсальные абстракции, позволяющие представлениям


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

Шаг 5.3. Общие сведения о резервных хранилищах данных


Приложение, созданное с помощью шаблона "Веб-проект опроса Flask", может работать с хранилищем
данных в памяти, в хранилище таблиц Azure или базе данных MongoDB.

Механизм хранения данных реализуется следующим образом.

1. Тип репозитория указывается с помощью переменной среды REPOSITORY_NAME , для которой можно
задать значение memory, azuretablestore или mongodb. Фрагмент кода в settings.py извлекает имя,
используя значение memory по умолчанию. Если вы хотите изменить резервное хранилище,
необходимо задать переменную среды и перезапустить приложение.

from os import environ


REPOSITORY_NAME = environ.get('REPOSITORY_NAME', 'memory')

2. Затем код settings.py инициализирует объект REPOSITORY_SETTINGS . Чтобы использовать хранилище


таблиц Azure или MongoDB, необходимо сначала инициализировать эти хранилища данных в другом
месте, а затем задать необходимые переменные среды, указывающие приложению, как подключаться
к хранилищу:
if REPOSITORY_NAME == 'azuretablestorage':
REPOSITORY_SETTINGS = {
'STORAGE_NAME': environ.get('STORAGE_NAME', ''),
'STORAGE_KEY': environ.get('STORAGE_KEY', ''),
'STORAGE_TABLE_POLL': environ.get('STORAGE_TABLE_POLL', 'polls'),
'STORAGE_TABLE_CHOICE': environ.get('STORAGE_TABLE_CHOICE', 'choices'),
}
elif REPOSITORY_NAME == 'mongodb':
REPOSITORY_SETTINGS = {
'MONGODB_HOST': environ.get('MONGODB_HOST', None),
'MONGODB_DATABASE': environ.get('MONGODB_DATABASE', 'polls'),
'MONGODB_COLLECTION': environ.get('MONGODB_COLLECTION', 'polls'),
}
elif REPOSITORY_NAME == 'memory':
REPOSITORY_SETTINGS = {}
else:
raise ValueError('Unknown repository.')

3. В файле views.py приложение вызывает фабричный метод для инициализации объекта Repository ,
используя имя и параметры хранилища данных:

from FlaskPolls.models import PollNotFound


from FlaskPolls.models.factory import create_repository
from FlaskPolls.settings import REPOSITORY_NAME, REPOSITORY_SETTINGS

repository = create_repository(REPOSITORY_NAME, REPOSITORY_SETTINGS)

4. Метод factory.create_repository находится в файле models\factory.py, который просто импортирует


соответствующий модуль репозитория, а затем создает экземпляр Repository :

def create_repository(name, settings):


"""Creates a repository from its name and settings. The settings
is a dictionary where the keys are different for every type of repository.
See each repository for details on the required settings."""
if name == 'azuretablestorage':
from .azuretablestorage import Repository
elif name == 'mongodb':
from .mongodb import Repository
elif name == 'memory':
from .memory import Repository
else:
raise ValueError('Unknown repository.')

return Repository(settings)

5. Реализации класса Repository , предназначенные для каждого хранилища данных, можно найти в
models\azuretablestorage.py, models\mongodb.py и models\memory.py. Реализация хранилища Azure
использует пакет azure-storage; реализация MongoDB использует пакет pymongo. Как указано в
шаге 5–1, оба пакета входят в файл requirements.txt шаблона проекта. Ознакомление с этими
сведениями мы предлагаем выполнить как самостоятельное упражнение.

Иными словами, класс Repository абстрагирует конкретные сведения о хранилище данных, а приложение
использует переменные среды во время выполнения для выбора и настройки одной из трех реализаций.

Ниже приведена процедура добавления поддержки другого хранилища данных, помимо трех хранилищ ,
предоставляемых шаблоном проекта.

1. Скопируйте memory.py в новый файл, чтобы получить базовый интерфейс для класса Repository .
2. Измените реализацию класса в соответствии с выбранным хранилищем данных.
3. Измените factory.py для добавления нового варианта elif , который распознает имя добавленного
хранилища данных и импортирует соответствующий модуль.
4. Измените файл settings.py для распознавания другого имени в переменной среды REPOSITORY_NAME и
инициализируйте REPOSITORY_SETTINGS соответствующим образом.

Заполнение хранилища данных значениями из samples.json


Изначально любое выбранное хранилище данных не содержит опросы, поэтому на домашней странице
приложения отображается сообщение No polls available (Нет доступных опросов) вместе с кнопкой
Create Sample Polls (Создать пример опроса). Тем не менее после нажатия кнопки представление
изменяется для отображения доступных опросов. Это переключение происходит благодаря условным
тегам в templates\index.html (некоторые пустые строки опущены для удобства):

{% extends "layout.html" %}
{% block content %}
<h2>{{title}}.</h2>

{% if polls %}
<table class="table table-hover">
<tbody>
{% for poll in polls %}
<tr>
<td>
<a href="/poll/{{poll.key}}">{{poll.text}}</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<p>No polls available.</p>
<br />
<form action="/seed" method="post">
<button class="btn btn-primary" type="submit">Create Sample Polls</button>
</form>
{% endif %}
{% endblock %}

Переменная polls в шаблоне получена при вызове repository.get_polls , который возвращает значение
nothing до завершения инициализации хранилища данных.
При нажатии кнопки Создать пример опроса выполняется переход к URL-адресу /seed. Обработчик для
этого маршрута определен в views.py:

@app.route('/seed', methods=['POST'])
def seed():
"""Seeds the database with sample polls."""
repository.add_sample_polls()
return redirect('/')

Вызов repository.add_sample_polls() завершается в одной из конкретных реализаций Repository для


выбранного хранилища данных. Каждая реализация вызывает метод _load_samples_json (в
models__init__.py) для загрузки файла models\samples.json в память, а затем выполняет итерацию по данным
для создания необходимых объектов Poll и Choice в хранилище данных.

После завершения этого процесса инструкция redirect('/') в методе seed возвращается на домашнюю
страницу. Так как repository.get_polls теперь возвращает объект данных, условные теги в
templates\index.html отображают таблицу, содержащую опросы.
Вопрос. Как добавить новый опрос в приложение ?
Ответ. Приложение, предоставленное с помощью этого шаблона проекта, не поддерживает добавление
или редактирование опросов. Для создания новых данных инициализации можно изменить
models\samples.json, однако это приведет к сбросу хранилища данных. Чтобы реализовать возможности
редактирования, необходимо расширить интерфейс класса Repository с помощью методов для создания
необходимых экземпляров Choice и Poll , а затем на дополнительных страницах реализовать
пользовательский интерфейс, использующий эти методы.

Шаг 5.4. Общие сведения о представлениях сведений об опросе и


результатах опроса
Большинство представлений, созданных с использованием шаблона "Веб-проект опроса Flask" и "Веб-
проект опроса Flask/Jade", такие как представления для страниц "О программе" и "Контактные сведения",
похожи на представления, созданные с использованием шаблона "Веб-проект Flask" (или "Веб-проект
Flask/Jade"), с которым вы работали ранее в этом руководстве. В предыдущем разделе вы также узнали, как
реализуется домашняя страница для отображения кнопки инициализации или списка опросов.

Нам остается только рассмотреть представления голосования (сведений) и результатов отдельного опроса.

При выборе опроса на домашней странице приложение переходит к URL-адресу /poll/<key>, где key — это
уникальный идентификатор опроса. В файле views.py можно видеть, что функция details назначается для
обработки маршрутизации URL-адресов для метода GET и запросов. Кроме того, мы видим, что
использование <key> в маршруте URL-адреса определяет сопоставление любого подобного маршрута с
той же функцией и приводит к формированию аргумента в функции с тем же именем:

@app.route('/poll/<key>', methods=['GET', 'POST'])


def details(key):
"""Renders the poll details page."""
error_message = ''
if request.method == 'POST':
try:
choice_key = request.form['choice']
repository.increment_vote(key, choice_key)
return redirect('/results/{0}'.format(key))
except KeyError:
error_message = 'Please make a selection.'

return render_template(
'details.html',
title='Poll',
year=datetime.now().year,
poll=repository.get_poll(key),
error_message=error_message,
)

Чтобы отобразить опрос (запросы GET), эта функция просто вызывает templates\details.html, который
выполняет итерацию по массиву choices опроса, создавая переключатель для каждого элемента.
{% extends "layout.html" %}

{% block content %}

<h2>{{poll.text}}</h2>
<br />

{% if error_message %}
<p class="text-danger">{{error_message}}</p>
{% endif %}

<form action="/poll/{{poll.key}}" method="post">


{% for choice in poll.choices %}
<div class="radio">
<label>
<input type="radio" name="choice" id="choice{{choice.key}}" value="{{choice.key}}" />
{{ choice.text }}
</label>
</div>
{% endfor %}
<br />
<button class="btn btn-primary" type="submit">Vote</button>
</form>

{% endblock %}

Поскольку кнопка Vote (Голосовать) имеет type="submit" , при ее нажатии создается запрос POST к тому же
URL-адресу, который снова направляется к функции details . На этот раз, тем не менее, она извлекает
вариант из данных формы и перенаправляет его в /results/<choice>.

Затем URL-адрес /results/<key> направляется в функцию results во views.py, которая вызывает метод
calculate_stats опроса, а также использует templates\results.html для подготовки к просмотру:

@app.route('/results/<key>')
def results(key):
"""Renders the results page."""
poll = repository.get_poll(key)
poll.calculate_stats()
return render_template(
'results.html',
title='Results',
year=datetime.now().year,
poll=poll,
)

Шаблон results.html, в свою очередь, просто перебирает варианты выбора опроса и формирует индикатор
хода выполнения для каждого:
{% extends "layout.html" %}

{% block content %}

<h2>{{poll.text}}</h2>
<br />

{% for choice in poll.choices %}


<div class="row">
<div class="col-sm-5">{{choice.text}}</div>
<div class="col-sm-5">
<div class="progress">
<div class="progress-bar" role="progressbar" aria-valuenow="{{choice.votes}}" aria-valuemin="0"
aria-valuemax="{{poll.total_votes}}" style="width: {{choice.votes_percentage}}%;">
{{choice.votes}}
</div>
</div>
</div>
</div>
{% endfor %}

<br />
<a class="btn btn-primary" href="/poll/{{poll.key}}">Vote again?</a>

{% endblock %}

Дальнейшие действия
NOTE
Если вы зафиксировали свое решение Visual Studio с системой управления исходным кодом в ходе работы с этим
руководством, настало время сделать другую фиксацию. Ваше решение должно соответствовать исходному коду
руководства на сайте GitHub: Microsoft/python-sample-vs-learning-flask.

Вы узнали все о шаблонах "Пустой веб-проект Flask", "Веб-проект Flask[/Jade]" и "Веб-проект опроса
Flask[/Jade]" в Visual Studio. Вы получили представление об основах Flask, таких как использование
представлений, шаблонов и маршрутизации, и узнали, как использовать резервные хранилища данных.
Теперь вы можете приступить к созданию собственного веб-приложения с любыми необходимыми
представлениями и моделями.

Запуск веб-приложения на компьютере разработчика — это лишь один шаг, чтобы сделать приложение
доступным для клиентов. Следующие шаги могут включать приведенные ниже задачи:

Развертывание веб-приложения на рабочий сервер, например в службу приложений Azure. См.


статью Публикация в "Службе приложений Azure".

Добавьте реализацию репозитория, использующую другое хранилище данных промышленного


уровня, например PostgreSQL, MySQL и SQL Server (все они могут размещаться на платформе Azure).
Вы можете также использовать пакет SDK Azure для Python, чтобы работать со службами хранилища
Azure, такими как таблицы и большие двоичные объекты, а также с Cosmos DB.
Настройте конвейер непрерывной интеграции или непрерывного развертывания в таких службах,
как Azure DevOps. В дополнение к работе с системой управления исходным кодом (в Azure Repos,
GitHub или в другом месте), можно настроить проект Azure DevOps для автоматического выполнения
модульных тестов в качестве необходимого условия для выпуска, а также настроить конвейер для
развертывания на промежуточный сервер для дополнительных тестов перед развертыванием в
рабочей среде. Кроме того, Azure DevOps интегрируется с решениями мониторинга, такими как App
Insights, и закрывает весь цикл гибкими средствами планирования. Дополнительные сведения см. в
статье Создание конвейера CI/CD для Python с помощью Azure DevOps Projects и в общей
документации по Azure DevOps.
Проекты Python в Visual Studio
21.10.2020 • 21 minutes to read • Edit Online

Приложения Python обычно определяются только с помощью файлов и папок, но такая структура может
усложнить работу, так как приложения увеличиваются в размере и могут содержать автоматически
сгенерированные файлы, JavaScript для веб-приложений и т. д. Проект Visual Studio помогает управлять
этими сложными моментами. Проект (файл .pyproj) определяет все исходные файлы и файлы
содержимого, связанные с проектом, содержит сведения о сборке каждого файла, хранит информацию для
интеграции с системами управления версиями и помогает упорядочить приложение в виде логических
компонентов.

Кроме того, проекты всегда управляются в решении Visual Studio, которое может содержать любое число
проектов с возможностью ссылаться друг на друга. Например, проект Python может ссылаться на проект
C++, который реализует модуль расширения. Благодаря этой связи Visual Studio автоматически создает
проект C++ (при необходимости), когда вы запускаете отладку проекта Python. (Общие сведения см. в
статье Решения и проекты в Visual Studio.)

Visual Studio предоставляет множество шаблонов проектов Python, позволяющих быстро настроить
несколько структур приложений, а также шаблон для создания проекта из существующего дерева папок и
шаблон для создания пустого проекта. Список шаблонов см. в разделе Шаблоны проектов.

TIP
В Visual Studio 2019 можно открыть папку с кодом Python и выполнить этот код, не создавая проект Visual Studio и
файлы решения. Дополнительные сведения см. в разделе Краткое руководство. Открытие и выполнение кода
Python в папке. Но файл проекта имеет ряд важных преимуществ, которые мы описали в этой статье.
TIP
Все версии Visual Studio нормально работают с кодом Python даже без проекта. Например, можно открыть сам
файл Python и выполнить автозавершение и отладку , а также использовать функцию IntellSense. Для этого
щелкните правой кнопкой мыши в редакторе и выберите пункт Запуск с отлад кой. Такой код всегда использует
глобальное окружение по умолчанию, однако при работе могут возникать неверные завершения или ошибки, если
код предназначен для другого окружения. Кроме того, Visual Studio анализирует все файлы и пакеты в папке, из
которой открыт один файл, что может значительно расходовать время ЦП.

Проект Visual Studio можно создать из существующего кода, как описано в разделе Создание проекта из
существующих файлов.

Подробный обзор. Использование системы управления версиями в проектах Python (8 мин 55 с,


youtube.com).

Добавление файлов, назначение файла запуска и настройка сред


При разработке приложения обычно требуется добавить в проект новые файлы различных типов. Чтобы
это сделать, щелкните правой кнопкой мыши проект , выберите Добавить > Существующий элемент
и перейдите к нужному файлу. Можно также выбрать Добавить > Новый элемент . Появится
диалоговое окно с различными шаблонами элементов. Как описано в справочнике по шаблонам
элементов, доступны такие варианты: пустые файлы Python, класс Python, модульный тест и различные
файлы, связанные с веб-приложениями. Вы можете испробовать эти варианты с помощью тестового
проекта, чтобы узнать о возможностях вашей версии Visual Studio.

Каждый проект Python имеет один назначенный файл запуска, выделенный полужирным шрифтом в
обозревателе решений. Это файл, который запускается, когда вы запускаете отладку (F5 или Отладка
> Начать отладку) или выполняете проект в интерактивном окне (SHIFT +ALTF +5 или Отладка >
Выполнить проект в интерактивном окне Python ). Чтобы изменить его, щелкните правой кнопкой
мыши новый файл и выберите действие Назначить автозапускаемым элементом (или Задать как
файл запуска в ранних версиях Visual Studio).

TIP
Если удалить выбранный файл запуска из проекта и не выбрать новый, Visual Studio не будет знать, с какого
файла Python нужно начинать выполнение проекта. В этом случае в Visual Studio 2017 версии 15.6 и более
поздних версий возникает ошибка. В более ранних версиях либо открывается окно вывода с запущенным
интерпретатором Python, либо окно вывода появляется, но почти сразу же исчезает. Если у вас возникла
подобная ситуация, убедитесь, что назначен файл запуска.

Чтобы окно вывода оставалось открытым, щелкните правой кнопкой мыши проект , выберите Свойства,
откройте вкладку Отлад ка, а затем добавьте -i в поле Аргументы интерпретатора. Этот аргумент
вынуждает интерпретатор перейти в интерактивный режим после завершения программы, оставив окно
открытым, пока вы не нажмете клавиши CTRL +Z > ВВОД для выхода.

Новый проект всегда по умолчанию связан с глобальной средой Python. Чтобы связать проект с другим
окружением (включая виртуальные), в проекте щелкните правой кнопкой мыши узел Окружения Python
и выберите команду добавления или удаления окружений Python .

Новый проект всегда по умолчанию связан с глобальной средой Python. Чтобы связать проект с другим
окружением (в том числе виртуальным), в проекте щелкните правой кнопкой мыши узел Окружения
Python и выберите команду Добавить окружение..., а затем выберите нужные окружения. Можно
также использовать элемент управления с раскрывающимся списком окружений на панели инструментов,
чтобы выбрать окружение или добавить в проект новое.
Чтобы изменить активное окружение, в обозревателе решений щелкните правой кнопкой мыши
нужное окружение и выберите действие Активировать окружение . Дополнительные сведения см. в
разделе о выборе окружения для проекта.

Шаблоны проектов
Visual Studio предоставляет несколько способов настройки проекта Python — с нуля или из
существующего кода. Чтобы использовать шаблон, выберите команду меню Файл > Создать > Проект
или щелкните правой кнопкой мыши решение в обозревателе решений и выберите Добавить >
Новый проект . В любом случае отобразится диалоговое окно Новый проект . Чтобы просмотреть
шаблоны конкретно для Python, выполните поиск по запросу "Python" или последовательно выберите
Установленные > Python :
В следующей таблице перечислены шаблоны, доступные в Visual Studio 2017 и более поздних версий (не
все шаблоны доступны в предыдущих версиях):

ШАБЛОН ОПИСАНИЕ

На основе существующего код а Python Создает проект Visual Studio из существующего кода
Python в структуре папок.

Приложение Python Структура базового проекта для нового приложения


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

Облачная служба Azure Проект для облачной службы Azure, написанный на


Python.

Веб- проекты Проекты для веб-приложений на базе различных


платформ, включая Bottle, Django и Flask.

Приложение с IronPython Аналогичен шаблону приложения Python, но по


умолчанию использует интерпретатор IronPython,
поддерживающий взаимодействие .NET и смешанный
режим отладки с использованием языков .NET.

Приложение WPF с IronPython Структура проекта, использующая IronPython с XAML-


файлами Windows Presentation Foundation для
пользовательского интерфейса приложения. Visual Studio
предоставляет конструктор пользовательского
интерфейса XAML, возможность написания кода
программной части на Python, а также возможность
запуска приложения без отображения консоли.
ШАБЛОН ОПИСАНИЕ

Веб- страница с IronPython и Silverlight Это проект IronPython, который выполняется в браузере
с подключаемым модулем Silverlight. Код приложения
Python добавляется на веб-страницу в виде скрипта.
Стандартный тег скрипта получает часть кода
JavaScript, который инициализирует IronPython,
выполняющийся в Silverlight, откуда код Python может
взаимодействовать с моделью DOM.

Приложение Windows Forms с IronPython Структура проекта, использующая IronPython с


пользовательским интерфейсом, созданным с помощью
кода и Windows Forms. Приложение запускается без
вывода консоли.

Фоновое приложение ( Интернет вещей) Поддерживает развертывание проектов Python для


работы в качестве фоновых служб на устройствах.
Дополнительные сведения см. на странице центра
разработчиков Интернета вещей Windows.

Мод уль расширения Python Этот шаблон отображается в области Visual C++, если
вы уже установили Собственные сред ства
разработки Python с рабочей нагрузкой Python в Visual
Studio 2017 или более поздней версии (см. раздел
Установка). Он предоставляет базовую структуру для
библиотеки DLL расширения C++, как описано в статье
Создание расширения C++ для Python.

NOTE
Так как Python является интерпретируемым языком, проекты Python в Visual Studio не создают отдельный
исполняемый файл, как это делают проекты, написанные на других компилируемых языках программирования
(например, C#). Дополнительные сведения см. в разделе вопросов и ответов.

Создание проекта на основе имеющихся файлов

IMPORTANT
Описанный здесь процесс не перемещает и не копирует исходные файлы. Если вы хотите работать с копией,
сначала создайте дубликат папки.

1. Запустите Visual Studio и последовательно выберите Файл > Создать > Проект .
2. В диалоговом окне Создание проекта выполните поиск по запросу "Python", выберите шаблон На
основе существующего кода Python , укажите имя и расположение проекта, а затем нажмите
кнопку ОК.

3. В появившемся мастере задайте путь к существующему коду, фильтр для типов файлов и любые
пути поиска, необходимые для проекта, а затем нажмите кнопку Далее . Если вы не знаете пути
поиска, оставьте это поле пустым.
4. В следующем диалоговом окне выберите файл запуска для проекта и нажмите кнопку Далее . (При
необходимости выберите среду; в противном случае оставьте значения по умолчанию.) Обратите
внимание, что в диалоговом окне отображаются только файлы в корневой папке. Если нужный
файл находится во вложенной папке, не указывайте файл запуска и укажите его позже в
обозревателе решений (инструкции см. ниже).

5. Выберите место, где следует сохранить файл проекта (файл .pyproj на диске). При необходимости
можно также включить автоматическое обнаружение виртуальных сред и настроить проект для
разных веб-платформ. Если вы не уверены, оставьте для этих параметров значения по умолчанию.
6. Нажмите кнопку Готово. Visual Studio создаст проект и откроет его в обозревателе решений.
Если вы хотите переместить PYPROJ-файл в другое место, выберите его в обозревателе
решений и щелкните Файл > Сохранить как . Это действие обновляет ссылки на файлы в
проекте, но не перемещает файлы с кодом.

7. Чтобы указать другой файл запуска, найдите его в обозревателе решений, щелкните его правой
кнопкой мыши и выберите пункт Задать как файл запуска .

Связанные файлы
Связанные файлы — это файлы, которые добавлены в проект , но при этом находятся за пределами папок
проекта приложения. Они отображаются в обозревателе решений как обычные файлы с
перекрывающимся значком ярлыка:

Связанные файлы указаны в файле PYPROJ с помощью элемента <Compile Include="..."> . Связанные
файлы могут быть неявными, если они используют относительный путь за пределами структуры
каталогов, или явными, если они используют пути в обозревателе решений:

<Compile Include="..\test2.py">
<Link>MyProject\test2.py</Link>
</Compile>

Связанные файлы игнорируются при выполнении любого из следующих условий:

Связанный файл содержит метаданные связи, и путь, указанный в атрибуте Include, находится в
пределах каталога проекта.
Связанный файл дублирует файл, который существует в иерархии проекта.
Связанный файл содержит метаданные связи, и путь является относительным путем вне иерархии
проекта.
Путь связи является корневым.

Работа со связанными файлами


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

При попытке создать связь с файлом, который уже существует в папке проекта, он добавляется как
обычный файл, а не как связанный. Чтобы преобразовать файл в связь, выберите Файл > Сохранить как
и сохраните файл в расположение вне иерархии проекта. Visual Studio автоматически преобразует его в
связь. Аналогичным образом можно преобразовать связь обратно с помощью команды Файл >
Сохранить как и сохранить файл в иерархии проекта.

При перемещении связанного файла в обозревателе решений связь также перемещается, но


фактический файл при этом не затрагивается. Аналогичным образом, удаление связи приведет к
удалению только связи, не затрагивая сам файл.

Связанные файлы нельзя переименовать.

Ссылки
Проекты Visual Studio поддерживают добавление ссылок на проекты и расширения, которые
отображаются в узле Ссылки в обозревателе решений.

Ссылки на расширения обычно указывают зависимости между проектами и используются для обеспечения
IntelliSense во время разработки или связывания во время компиляции. Проекты Python используют ссылки
подобным образом, но из-за динамической природы Python они в основном используются во время
разработки для предоставления усовершенствованной функции IntelliSense. Они также могут
использоваться для развертывания в Microsoft Azure с целью установки дополнительных зависимостей.

Модули расширений
Ссылка на файл PYD позволяет использовать IntelliSense для созданного модуля. Visual Studio загружает
файл PYD в интерпретатор Python и анализирует его типы и функции. Программа также пытается
выполнить синтаксический анализ строк функций в документе, чтобы предоставить справку по
сигнатурам.

Если в любой момент модуль расширения обновляется на диске, Visual Studio повторно анализирует
модуль в фоновом режиме. Это не влияет на поведение во время выполнения, но некоторые варианты
завершения остаются недоступными до завершения анализа.

Необходимо добавить путь поиска к папке, содержащей модуль.

Проекты .NET
При работе с IronPython можно добавить ссылки на сборки .NET, чтобы активировать использование
IntelliSense. Для проектов .NET в решении щелкните правой кнопкой мыши узел Ссылки в проекте Python,
выберите Добавить ссылку, щелкните вкладку Проекты и найдите нужный проект. Для библиотек DLL,
которые вы скачали отдельно, выберите вкладку Обзор и перейдите к требуемой библиотеке DLL.

Так как ссылки в IronPython недоступны до вызова clr.AddReference('<AssemblyName>') , в сборку также


нужно добавить соответствующий вызов clr.AddReference . Обычно он добавляется в начале кода.
Например, код, созданный в Visual Studio с помощью шаблона проекта Приложение Windows Forms
IronPython , включает в себя два вызова в начале файла:

import clr
clr.AddReference('System.Drawing')
clr.AddReference('System.Windows.Forms')

from System.Drawing import *


from System.Windows.Forms import *

# Other code omitted

Проекты WebPI
Можно добавить ссылки на записи продукта WebPI для развертывания в облачных службах Microsoft
Azure, где можно установить дополнительные компоненты с помощью веб-канала WebPI. По умолчанию
отображаемый веб-канал предназначен только для Python и содержит Django, CPython и другие основные
компоненты. Также можно выбрать собственный веб-канал, как показано ниже. При публикации в
Microsoft Azure задача установки устанавливает все продукты, на которые имеются ссылки.

IMPORTANT
Проекты WebPI недоступны в Visual Studio 2017 или Visual Studio 2019.
Шаблоны проекта веб-приложений Python
21.10.2020 • 16 minutes to read • Edit Online

Python в Visual Studio поддерживает разработку веб-проектов на платформах Bottle, Django и Flask с
помощью шаблонов проектов и средства запуска отладки, которое можно настроить для работы с
различными платформами. Эти шаблоны включают файл requirements.txt для объявления необходимых
зависимостей. При создании проекта на основе одного из таких шаблонов в Visual Studio отобразится
запрос на установку этих пакетов (см. раздел Установка необходимых компонентов для проекта далее в
этой статье).

Для других платформ, например Pyramid, также можно использовать универсальный шаблон веб-
проекта . В этом случае для шаблона не предусмотрена установка каких-либо платформ. Вместо этого в
окружении проекта устанавливаются необходимые пакеты (см. статью о вкладке "Пакет " окна окружений
Python).
Сведения о развертывании веб-приложения Python в Azure см. в статье Публикация в службу приложений
Azure.

Использование шаблона проекта


Чтобы создать проект на основе шаблона, последовательно выберите Файл > Создать > Проект .
Чтобы просмотреть шаблоны для веб-проектов, слева в диалоговом окне последовательно выберите
Python > Интернет . Выберите шаблон по своему усмотрению, присвоив имена проекту и решению.
Затем задайте параметры для каталога решения и репозитория Git и нажмите кнопку ОК.

Универсальный шаблон Веб- проект , который упоминался ранее, содержит пустой проект Visual Studio
без кода (подразумевается только проект Python). Сведения о шаблоне Облачная служба Azure см. в
статье Проекты облачных служб Azure для Python.
Все другие шаблоны основаны на веб-платформах Bottle, Flask или Django и делятся на три общие группы,
как описано в следующих разделах. Приложения, созданные с помощью любого из этих шаблонов,
содержат код, который обеспечивает локальное выполнение и отладку приложений. Кроме того, каждый
из них предоставляет необходимый объект приложения WSGI (python.org) для использования с рабочими
веб-серверами.

Пустая группа
С помощью всех шаблонов пустых веб- проектов для <framework> создаются проекты с
использованием большего или меньшего объема стандартного кода и необходимых зависимостей,
объявленных в файле requirements.txt.

ШАБЛОН DESC RIP T IO N

Пустой веб- проект Bottle В app.py создается минимальное приложение с


домашней страницей для / и страницей
/hello/<name> , на которой выводится <name> .
Используется небольшой встроенный шаблон.

Пустой веб- проект Django Создается проект Django с основной структурой веб-
сайта Django, но без структуры приложений Django.
Дополнительные сведения см. в статье о шаблонах
Django и шаге 1 руководства по изучению Django.

Пустой веб- проект Flask Создается минимальное приложение для вывода одной
страницы "Hello World!" для / . Это приложение похоже
на результат выполнения инструкций в кратком
руководстве по созданию первого веб-приложения
Python с помощью Visual Studio. См. также шаг 1
руководства по работе с Flask.

Веб-группа
С помощью всех шаблонов веб- проектов для <Framework> создаются начальные веб-приложения с
идентичной структурой независимо от выбранной платформы. В приложении есть домашняя страница,
страницы со сведениями и контактными данными, а также панель навигации и адаптивный макет ,
созданный на основе Bootstrap. Все приложения соответствующим образом настроены для
предоставления статических файлов (CSS, JavaScript и шрифты). Используется механизм шаблона
страницы, соответствующий конкретной платформе.

ШАБЛОН DESC RIP T IO N

Веб- проект Bottle Создается приложение, статические файлы которого


содержатся в папке static и обрабатываются с помощью
кода в app.py. Данные маршрутизации для отдельных
страниц содержатся в routes.py, а шаблоны страниц — в
папке views.

Веб- проект Django Создается проект и приложение Django с тремя


страницами, поддержкой аутентификации и базой
данных SQLite (без моделей данных ). Дополнительные
сведения см. в статье о шаблонах Django и шаге 4
руководства по изучению Django.
ШАБЛОН DESC RIP T IO N

Веб- проект Flask Создается приложение, статические файлы которого


содержатся в папке static. Маршрутизация
обрабатывается с помощью кода во views.py. Шаблоны
страниц, созданные с использованием механизма Jinja,
содержатся в папке templates. Код запуска помещен в
файл runserver.py. См. шаг 4 руководства по работе с
Flask.

Веб- проект Flask и Jade Создается то же приложение, что и при использовании


шаблона Веб- проект Flask , но с помощью расширения
Jade для модуля создания шаблонов Jinja.

Группа опроса
С помощью шаблонов веб- проектов опроса для <framework> создаются начальные веб-
приложения, в которых пользователи могут пройти опрос. Каждое приложение основано на структуре
шаблона веб- проекта , которая позволяет использовать базу данных для управления опросами и
ответами пользователей. Эти приложения включают соответствующие модели данных и специальную
страницу приложения (/seed), с помощью которой из файла samples.json загружается опрос.

ШАБЛОН DESC RIP T IO N

Веб- проект опроса Bottle Создается приложение, которое можно запустить с


выполняющейся в памяти базой данных , MongoDB или
службой "Хранилище таблиц Azure", которая
настраивается с помощью переменной среды
REPOSITORY_NAME . Модели данных и код хранилища
данных содержатся в папке models. В файл settings.py
помещен код, который определяет используемое
хранилище данных.

Веб- проект опроса Django Создаются проект и приложение Django с тремя


страницами и базой данных SQLite. Шаблон включает
настройки в интерфейсе администратора Django,
которые позволяют прошедшему аутентификацию
администратору создавать опросы и управлять ими.
Дополнительные сведения см. в статье о шаблонах
Django и шаге 6 руководства по изучению Django.

Веб- проект опроса Flask Создается приложение, которое можно запустить с


выполняющейся в памяти базой данных , MongoDB или
службой "Хранилище таблиц Azure", которая
настраивается с помощью переменной среды
REPOSITORY_NAME . Модели данных и код хранилища
данных содержатся в папке models. В файл settings.py
помещен код, который определяет используемое
хранилище данных. В приложении применяется модуль
Jinja для создания шаблонов страниц. См. шаг 5
руководства по работе с Flask.

Веб- проект опроса Flask и Jade Создается то же приложение, что и при использовании
шаблона Веб- проект опроса Flask , но с помощью
расширения Jade для модуля создания шаблонов Jinja.

Установка требований проекта


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

Если используется система управления версиями, папка виртуального окружения обычно опускается, так
как виртуальное окружение можно воссоздать только с помощью requirements.txt. Чтобы исключить
папку, рекомендуем сначала выбрать вариант самостоятельной установки, показанный выше в окне с
запросом, а затем отключить автоматическую фиксацию перед созданием виртуального окружения.
Дополнительные сведения см. в шагах 1–2 и 1–3 руководства по изучению Django и шагах 1–2 и 1.3
руководства по изучению Flask.

Выполняя развертывание в службе приложений Microsoft Azure, нужно выбрать версию Python в качестве
расширения сайта и установить пакеты вручную. Кроме того, поскольку при развертывании из Visual
Studio служба приложений Azure не устанавливает пакеты из файла requirements.txt автоматически,
используйте сведения о конфигурации, приведенные на странице aka.ms/PythonOnAppService.

Облачные службы Microsoft Azure поддерживают файл requirements.txt. Дополнительные сведения см. в
статье Проекты облачных служб Azure для Python.

Отладка
Когда вы запускаете отладку веб-проекта, Visual Studio запускает локальный веб-сервер со случайным
портом и открывает страницу с указанным здесь адресом и портом в браузере по умолчанию. Чтобы
указать дополнительные параметры, щелкните правой кнопкой мыши проект , выберите Свойства и
откройте вкладку Веб- средство запуска :
Параметры группы Отладка :

Параметры Пути поиска , Аргументы сценария, Аргументы интерпретатора и Путь к


интерпретатору ничем не отличаются от используемых в режиме обычной отладки.
URL- адрес для запуска — задает URL-адрес, который открывается в браузере. По умолчанию для
него используется значение localhost .
Номер порта. Это порт , который будет использоваться, если в URL-адресе не указан порт (по
умолчанию Visual Studio автоматически выбирает порт ). Этот параметр позволяет переопределить
значение по умолчанию переменной среды SERVER_PORT , которое используется шаблонами для
настройки порта, прослушиваемого локальным сервером отладки.

Свойства, указанные в группах Команда сервера выполнения и Команда сервера отладки


(последняя группа находится ниже в окне, показанном на рисунке), определяют , как будет запускаться
веб-сервер. Так как для многих платформ требуется использовать сценарий вне текущего проекта,
можно настроить сценарий здесь и передать модуль автозагрузки как параметр.

Команда — может содержать скрипт Python (файл *.py), имя модуля (как и в
python.exe -m module_name ) или одну строку кода (как и в python.exe -c "code" ). Значение в
раскрывающемся списке указывает , какой из этих типов будет использоваться.
Аргументы — содержимое этого поля передается в командной строке после команды.
Среда — разделенный символом новой строки список пар <NAME>=<VALUE>, определяющих
переменные среды. Эти переменные задаются после всех свойств, которые могут изменить среду,
например номер порта или пути поиска, и поэтому могут перезаписать эти значения.

Любое свойство проекта и любую переменную среды можно указать, используя синтаксис MSBuild,
например $(StartupFile) --port $(SERVER_PORT) . $(StartupFile) — это относительный путь к файлу
запуска, а {StartupModule} — импортируемое имя файла запуска. $(SERVER_HOST) и $(SERVER_PORT)
являются обычными переменными среды, автоматически задаваемые свойствами URL- адрес для
запуска и Номер порта или с помощью свойства Среда .
NOTE
Значения в группе Команд а сервера выполнения используются при выборе команды Отлад ка > Запуск
сервера или нажатии клавиш CTRL +F5 . Значения в группе Команд а сервера отлад ки используются при
выборе команды Отлад ка > Запустить сервер отлад ки или нажатии клавиши F5 .

Пример конфигурации Bottle


Шаблон веб- проекта Bottle содержит стандартный код, который выполняет необходимую настройку.
Импортированное приложение Bottle может не содержать этот код, однако в этом случае следующие
параметры запускают приложение с помощью установленного модуля bottle :

Группа команды запуска сервера :

Команда : bottle (модуль);


Аргументы: --bind=%SERVER_HOST%:%SERVER_PORT% {StartupModule}:app .
Группа команды отладки сервера :

Команда : bottle (модуль);


Аргументы --debug --bind=%SERVER_HOST%:%SERVER_PORT% {StartupModule}:app

При отладке с помощью Visual Studio мы не рекомендуем использовать параметр --reload .


Пример конфигурации приложения Pyramid
В настоящее время для создания приложений Pyramid лучше всего использовать средство командной
строки pcreate . После создания приложения его можно импортировать с помощью шаблона На основе
существующего кода Python . Затем настройте параметры в свойствах универсального веб-
проекта . Эти параметры предполагают , что платформа Pyramid установлена в виртуальной среде в
..\env .

Группа отладки:

Порт сервера : 6543 (или заданный в INI-файлах).


Группа команды запуска сервера :

Команда: ..\env\scripts\pserve-script.py (сценарий);


Аргументы: Production.ini
Группа команды отладки сервера :

Команда: ..\env\scripts\pserve-script.py (сценарий);


Аргументы: Development.ini

TIP
Скорее всего, потребуется настроить свойство Рабочий каталог проекта, так как приложения Pyramid обычно
находятся в папке на один уровень ниже корневого каталога проекта.

Другие конфигурации
Если у вас есть параметры для другой платформы, которыми вы хотите поделиться, или вы хотите
запросить параметры для такой платформы, откройте обращение в репозитории GitHub.

Преобразование проекта в проект облачной службы Azure


С помощью команды Преобразовать в проект облачной службы Microsoft Azure (см. рисунок
ниже) можно добавить проект облачной службы в решение. Этот проект включает параметры
развертывания и конфигурации для используемых виртуальных машин и служб. Используйте команду
Опубликовать в облачном проекте, чтобы выполнить развертывание в облачных службах. С помощью
команды Опубликовать в проекте Python можно по-прежнему выполнить развертывание на веб-сайтах.
Дополнительные сведения см. в статье Проекты облачных служб Azure.

См. также раздел


Справочник по шаблонам элементов Python
Публикация в службу приложений Azure
Шаблон веб-проекта Django
21.10.2020 • 2 minutes to read • Edit Online

Django — это высокоуровневая платформа Python для быстрого создания безопасных и масштабируемых
веб-систем. Благодаря поддержке Python в Visual Studio предоставляется несколько шаблонов проектов
для настройки структуры веб-приложения на основе Django. Чтобы использовать шаблон в Visual Studio,
последовательно выберите Файл > Создать > Проект , выполните поиск по слову "Django" и выберите
шаблон Пустой веб- проект Django , Веб- проект Django или Веб- проект опроса Django .
Инструкции по использованию всех шаблонов см. в руководстве по изучению Django.

Visual Studio предоставляет полную поддержку технологии IntelliSense для проектов Django.
Переменные контекста, передаваемые в шаблоне:

Добавление тегов и фильтрация для обоих встроенных и определяемых пользователем элементов:

Цветовая маркировка синтаксиса для внедренного CSS и JavaScript:


Также Visual Studio предоставляет полную поддержку отладки для проектов Django:
Обычно проекты Django управляются с помощью файла manage.py, являющегося предположением,
которому следует Visual Studio. Если прекратить использовать этот файл в качестве точки входа, это
нарушит работу файла проекта. В этом случае нужно повторно создать проект из существующих файлов,
не помечая его как проект Django.

Консоль управления Django


Консоль управления Django можно открыть несколькими разными командами в меню Проект или
щелкнув проект правой кнопкой мыши в обозревателе решений.

Открыть оболочку Django открывает оболочку в контексте приложения, где вы можете


управлять моделями.

Django Sync DB (База данных синхронизации Django) выполняет в интерактивном окне команду
manage.py syncdb :
Собирать статические файлы выполняет manage.py collectstatic --noinput для копирования
всех статических файлов в путь, указанный параметром STATIC_ROOT в файле settings.py.

Проверка выполняет manage.py validate , чтобы получить сообщения о всех ошибках проверки
установленных моделей, заданных параметром INSTALLED_APPS в файле settings.py:

См. также раздел


Руководство по изучению Django
Публикация в службу приложений Azure
Проекты облачных служб Azure для Python
21.10.2020 • 10 minutes to read • Edit Online

Visual Studio предоставляет шаблоны, которые помогут быстро начать разработку облачных служб Azure
с использованием Python.

Облачная служба состоит из произвольного числа рабочих ролей и веб-ролей, каждая из которых
выполняет концептуально независимую задачу и может реплицироваться на несколько виртуальных
машин для масштабирования. Веб-роли служат для размещения интерфейсных веб-приложений. При
использовании Python для создания такого приложения подходит любая веб-платформа с поддержкой
WSGI (поддерживаемая шаблоном веб-проекта). Рабочие роли предназначены для длительных рабочих
процессов, которые не взаимодействуют с пользователями напрямую. Они обычно используют пакеты из
состава пакета azure, который устанавливается с помощью команды pip install azure .

Эта статья содержит сведения о шаблоне проекта и других возможностях Visual Studio 2017 и более
поздних версий (в более ранних версиях эти функции также доступны, но с некоторыми отличиями).
Дополнительные сведения о работе с Azure в Python вы найдете в центре Azure для разработчиков
Python.

Создание проекта
1. Установите пакет SDK Azure .NET для Visual Studio, который потребуется для использования
шаблона облачной службы.

2. В Visual Studio выберите Файл > Новый > Проект , выполните поиск по запросу "Python Azure" и
выберите в списке результатов Облачная служба Azure :

3. Выберите одну или несколько ролей, которые вы хотите включить в проект. Облачные проекты
могут объединять роли, написанные на разных языках, поэтому каждую часть приложения вы
можете создавать на том языке, который для нее подходит лучше всего. Чтобы добавить в проект
новые роли позже, когда вы уже закроете это диалоговое окно, щелкните правой кнопкой мыши
Роли в обозревателе решений и выберите один из элементов в разделе Добавить.
4. При создании отдельных проектов ролей может потребоваться установка дополнительных
пакетов Python, например платформы Django, Bottle или Flask, если выбранная роль использует
одну из них.

5. После добавление новой роли в проект отображаются инструкции по ее настройке. Обычно


изменения конфигурации не требуются, но настройка может пригодиться для персонализации
некоторых проектов. Обратите внимание, что при одновременном добавлении нескольких ролей
остаются открытыми только инструкции для настройки последней из них. Инструкции и советы по
устранению неполадок для других ролей вы можете найти в соответствующих файлах readme.mht,
которые располагаются в корневом каталоге роли или в папке bin.

6. Папка проекта bin содержит один или два скрипта PowerShell, которые позволяют настроить
удаленную виртуальную машину, например, установить на ней Python, изменить файл
requirements.txt для проекта или настроить службу IIS, если это потребуется. Вы можете изменять
эти файлы для вашего развертывания. Но учтите, что основные параметры можно изменять
другими способами (см. раздел Настройка развертывания роли ниже). Мы не рекомендуем удалять
эти файлы, поскольку при их отсутствии используются прежние версии скриптов настройки.

Чтобы добавить скрипты настройки в новый проект , щелкните проект правой кнопкой мыши,
выберите Установка > Новый элемент и выберите Файлы поддержки веб- роли или
Файлы поддержки рабочей роли.

Настройка развертывания роли


Скрипты PowerShell, размещенные в папке bin проекта роли, управляют развертыванием этой роли. Их
можно изменять для настройки конфигурации.

ConfigureCloudService.ps1 используется для веб-ролей и рабочих ролей, чаще всего для установки и
настройки зависимостей и указания версии Python.
LaunchWorker.ps1 используется только для рабочих ролей. Этот скрипт позволяет изменить
поведение при запуске, добавить аргументы командной строки и (или) добавить переменные среды.

Оба файла содержат инструкции для настройки. Также вы можете установить любую версию Python на
ваше усмотрение, добавив другую задачу в основной файл проекта облачной службы
ServiceDefinition.csdef и указав для переменной PYTHON значение пути к файлу python.exe (или его
аналогу). Если задано значение PYTHON , Python не устанавливается из NuGet.

Вот как можно выполнить дополнительные настройки.

1. Установите пакеты с помощью pip , обновив файл requirements.txt в корневом каталоге проекта.
Скрипт ConfigureCloudService.ps1 устанавливает этот файл при развертывании.
2. Задайте переменные среды, изменив файл web.config (для веб-ролей) или раздел Runtime файла
ServiceDefinition.csdef (для рабочих ролей).
3. Укажите скрипт и аргументы для рабочей роли, изменив командную строку в разделе
Runtime/EntryPoint файла ServiceDefinitions.csdef.
4. Укажите основной скрипт обработчика для веб-роли в файле web.config.

Тестирование развертывания роли


При создании ролей вы можете протестировать облачный проект локально с помощью эмулятора
облачной службы. Этот эмулятор включен в средства пакета SDK для Azure и представляет собой
ограниченную версию среды, в которой облачная служба публикуется в Azure.

Чтобы запустить эмулятор, следует указать облачный проект в качестве стартового проекта для вашего
решения. Для этого щелкните проект правой кнопкой мыши и выберите Назначить запускаемым
проектом. Затем выберите Отладка > Начать отладку (F5 ) или Отладка > Запустить без
отладки (CTRL +F5 ).

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

Развертывание роли
Чтобы открыть Мастер публикации, выберите проект роли в обозревателе решений и запустите из
главного меню команду Сборка > Публикация или щелкните проект правой кнопкой мыши и выберите
Опубликовать.

Процесс публикации включает два этапа. Сначала Visual Studio создает один пакет , содержащий все роли
облачной службы. Именно этот пакет развертывается в Azure, чтобы инициализировать одну или
несколько виртуальных машин для каждой роли и развернуть источник.

При активации каждой виртуальной машины она выполняет скрипт ConfigureCloudService.ps1 и


устанавливает все зависимости. По умолчанию скрипт устанавливает последнюю версию Python из NuGet
и все пакеты, указанные в файле requirements.txt.

Если это рабочая роль, в конце развертывания она выполняет LaunchWorker.ps1, который запускает
настроенный скрипт Python. Веб-роль инициализирует службу IIS и начинает обработку веб-запросов.

Зависимости
Для облачных служб скрипт ConfigureCloudService.ps1 использует pip для установки набора
зависимостей Python. Их следует указать в файле с именем requirements.txt (это имя можно изменить в
файле ConfigureCloudService.ps1). Этот файл исполняется командой pip install -r requirements.txt в
процессе инициализации.

Обратите внимание, что экземпляры облачной службы не содержат компилятор C, поэтому все
библиотеки с расширениями C должны содержать предварительно скомпилированные двоичные файлы.

PIP и его зависимости, а также указанные в файле requirements.txt пакеты скачиваются автоматически и
могут создавать оплачиваемый сетевой трафик. В руководстве по управлению необходимыми пакетами с
помощью requirements.txt подробно описаны правила работы с файлами requirements.txt.

Устранение неполадок
Если веб-роль или рабочая роль неправильно работают после развертывания, проверьте следующее.

Проект Python содержит папку bin\ , где содержатся по меньшей мере следующие файлы:

ConfigureCloudService.ps1;
LaunchWorker.ps1 (для рабочих ролей);
ps.cmd.
Проект Python должен содержать файл requirements.txt со списком всех зависимостей (или набор
файлов колеса).

Включите удаленный рабочий стол для облачной службы и проверьте файлы журнала.

Журналы для ConfigureCloudService.ps1 и файл LaunchWorker.ps1 хранятся в папке


C:\Resources\Directory%RoleId%.DiagnosticStore\LogFiles на удаленном компьютере.
Веб-роли могут создавать дополнительные журналы в папке, путь к которой задается в файле
web.config в параметре appSetting WSGI_LOG . Также работает обычное ведение журналов IIS или
FastCGI.
Сейчас выходные данные или сообщения об ошибках, которые выводит рабочая роль Python,
можно просмотреть только в файле LaunchWorker.ps1.log.
Как создавать окружения Python в Visual Studio и
управлять ими
21.10.2020 • 23 minutes to read • Edit Online

Окружение Python представляет собой контекст , в котором выполняется код Python. Различают
глобальные, виртуальные окружения и окружения Conda. Окружение состоит из интерпретатора,
библиотеки (обычно это стандартная библиотека Python) и нескольких установленных пакетов. Вместе
они определяют , какие языковые конструкции и синтаксис допустимы, какие возможности операционной
системы доступны и какие пакеты можно использовать.

В Visual Studio для Windows есть окно Окружения Python , которое позволяет управлять окружениями и
выбрать одно из них в качестве окружения по умолчанию для новых проектов. Все это мы рассмотрим в
этой статье. Другие связанные с окружениями аспекты описаны в следующих статьях:

Для каждого конкретного проекта можно выбрать конкретное окружение вместо варианта по
умолчанию.

Дополнительные сведения о создании и использовании виртуальных окружений для проектов


Python см. в разделе Использование виртуальных окружений.
Если вы хотите установить пакеты в окружении, см. справочник по вкладке "Пакеты".

Чтобы установить другой интерпретатор Python, см. раздел Установка интерпретаторов Python.
Как правило, если вы скачиваете и запускаете установщик для основного дистрибутива Python,
Visual Studio обнаруживает эту новую установку, это окружение отображается в окне Окружения
Python и может быть выбрано для проектов.
Если вы только начинаете работу с Python в Visual Studio, можете ознакомиться с базовыми сведениями в
следующих статьях:

Работа с Python в Visual Studio


Установка поддержки Python в Visual Studio

NOTE
Вы не можете управлять окружениями для кода Python, который открыт только в качестве папки с помощью
команды Файл > Открыть > Папка. В таком случае создайте проект Python на основе существующего кода,
чтобы использовать функции окружения Visual Studio.

NOTE
Вы можете управлять окружениями для кода Python, который открыт в качестве папки с помощью команды
Файл > Открыть > Папка. Панель инструментов Python позволяет переключаться между всеми
обнаруженными окружениями, а также добавлять новые окружения. Сведения об окружении хранятся в файле
PythonSettings.json в папке .vs рабочей области.

Окно "Окружения Python"


Окружения, обнаруженные Visual Studio, отображаются в окне Окружения Python . Чтобы открыть это
окно, используйте один из следующих методов:
Выберите команду меню Просмотр > Другие окна > Окружения Python .

В обозревателе решений щелкните правой кнопкой мыши узел Окружения Python в нужном
проекте и выберите Просмотреть все окружения Python .

В любом случае окно Окружения Python открывается на одном уровне с обозревателем решений.
Visual Studio ищет установленные глобальные окружения с помощью реестра (следуя по PEP 514), а также
виртуальные окружения и окружения Conda (см. Типы окружений). Если нужное окружение не
отображается в списке, ознакомьтесь с разделом Указание существующего окружения вручную.

При выборе окружения в списке на вкладке Обзор Visual Studio отображаются различные свойства и
команды для этого окружения. Например, как видно на рисунке выше, интерпретатор находится в папке
C:\Python36-32. Четыре команды в нижней части вкладки Обзор открывают командную строку с
выполняющимся интерпретатором. Дополнительные сведения см. в статье Справочная информация по
вкладкам окна "Окружения Python" — обзор.

Используйте раскрывающийся список под списком окружений для перехода к различным вкладкам, таким
как Пакеты и IntelliSense . Эти вкладки также описаны в справочнике по вкладкам окна "Окружения
Python".
Выбор окружения не влияет на его связи с любыми проектами. Окружение по умолчанию, выделенное
полужирным шрифтом в списке, используется Visual Studio для любых новых проектов. Чтобы
использовать другое окружение для новых проектов, используйте команду Назначить это окружение
по умолчанию для новых проектов. В контексте проекта всегда можно выбрать конкретное
окружение. Дополнительные сведения см. в разделе о выборе окружения для проекта.

Справа от каждого окружения в списке есть элемент управления, который позволяет открыть
интерактивное окно для этого окружения. (В Visual Studio 2017 версии 15.5 и более ранних версий
также может отображаться еще один элемент управления, отвечающий за обновление базы данных
IntelliSense для этого окружения. Дополнительные сведения о базе данных см. в справочнике по
вкладкам окна "Окружения".)
TIP
Если окно Окружения Python развернуто достаточно широко, вы получите более полное представление
окружений. Такой вариант может оказаться для вас более удобным.

TIP
Если окно Окружения Python развернуто достаточно широко, вы получите более полное представление
окружений. Такой вариант может оказаться для вас более удобным.

NOTE
Несмотря на то что Visual Studio учитывает параметр system-site-packages, его нельзя изменить из среды Visual
Studio.
Что делать, если окружения не отображаются ?
Если окружения не отображаются, значит Visual Studio не удалось обнаружить ни одной установки
Python в стандартных расположениях. Такое может случиться, если после установки Visual Studio 2017
или более поздней версии вы очистили все параметры интерпретаторов в настройках установщика для
рабочей нагрузки Python. Возможно, вы не установили интерпретатор для Visual Studio 2015 или более
ранней версии. Дополнительные сведения см. в статье Установка интерпретаторов Python.

Если вы точно знаете, что на компьютере установлен интерпретатор Python, но Visual Studio (любая
версия) не может его обнаружить, укажите его расположение вручную с помощью команды +
Настраиваемый. Дополнительные сведения см. в следующем разделе Указание существующего
окружения вручную.

TIP
Visual Studio обнаруживает обновления для существующих интерпретаторов, например обновление Python
2.7.11 до версии 2.7.14, с помощью установщиков с сайта python.org. В процессе установки старое окружение
исчезнет из списка Окружения Python , прежде чем на его месте появится обновленная версия.

Но если вы переместите интерпретатор и его окружение вручную с помощью средств файловой системы, Visual
Studio не сможет узнать его новое расположение. Дополнительные сведения см. в статье Перемещение
интерпретатора.

Типы окружений
Visual Studio может работать с глобальными, виртуальными окружениями и окружениями Conda.
Глобальные среды
Каждая установка Python (например, Python 2.7, Python 3.6, Python 3.7, Anaconda 4.4.0 и т. п.)
поддерживает собственное глобальное окружение. См. статью Установка интерпретаторов Python.
Каждое окружение состоит из определенного интерпретатора Python, его стандартной библиотеки,
набора предварительно установленных пакетов и любых дополнительных пакетов, устанавливаемых при
активации этого окружения. Установив пакет в глобальном окружении, мы предоставляем к нему доступ
для всех проектов, в которых оно используется. Если окружение находится в защищенной области
файловой системы (например, в C:\Program files), для установки пакетов требуются права
администратора.

Глобальные окружения доступны для всех проектов на компьютере. В Visual Studio вы можете выбрать
одно глобальное окружение по умолчанию, которое будет использоваться для всех проектов, если вы не
укажете другое для определенного проекта. Дополнительные сведения см. в разделе о выборе
окружения для проекта.
Виртуальные среды
Хотя работа в глобальном окружении проста и удобна для начала, со временем это окружение станет
загромождено множеством разных пакетов, установленных вами для различных проектов. Такой
беспорядок затрудняет тщательное тестирование приложения с использованием определенного набора
пакетов с известными версиями, что в точности соответствует среде, которую вы можете настроить на
сервере сборки или веб-сервере. Когда двум проектам требуются несовместимые пакеты или разные
версии одного пакета, могут возникать конфликты.

По этой причине разработчики часто создают для проекта виртуальное окружение. Виртуальное
окружение представляет собой вложенную папку в проекте, содержащую копию конкретного
интерпретатора. При активации виртуального окружения все устанавливаемые вами пакеты
устанавливаются только во вложенной папке этого окружения. При последующем запуске программы
Python в этом окружении вы знаете, что она выполняется с использованием только этих конкретных
пакетов.
Visual Studio предоставляет прямую поддержку для создания виртуального окружения для проекта.
Например, если открыть проект , содержащий файл requirements.txt, или создать проект из шаблона,
который включает этот файл, Visual Studio предложит автоматически создать виртуальное окружение и
установить эти зависимости.

Вы можете создать виртуальное окружение в открытом проекте в любой момент. В обозревателе


решений разверните узел проекта, щелкните правой кнопкой мыши элемент Окружения Python и
выберите "Добавить виртуальное окружение". Дополнительные сведения см. в разделе Создание
виртуального окружения.

В Visual Studio также доступна команда для создания файла requirements.txt из виртуального окружения,
что позволяет легко воссоздать окружение на других компьютерах. См. дополнительные сведения о
виртуальных окружениях.
Окружения Conda
Окружение conda создается с помощью средства conda или интегрированного управления conda в Visual
Studio 2017 версии 15.7 и более поздних версий. (Требуется Anaconda или Miniconda, которые можно
установить через Visual Studio Installer, подробнее см. в разделе Установка.)

1. Выберите + Создать окружение conda в окне Окружения Python , чтобы открыть вкладку
Создать новое окружение conda :

2. Введите имя окружения в поле Имя, выберите базовый интерпретатор Python в поле Python и
нажмите Создать.

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

4. В Visual Studio можно активировать окружение conda для проекта так же, как любое другое
окружение, как описано в статье Выбор окружения для проекта.

5. Установить пакеты в окружении можно на вкладке Пакеты.


1. Выберите + Добавить окружение в окне Окружения Python (или на панели инструментов
Python), чтобы открыть диалоговое окно Добавление окружения. В этом диалоговом окне
выберите вкладку Среда Conda :

2. Настройте следующие поля:

ПОЛЕ ОПИСАНИЕ

Проект Проект , в котором вы создаете окружение (если в


вашем решении Visual Studio есть несколько
проектов).

name Имя среды Conda.

Add packages from (Добавить пакеты из) Выберите Environment file (Файл окружения), если
у вас есть файл environment.yml с описанием
зависимостей, или выберите One or more
Anaconda package names (Имена одного или
нескольких пакетов Anaconda) и отметьте хотя бы
один пакет Python или версию Python в поле ниже.
Этот список пакетов передает Conda задание на
создание окружения Python. Чтобы установить
последнюю версию Python, используйте python .
Чтобы установить определенную версию,
используйте python=,major>.<minor> , как показано
в python=3.7 . Кнопка пакета позволяет выбрать
версии Python и общие пакеты из нескольких меню.

Set as current environment (Установить в качестве После создания окружения активирует его в
текущего окружения) выбранном проекте.
ПОЛЕ ОПИСАНИЕ

Set as default environment for new projects Автоматически устанавливает среду Conda и
(Установить в качестве окружения по умолчанию активирует ее во всех новых проектах , которые
для новых проектов) создаются в Visual Studio. Этот параметр
эквивалентен параметру Make this the default
environment for new projects (Назначить это
окружение по умолчанию для новых проектов) в
окне Окружения Python .

View in Python Environments window (Просмотреть в Указывает , нужно ли отобразить окно Окружения
окне окружений Python) Python после создания окружения.

IMPORTANT
При создании среды Conda обязательно укажите хотя бы одну версию Python или пакет Python с
помощью environments.yml или списка пакетов, чтобы окружение содержало среду выполнения Python.
В противном случае Visual Studio игнорирует окружение, то есть оно не отображается в окне
Окружения Python и его нельзя задать в качестве текущего окружения для проекта и глобального
окружения.

Если вы случайно создадите среду Conda без версии Python, выполните команду conda info , чтобы
просмотреть расположения папок среды Conda и вручную удалите вложенную папку окружения из
этого расположения.

3. Выберите Создать и отслеживайте ход выполнения в окне вывода . Выходные данные после
завершения создания возвращают несколько инструкций CLI:

4. В Visual Studio можно активировать окружение conda для проекта так же, как любое другое
окружение, как описано в статье Выбор окружения для проекта.

5. Чтобы установить дополнительные пакеты в окружении, воспользуйтесь вкладкой Пакеты.

NOTE
Для оптимальной работы с окружениями conda используйте conda 4.4.8 или более поздней версии (версии conda
отличаются от версий Anaconda). Вы можете установить подходящие версии Miniconda (Visual Studio 2019) и
Anaconda (Visual Studio 2017) через установщик Visual Studio.

Чтобы просмотреть версию conda, в которой хранятся окружения conda, и другие сведения, запустите
conda info в командной строке Anaconda (то есть в командной строке, в пути которой указана Anaconda):

conda info
Папки окружения conda будут выглядеть следующим образом:

envs directories : C:\Users\user\.conda\envs


c:\anaconda3\envs
C:\Users\user\AppData\Local\conda\conda\envs

Поскольку окружения conda не хранятся в проекте, они работают как глобальные среды. Например, если
установить пакет в окружении Conda, он станет доступным для всех проектов, в которых используется
это окружение.

Для Visual Studio 2017 версии 15.6 и более ранних версий можно использовать окружения conda, указав
на них вручную, как описано в разделе Указание существующего окружения вручную.

Visual Studio 2017 версии 15.7 и более поздних версий обнаруживает окружения conda автоматически и
отображает их в окне Окружения Python , как описано в следующем разделе.

Указание существующего окружения вручную


Чтобы указать окружение (в том числе окружение Conda в Visual Studio 2017 версии 15.6 и более ранних
версий), установленное в нестандартном расположении, выполните следующие действия:

1. Выберите + Настраиваемое в окне Окружения Python , чтобы открыть вкладку Настройка :

2. Введите имя среды в поле Описание .


3. Введите путь к интерпретатору или найдите его (с помощью кнопки ... ) в поле Префикс пути.
4. Если Visual Studio обнаружит интерпретатор Python в этом расположении (ниже представлен
пример пути к окружению Conda), команда Автоматическое определение станет активна.
Если выбрать Автоматическое определение , все оставшиеся поля заполняются
автоматически. Также вы можете заполнить эти поля вручную.
5. Когда все поля будут заполнены нужными значениями, щелкните Применить, чтобы сохранить
конфигурацию. Теперь это окружение можно использовать в Visual Studio так же, как и остальные.

6. Если потребуется удалить окружение, которое вы указали вручную, щелкните команду Удалить
на вкладке Настройка . Для автоматически обнаруженных сред этот параметр не предлагается.
Дополнительные сведения см. в описании вкладки "Настройка".

1. Выберите + Добавить окружение в окне Окружения Python (или на панели инструментов


Python), чтобы открыть диалоговое окно Добавление окружения. В этом диалоговом окне
выберите вкладку Существующие среды:
2. Щелкните раскрывающийся список Окружение и выберите Пользовательское :

3. В предоставленных полях в диалоговом окне введите путь к интерпретатору (Prefix path ) или
найдите его с помощью кнопки ... , и большинство других полей заполнятся автоматически.
Просмотрите предложенные значения и измените их при необходимости, а затем щелкните
Добавить.
4. Сведения об окружении можно просмотреть и изменить в любое время через окно Окружения
Python . Выберите в этом окне нужное окружение и перейдите на вкладку Настройка . Внеся
изменения, выберите команду Применить. Вы также можете удалить окружение с помощью
команды Удалить (недоступно для автоматически обнаруженных сред). Дополнительные
сведения см. в описании вкладки "Настройка".

Исправление или удаление недопустимых сред


Если Visual Studio находит записи реестра для среды, но путь к интерпретатору недопустим, в окне
Окружения Python отображается зачеркнутое имя.

Чтобы исправить нужную среду, попробуйте сначала использовать процесс исправления в


установщике. Такая возможность есть, например, в установщиках для стандартной версии Python 3.x.

Чтобы исправить среду, у которой нет возможности исправления, или удалить недопустимую среду,
следуйте инструкциям ниже и измените реестр напрямую. Visual Studio автоматически обновляет окно
Окружения Python при внесении изменений в реестр.

1. Запустите файл regedit.exe.


2. Перейдите к разделу HKEY_LOCAL_MACHINE\SOFTWARE\Python или
HKEY_CURRENT_USER\SOFTWARE\Python . Если используется IronPython, вместо этого ищите
IronPython .
3. Разверните узел, соответствующий дистрибутиву, например Python Core для CPython или
ContinuumAnalytics для Anaconda. Если используется IronPython, разверните узел номера версии.
4. Проверьте значения в узле InstallPath .

Если среда по-прежнему существует на компьютере, измените значение ExecutablePath на


правильное расположение. Также исправьте значения (Default) и WindowedExecutablePath
требуемым образом.
Если среда больше не существует на компьютере и вы хотите удалить ее из окна Окружения
Python , удалите родительский узел InstallPath , например 3.6 на приведенном выше рисунке.
Недопустимые параметры в HKEY_CURRENT_USER\SOFTWARE\Python переопределяют
параметры в HKEY_LOCAL_MACHINE\SOFTWARE\Python .

См. также
Установка интерпретаторов Python
Выбор интерпретатора для проекта
Использование файла requirements.txt для зависимостей
Пути поиска
Справочная информация по окну "Окружения Python"
Выбор окружения Python для проекта
21.10.2020 • 17 minutes to read • Edit Online

Весь код в проекте Python выполняется в контексте определенного окружения, например в


глобальном окружении Python, окружении Anaconda, виртуальном окружении или окружении Conda.
Visual Studio использует это же окружение для отладки, импорта, автозавершения элементов,
проверки синтаксиса и других задач, требующих языковые службы, которые характерны для данной
версии Python и набора установленных пакетов.

Для всех новых проектов Python в Visual Studio настраивается глобальное окружение по умолчанию,
которое указано в узле Окружения Python в обозревателе решений:

Чтобы изменить окружение для проекта, щелкните правой кнопкой мыши узел Окружения Python и
выберите Добавление и удаление окружений Python . В появившемся списке глобальных,
виртуальных окружений и окружений Conda выберите все окружения, которые должны отображаться
в узле Окружения Python :

Когда вы щелкнете ОК, все выбранные окружения отобразятся в узле Окружения Python .
Полужирным шрифтом здесь выделено окружение, которое сейчас активно:
Чтобы быстро активировать другое окружение, щелкните его имя правой кнопкой мыши и выберите
команду Активировать окружение . Ваш выбор сохраняется в проекте, и выбранное окружение
применяется при каждом последующем открытии проекта. Если вы снимете все флажки в диалоговом
окне Добавление и удаление окружений Python , в Visual Studio будет активировано глобальное
окружение по умолчанию.

В контекстном меню узла Окружения Python также доступны дополнительные команды:

КОМАНДА ОПИСАНИЕ

Добавить виртуальное окружение Запускает процесс создания виртуального окружения


в проекте. Дополнительные сведения см. в разделе
Создание виртуального окружения.

Добавить существующее виртуальное Выводит запрос на выбор папки, содержащей


окружение виртуальное окружение, и добавляет окружение в
список в узле Окружения Python , но не активирует
его. См. дополнительные сведения об активации
существующего виртуального окружения.

Созд ать окружение Conda Переключается в окно Окружения Python , в


котором нужно ввести имя окружения и указать для
него базовый интерпретатор. См. Окружения Conda.

Чтобы изменить окружение для проекта, щелкните правой кнопкой мыши узел Окружения Python и
выберите Добавить окружение . Можно также выбрать пункт Добавить окружение в
раскрывающемся списке сред на панели инструментов Python.

Когда откроется диалоговое окно Добавление окружения, перейдите на вкладку


Существующее окружение и выберите новое окружение из раскрывающегося списка
Окружения:
Если вы уже добавили в проект окружение, отличное от стандартного глобального окружения, для
него может потребоваться активация. Щелкните окружение правой кнопкой мыши в узле Окружения
Python и выберите действие Активировать окружение . Чтобы удалить из проекта окружение,
выберите действие Удалить.

Использование виртуальных окружений


Виртуальное окружение — это уникальное сочетание интерпретатора Python и набора библиотек,
которое не повторяется в других глобальных окружениях и окружениях Conda. Виртуальное
окружение предназначено для конкретного проекта, и данные о нем хранятся в папке проекта. В этой
папке содержатся установленные библиотеки окружения и файл pyvenv.cfg, в котором указан путь к
базовому интерпретатору, расположенному в другом месте файловой системы. То есть в виртуальном
окружении нет копии интерпретатора, а только ссылка на него.

Преимуществом виртуального окружения является то, что в нем по мере разработки проекта всегда
будут отражаться точные зависимости проекта. (С другой стороны, в общем глобальном окружении
можно хранить любое число библиотек, используемых или неиспользуемых в проекте.) В виртуальном
окружении можно легко создать файл requirements.txt, который будет использоваться для
переустановки этих зависимостей на другой рабочий компьютер или компьютер разработки.
Дополнительные сведения см. в руководстве по управлению необходимыми пакетами с помощью
requirements.txt.
Если в Visual Studio открыть проект , который содержит файл requirements.txt, Visual Studio
автоматически позволит воссоздать виртуальное окружение. На тех компьютерах, где не установлена
среда Visual Studio, можно восстанавливать пакеты с помощью команды
pip install -r requirements.txt .
Учитывая то, что в виртуальном окружении жестко запрограммирован путь к базовому
интерпретатору и можно воссоздать окружение с помощью файла requirements.txt, обычно вся папка
виртуального окружения не указывается в системе управления версиями.

В следующих разделах объясняется, как активировать существующее виртуальное окружение в


проекте и создать новое виртуальное окружение.

В Visual Studio виртуальное окружение для проекта активируется так же, как и любое другое
окружение: с помощью узла Окружения Python в обозревателе решений.

Если виртуальное окружение добавлено в проект , оно появится в окне Окружения Python . После
этого вы сможете активировать его, как и любое другое окружение, и управлять его пакетами.

Создание виртуальной среды


Виртуальное окружение можно создать напрямую в Visual Studio, выполнив следующие действия.

1. В обозревателе решений выберите Добавить виртуальное окружение , щелкнув правой


кнопкой мыши Окружения Python . Откроется следующее диалоговое окно:

2. В поле Расположение виртуального окружения укажите путь к виртуальному окружению.


Если вы укажете только имя, для виртуального окружения в текущем проекте создается
вложенная папка с таким же именем.

3. Выберите среду в качестве базового интерпретатора и щелкните Создать. В Visual Studio


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

4. Виртуальное окружение не активируется по умолчанию. Чтобы активировать виртуальное


окружение для проекта, щелкните проект правой кнопкой мыши и выберите Активировать
окружение .
NOTE
Если указан путь к расположению существующего виртуального окружения, Visual Studio автоматически
обнаруживает базовый интерпретатор (для этого используется файл orig-prefix.txt в каталоге окружения lib).
Вместо кнопки Созд ать отобразится кнопка Добавить.

Если в добавляемом виртуальном окружении уже есть файл requirements.txt, в диалоговом окне Добавление
виртуального окружения отображается запрос на автоматическую установку пакетов. Этот механизм
упрощает восстановление окружения на другом компьютере:

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

Активация существующего виртуального окружения


Если у вас уже есть виртуальное окружение, его можно активировать для проекта следующим
образом:

1. В обозревателе решений выберите Добавить существующее виртуальное


окружение , щелкнув правой кнопкой мыши Окружения Python .

2. Откроется диалоговое окно Обзор. Найдите и выберите здесь папку с виртуальным


окружением, а затем нажмите кнопку ОК. Если Visual Studio обнаружит в этом окружении файл
requirements.txt, появится запрос на установку обнаруженных пакетов.
3. Через несколько секунд виртуальное окружение появится в узле Окружения
Python**** обозревателя решений. Виртуальное окружение не активируется по умолчанию,
поэтому щелкните его правой кнопкой мыши и выберите действие Активировать
окружение .

Создание виртуальной среды


Виртуальное окружение можно создать напрямую в Visual Studio, выполнив следующие действия.

1. Чтобы изменить окружение для проекта, щелкните правой кнопкой мыши узел Окружения
Python в обозревателе решений и выберите Добавить окружение или выберите
Добавить окружение из раскрывающегося списка окружений на панели инструментов
Python. В открывшемся диалоговом окне Добавление окружения выберите вкладку
Виртуальное окружение :

2. Укажите имя виртуального окружения, выберите базовый интерпретатор и проверьте его


расположение. В разделе Install packages from file (Устанавливать пакеты из файла) укажите
путь к файлу requirements.txt, если нужно.

3. Проверьте другие параметры в диалоговом окне.

ПАРАМЕТР ОПИСАНИЕ

Set as current environment (Установить в качестве После создания окружения активирует его в
текущего окружения) выбранном проекте.

Set as default environment for new projects Автоматически устанавливает окружение и


(Установить в качестве окружения по умолчанию активирует его во всех новых проектах , которые
для новых проектов) создаются в Visual Studio. При использовании этого
варианта виртуальное окружение следует
размещать за пределами конкретных проектов.

View in Python Environments window (Просмотреть в Указывает , нужно ли открывать окно Окружения
окне окружений Python) Python после создания окружения.

Make this environment available globally (Сделать это Указывает , нужно ли сделать это виртуальное
окружение доступным глобально) окружение глобальным. При использовании этого
варианта виртуальное окружение следует
размещать за пределами конкретных проектов.

4. Выберите Создать, чтобы завершить создание виртуального окружения. В Visual Studio


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

Активация существующего виртуального окружения


Если у вас уже есть виртуальное окружение, его можно активировать для проекта следующим
образом:

1. В обозревателе решений щелкните правой кнопкой мыши Окружения Python и выберите


Добавить окружение .

2. Откроется диалоговое окно Обзор. Найдите и выберите здесь папку с виртуальным


окружением, а затем нажмите кнопку ОК. Если Visual Studio обнаружит в этом окружении файл
requirements.txt, появится запрос на установку обнаруженных пакетов.
3. Через несколько секунд виртуальное окружение появится в узле Окружения
Python**** обозревателя решений. Виртуальное окружение не активируется по умолчанию,
поэтому щелкните его правой кнопкой мыши и выберите действие Активировать
окружение .

Удаление виртуального окружения


1. В обозревателе решений щелкните правой кнопкой мыши виртуальное окружение и
выберите Удалить.

2. В Visual Studio вам будет предложено выбрать нужное действие (убрать или удалить
виртуальное окружение). Вариант Убрать означает , что окружение исчезнет из проекта, но
сохранится в файловой системе. Если выбрать Удалить, окружение убирается из проекта и все
его файлы удаляются из файловой системы. Это действие не затрагивает базовый
интерпретатор.

Просмотр установленных пакетов


В обозревателе решений можно развернуть узел любого окружения, чтобы быстро просмотреть
установленные в нем пакеты (то есть те, которые можно импортировать и применять в коде, когда
активно это окружение):

Чтобы установить пакеты, щелкните окружение правой кнопкой мыши и выберите действие
Установить пакет Python . В окне Окружения Python откроется соответствующая вкладка
Пакеты. Введите условие поиска (лучше всего имя пакета), и в Visual Studio отобразятся все
подходящие пакеты.

Чтобы установить новые пакеты, щелкните окружение правой кнопкой мыши и выберите действие
Manage Python Packages (Управление пакетами Python). В окне Окружения Python откроется
соответствующая вкладка Пакеты. На вкладке Пакеты введите условие поиска (обычно это имя
пакета), и Visual Studio отобразит все подходящие пакеты.

Пакеты (и зависимости) в Visual Studio для большинства окружений скачиваются из репозитория


Python Package Index (PyPI). В нем же вы можете искать доступные пакеты. В строке состояния Visual
Studio и окне вывода отображаются сведения об установке. Чтобы удалить пакет , щелкните его
правой кнопкой мыши и выберите Удалить.

Обычно диспетчер пакетов conda по умолчанию использует канал https://repo.continuum.io/pkgs/ , но


доступны и другие каналы. Дополнительные сведения см. в статье об управлении каналами
(docs.conda.io).
Не забывайте, что отображаемые записи могут быть неточными, а задания установки и удаления —
ненадежными или недоступными. Visual Studio использует диспетчер пакетов pip, если он доступен, и
при необходимости скачивает и устанавливает его. Visual Studio также может использовать диспетчер
пакетов простой установки (easy_install). Здесь же отображаются пакеты, установленные с помощью
команд pip или easy_install из командной строки.

Обратите внимание, что сейчас Visual Studio не позволяет использовать conda для установки пакетов
в окружении Conda. Вместо этого используйте conda из командной строки.

TIP
Если пакет содержит исходный код собственных компонентов в файлах *.pyd, попытка pip установить пакет
завершается сбоем. Если необходимая версия Visual Studio не установлена, pip не может скомпилировать эти
компоненты. В этом случае отображается такое сообщение: Ошибка: не уд алось найти vcvarsall.bat . Как
правило, диспетчер easy_install может скачать предварительно скомпилированные двоичные файлы.
Подходящий компилятор для более старых версий Python можно скачать по адресу
https://www.microsoft.com/download/details.aspx?id=44266. Дополнительные сведения см. в записи блога
команды разработчиков Python How to deal with the pain of “unable to find vcvarsall.bat” (Что делать в случае
возникновения ошибки "Не удалось найти vcvarsall.bat").

См. также
Управление окружениями Python в Visual Studio
Использование файла requirements.txt для зависимостей
Пути поиска
Справочная информация по окну "Окружения Python"
Управление необходимыми пакетами с помощью
requirements.txt
21.10.2020 • 4 minutes to read • Edit Online

Если вы предоставляете доступ к проекту другим, используете систему сборки или планируете
скопировать проект в другое расположение, где нужно восстановить среду, то необходимо указать
внешние пакеты, необходимые проекту. Рекомендуется использовать файл requirements.txt
(readthedocs.org), содержащий список команд для pip, который устанавливает необходимые версии
зависимых пакетов. Наиболее распространенной является команда pip freeze > requirements.txt , которая
записывает текущий список пакетов среды в файл requirements.txt.

Технически для отслеживания требований можно использовать любой файл (используя


-r <full path to file> при установке пакета), но Visual Studio имеет встроенную поддержку
requirements.txt:
Если вы загрузили проект , содержащий файл requirements.txt, и хотите установить все указанные в
нем пакеты, разверните узел Среды Python в обозревателе решений, щелкните правой
кнопкой мыши узел среды и выберите Установить из файла requirements.txt :

Если вы хотите установить зависимости в виртуальном окружении, сначала создайте и активируйте


окружение, а затем воспользуйтесь командой Установка из файла requirements.txt .
Дополнительные сведения о создании виртуального окружения см. в статье Выбор окружения
Python для проекта.
Если в среде установлены все необходимые пакеты, можно щелкнуть среду правой кнопкой мыши в
обозревателе решений и выбрать Создать файл requirements.txt , чтобы создать
необходимый файл. Если файл уже существует , отображается запрос с вариантами обновления:
Replace entire file (Заменить весь файл) удаляет все существующие элементы, комментарии и
параметры.
Обновить существующие записи определяет требования к пакету и обновляет описатели
версии в соответствии с установленной версией.
Update and add entries (Обновить и добавить записи) обновляет имеющиеся требования и
добавляет все другие пакеты в конец файла.

Так как файлы requirements.txt используются для фиксации требований среды, все установленные пакеты
записываются с точными версиями. Такие версии позволяют легко воспроизвести ваше окружение на
другом компьютере. Пакеты включены, даже если они были установлены с диапазоном версий, как
зависимость от другого пакета или с установщиком, отличным от pip.

Если pip не удается установить пакет , указанный в файле requirements.txt, установка завершается сбоем. В
этом случае нужно вручную исключить этот пакет из файла или использовать параметры pip для
указания ссылки на устанавливаемую версию пакета. Например, можно использовать pip wheel для
компиляции зависимости и добавления параметра --find-links <path> в файл requirements.txt:

C:\Project>pip wheel azure


Downloading/unpacking azure
Running setup.py (path:C:\Project\env\build\azure\setup.py) egg_info for package azure

Building wheels for collected packages: azure


Running setup.py bdist_wheel for azure
Destination directory: c:\project\wheelhouse
Successfully built azure
Cleaning up...

C:\Project>type requirements.txt
--find-links wheelhouse
--no-index
azure==0.8.0

C:\Project>pip install -r requirements.txt -v


Downloading/unpacking azure==0.8.0 (from -r requirements.txt (line 3))
Local files found: C:/Project/wheelhouse/azure-0.8.0-py3-none-any.whl
Installing collected packages: azure
Successfully installed azure
Cleaning up...
Removing temporary dir C:\Project\env\build...

См. также раздел


Управление окружениями Python в Visual Studio
Выбор интерпретатора для проекта
Пути поиска
Справочная информация по окну "Окружения Python"
Как пути поиска Python используются в Visual
Studio
21.10.2020 • 3 minutes to read • Edit Online

При стандартном использовании Python переменная среды PYTHONPATH (или IRONPYTHONPATH и т. д.)
предоставляет путь поиска по умолчанию для файлов модулей. То есть, когда вы используете
инструкцию from <name> import... или import <name> , в Python выполняется поиск совпадающего имени в
следующих расположениях в указанном порядке:

1. Встроенные модули Python.


2. Папка с кодом Python, который вы используете.
3. Расположение по пути поиска модуля, определенное в переменной среды. (См. сведения в разделах о
пути поиска модуля и переменных среды в основной документации Python.)

Тем не менее Visual Studio игнорирует переменную среды для пути поиска, даже если она задана для всей
системы. На самом деле она не учитывается именно из-за того, что задана для всей системы, так как в
этом случае возникают некоторые вопросы, на которые нельзя ответить автоматически: для какого
окружения предназначены указанные модули — для Python 2.7 или Python 3.6+? нужно ли
переопределять стандартные модули библиотеки и знает ли разработчик о подобном поведении или это
попытка атаки.

Таким образом, в Visual Studio можно напрямую указать пути поиска как в окружениях, так и в проектах.
Код, который выполняется или отлаживается в Visual Studio, получает пути поиска из переменной
PYTHONPATH (и других ее аналогов). Если вы добавляете пути поиска, Visual Studio проверяет библиотеки в
этих расположениях и при необходимости создает для них базы данных IntelliSense (Visual Studio 2017
версии 15.5 и более ранних версий; это может занять некоторое время в зависимости от числа библиотек).

Чтобы добавить путь поиска, в Обозревателе решений разверните узел проекта, щелкните правой
кнопкой мыши элемент Пути поиска и выберите Добавить папку в путь поиска …
Эта команда отображает браузер, в котором можно выбрать включаемую папку.

Если ваша переменная среды PYTHONPATH уже включает в себя требуемые папки, для ускорения процесса
используйте команду Добавить PYTHONPATH в путь поиска .

После добавления папок в пути поиска Visual Studio использует эти пути для любой среды, связанной с
проектом. (Если окружение создано на основе Python 3, может произойти ошибка при попытке добавить
путь поиска для модулей Python 2.7.)

Файлы с расширением ZIP или EGG также можно добавить в качестве путей поиска. Для этого нужно
выбрать Добавить ZIP- архив в путь поиска . Как и при использовании папок, содержимое этих
файлов проверяется и предоставляется для IntelliSense.

См. также раздел


Управление окружениями Python в Visual Studio
Выбор интерпретатора для проекта
Использование файла requirements.txt для зависимостей
Справочная информация по окну "Окружения Python"
Справочная информация по вкладкам окна
"Окружения Python"
21.10.2020 • 13 minutes to read • Edit Online

Чтобы открыть окно Окружения Python , сделайте следующее:

Выберите команду меню Просмотр > Другие окна > Окружения Python .
В обозревателе решений щелкните правой кнопкой мыши узел Окружения Python в нужном
проекте и выберите Просмотреть все окружения Python .

Если окно Окружения Python развернуть достаточно широко, эти параметры отобразятся в виде
вкладок. Такой вариант может оказаться для вас более удобным. Для ясности вкладки в этой статье
показаны в развернутом представлении.
Вкладка "Обзор"
Содержит основные сведения и команды для окружения:

КОМАНДА ОПИСАНИЕ

По умолчанию использовать это окружение д ля Задает активное окружение, при загрузке базы данных
новых проектов IntelliSense в котором система Visual Studio (2017 версия
15.5 и более ранние) может ненадолго перестать
отвечать. Среды с множеством пакетов могут не
отвечать дольше.

Посетить веб- сайт распространителя Открывает в браузере URL-адрес , указанный в


дистрибутиве Python. Например, для Python 3.x
открывается сайт python.org.

Открыть интерактивное окно Открывает интерактивное окно (REPL) для этого


окружения в Visual Studio, применяя все скрипты
запуска (см. ниже).

Просмотреть интерактивные скрипты См. раздел о скриптах запуска.


КОМАНДА ОПИСАНИЕ

Использовать интерактивный режим IPython Если этот параметр задан, по умолчанию открывается
интерактивное окно с IPython. Это позволяет
использовать встроенные графики и расширенный
синтаксис IPython, например name? , для просмотра
справки и !command для команд оболочки. Этот
параметр рекомендуется использовать при работе с
дистрибутивом Anaconda, так как ему требуются
дополнительные пакеты. Дополнительные сведения см.
в статье Использование IPython в интерактивном окне.

Открыть в PowerShell Запускает интерпретатор в окне команд PowerShell.

(Ссылки на программы и папки) Предоставляет быстрый доступ к папке установки


окружения, интерпретатору python.exe и
интерпретатору pythonw.exe. Папка открывается в
проводнике, а интерпретаторы — в окне консоли.

Скрипты запуска
Используя интерактивные окна в повседневной работе, удобно разработать вспомогательные функции
для регулярного применения. Например, вы можете создать функцию, которая открывает кадр данных в
Excel, и сохранить этот код как скрипт запуска, чтобы он всегда был доступен в интерактивном окне.
Скрипты запуска содержат код, автоматически загружаемый и запускаемый интерактивным окном,
включая операции импорта, определения функций и пр. Ссылки на такие скрипты выполняются двумя
способами:

1. При установке окружения Visual Studio создает папку Documents\Visual Studio <version>\Python
Scripts\<environment> , где <version> — это версия Visual Studio (например, 2017 или 2019), а
<environment> соответствует имени окружения. Вы легко можете перейти в папку окружения с
помощью команды Просмотреть интерактивные сценарии. При запуске интерактивного
окна для этого окружения оно загружает и выполняет все найденные файлы .py в алфавитном
порядке.

2. Элемент управления Скрипты на вкладке Инструменты > Параметры > Python >
Интерактивные окна (см. раздел Параметры интерактивных окон) позволяет указать
дополнительную папку для скриптов запуска, которые загружаются и выполняются во всех
окружениях. Однако сейчас эта функция не работает.

Вкладка "Настройка"
На вкладке Настройка (если она доступна) содержатся параметры, описанные в таблице ниже. Если
этой вкладки нет в списке, это значит , Visual Studio автоматически управляет всеми сведениями.
ПОЛЕ ОПИСАНИЕ

Описание Имя среды.

Prefix path (Префикс пути) Расположение базовой папки интерпретатора. Если


заполнить это значение и щелкнуть Автовыбор, Visual
Studio пытается заполнить другие поля автоматически.

Interpreter path (Путь к интерпретатору ) Это путь к исполняемому файлу интерпретатора,


который обычно состоит из префикса пути и имени
python.exe .

Windowed interpreter (Оконный интерпретатор) Это путь к неконсольному исполняемому файлу ,


который обычно состоит из префикса пути и имени
pythonw.exe .

Librar y path (Путь к библиотеке) Корень стандартной библиотеки, но это значение


(если доступно) может игнорироваться, если Visual Studio может
запросить более точный путь через интерпретатор.
ПОЛЕ ОПИСАНИЕ

Версия языка Выбирается в раскрывающемся меню.

Архитектура Обычно архитектура обнаруживается и заполняется


автоматически. В противном случае здесь можно
указать 32-bit или 64-bit .

Path environment variable (Переменная среды пути) Переменная среды, которую интерпретатор
использует , чтобы найти пути поиска. Visual Studio
изменяет значение переменной при запуске Python,
чтобы он содержал пути поиска проекта. Обычно для
этого свойства должно быть присвоено значение
PYTHONPATH , но некоторые интерпретаторы
используют другое значение.

Вкладка "Пакеты"
В более ранних версиях называлась pip.
Позволяет управлять пакетами, установленными в окружении, с помощью инструмента pip (вкладка
Пакеты (PyPI) ) или conda (вкладка Пакеты (Conda) , для окружений conda в Visual Studio 2017 15.7 и
более поздних версиях). На этой вкладке вы также можете выполнить поиск новых пакетов (с их
зависимостями) и установить их.

Уже установленные пакеты отображаются с элементами управления, с помощью которых пакет можно
обновить (стрелка вверх) или удалить (X в кружке):

При вводе условия поиска фильтруется список установленных пакетов, а также пакеты, которые можно
установить из PyPI.
Как видно на рисунке выше, результаты поиска показывают число пакетов, которые соответствуют
поисковому запросу. Но первая запись в списке содержит команду для запуска pip install <name>
напрямую. На вкладке Пакеты (Conda) вместо этого отображается conda install <name> :

В обоих случаях можно настроить установку, добавляя аргументы в поле поиска после имени пакета.
Если вы указали аргументы, в результатах поиска отображается команда pip install или conda install ,
после которой идет содержимое поля поиска:

При установке пакета создаются вложенные папки в папке Lib соответствующего окружения в рамках
файловой системы. Например, если в системе есть Python 3.6 с установкой в папке c:\Python36, пакеты
устанавливаются в c:\Python36\Lib; Если есть anaconda3, установленный в папке c:\Program
Files\Anaconda3, пакеты устанавливаются в c:\Program Files\Anaconda3\Lib. В окружениях conda пакеты
устанавливаются в папке самого окружения.

Предоставление прав администратора для установки пакета


При установке пакета в окружение, которое находится в защищенной области файловой системы,
например c:\Program Files\Anaconda3\Lib, Visual Studio требуется запустить pip install с повышенными
привилегиями, чтобы разрешить создание вложенных папок для пакетов. Когда требуется повышение
прав, Visual Studio отображает запрос Для установки, обновления или удаления пакетов для
этого окружения могут потребоваться права администратора :

Параметр Повысить уровень прав предоставляет pip права администратора для отдельной операции,
что также распространяется на все запросы разрешений в операционной системе. Выбор варианта
Продолжить без прав администратора приводит к попытке установить пакет , но выполнение pip
завершится сбоем при попытке создать папки с выходными данными, возвращая такое сообщение:
ошибка : не удалось создать 'C:\Program Files\Anaconda3\Lib\site-packages\png.py': в
разрешении отказано.

Значение Всегда повышать уровень прав при установке и удалении пакетов отключает
отображение данного диалогового окна для соответствующего окружения. Чтобы снова включить
отображение диалогового окна, откройте вкладку Инструменты > Параметры > Python > Общие и
нажмите кнопку Сбросить все окончательно скрытые диалоговые окна .

На этой же вкладке Параметры можно выбрать Всегда выполнять pip от имени


администратора , чтобы отключить это диалоговое окно для всех окружений. См. раздел Параметры
вкладки "Общие".

Ограничения безопасности с более ранними версиями Python


При использовании Python 2.6, 3.1 и 3.2 Visual Studio выводит предупреждение: В связи с
ограничениями безопасности установка из Интернета может не работать в этой версии
Python :

Предупреждение возникает потому, что в предыдущих версиях Python pip install не поддерживает
протокол TLS 1.2, который требуется для загрузки пакетов из источника пакетов, pypi.org.
Пользовательские сборки Python могут поддерживать TLS 1.2, и в этом случае pip install может
сработать.

Возможно, соответствующий get-pip.py для пакета удастся скачать через bootstrap.pypa.io, затем вручную
скачать пакет с сайта pypi.org и установить его из этой локальной копии.

Однако рекомендуется просто выполнить обновление до Python 2.7 или 3.3+. В этом случае
предупреждение не будет появляться.

Вкладка IntelliSense
На этой вкладке отображается текущее состояние выполнения IntelliSense для базы данных.
В Visual Studio 2017 версии 15.5 и более ранних варианты завершения IntelliSense зависят от базы
данных, которая компилируется для этой библиотеки. Создание осуществляется в фоновом режиме
при установке библиотеки, но оно может занять некоторое время и не завершиться, если вы начнете
вводить код.
В Visual Studio 2017 версии 15.6 и более поздних используется более быстрый способ вывода
вариантов завершения, которые не зависят от базы данных по умолчанию. Поэтому вкладка помечена
как IntelliSense [ база данных отключена ] . Вы можете включить базу данных, сняв флажок
Средства > Параметры > Python > Экспериментально > Использовать новый стиль
IntelliSense для сред .
Когда Visual Studio обнаруживает (или когда вы добавляете) новую среду, автоматически запускается
компиляция базы данных путем анализа исходных файлов библиотеки. Этот процесс может занять от
минуты до часа и более в зависимости от установленных компонентов. (Anaconda, например, содержит
множество библиотек, поэтому компиляция базы данных занимает некоторое время.) После завершения
вы получите подробности IntelliSense, и вам не придется снова обновлять базу данных (с помощью
кнопки Обновить базу данных) до установки дополнительных библиотек.

Библиотеки, для которых еще не были скомпилированы данные, помечаются знаком ! . Если база данных
среды еще не скомпилирована, рядом с ней также отображается знак ! в основном списке среды.

См. также
Управление окружениями Python в Visual Studio
Выбор интерпретатора для проекта
Использование файла requirements.txt для зависимостей
Пути поиска
Настройка веб-приложений Python для IIS
21.10.2020 • 8 minutes to read • Edit Online

При использовании служб IIS в качестве веб-сервера на компьютере под управлением Windows (включая
виртуальные машины Windows в Azure) приложения Python должны содержать специальные параметры в
файлах web.config, чтобы служба IIS могла правильно выполнить код Python. На самом компьютере также
нужно установить интерпретатор Python вместе со всеми пакетами, необходимыми для веб-приложения.

NOTE
Эта статья ранее содержала руководство по настройке приложений Python в службе приложений Azure на базе
Windows. Теперь расширения Python и узлы Windows, использованные в таком сценарии, не рекомендуются к
применению. Вместо них следует использовать службу приложений Azure на базе Linux. Дополнительные
сведения см. в статье о публикации приложений Python в службе приложений Azure (Linux). Предыдущая статья
по-прежнему доступна под заголовком Работа с Python в Службе приложений Azure.

Установка Python в Windows


Чтобы запустить веб-приложение, сначала установите нужную версию интерпретатора Python
непосредственно на рабочий компьютер, как описано в этой статье.

Запомните расположение интерпретатора python.exe . Он потребуется в дальнейшем. Для удобства это


расположение можно добавить в переменную среды PATH.

Установка пакетов
Если вы используете выделенный узел, можно запускать приложение в глобальном окружении Python, не
создавая виртуальное окружение. Вы можете установить все зависимости приложения в глобальное
окружение. Для этого достаточно ввести команду pip install -r requirements.txt в командной строке.

Указание интерпретатора Python в файле web.config


Файл web.config вашего приложения содержит сведения для веб-сервера IIS (версии 7 и более поздней
версии), работающего в ОС Windows, о том, как обрабатывать запросы для приложения Python с помощью
обработчика FastCGI или HttpPlatform (рекомендуется). Visual Studio 2015 и более ранних версий вносит эти
изменения автоматически. При использовании Visual Studio 2017 и более поздних версий нужно изменить
файл web.config вручную.

Настройка обработчика HttpPlatform


Модуль HttpPlatform передает подключения через сокет напрямую в автономный процесс Python. Такая
сквозная передача позволяет запускать нужный веб-сервер, но требует выполнения скрипта запуска на
локальном веб-сервере. Укажите скрипт в элементе <httpPlatform> файла web.config, где атрибут
processPath указывает на интерпретатор Python для расширения сайта, а атрибут arguments указывает
скрипт и содержит все аргументы для него:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="PythonHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified"/>
</handlers>
<httpPlatform processPath="c:\python36-32\python.exe"
arguments="c:\home\site\wwwroot\runserver.py --port %HTTP_PLATFORM_PORT%"
stdoutLogEnabled="true"
stdoutLogFile="c:\home\LogFiles\python.log"
startupTimeLimit="60"
processesPerApplication="16">
<environmentVariables>
<environmentVariable name="SERVER_PORT" value="%HTTP_PLATFORM_PORT%" />
</environmentVariables>
</httpPlatform>
</system.webServer>
</configuration>

Показанная здесь переменная среды HTTP_PLATFORM_PORT содержит порт , который должен прослушивать
локальный сервер для соединений от localhost. Этот пример также показывает , как при необходимости
создать другую переменную среды, в данном случае это SERVER_PORT .

Настройка обработчика FastCGI


FastCGI — это интерфейс, работающий на уровне запроса. Службы IIS принимают входящие подключения и
перенаправляют каждый запрос в приложение WSGI, работающее в одном или нескольких сохраняемых
процессах Python.

Для использования этого обработчика сначала установите и настройте пакет wfastcgi, как описано на
странице pypi.org/project/wfastcgi/.

Далее измените файл web.config своего приложения, указав полные пути к файлам python.exe и wfastcgi.py
в ключе PythonHandler . Для выполнения описанных ниже инструкций нужно, чтобы интерпретатор Python
был установлен в папке c:\python36-32, а код приложения находился в папке c:\home\site\wwwroot.
Укажите соответствующие пути:

1. Измените запись PythonHandler в файле web.config таким образом, чтобы путь соответствовал папке,
где установлен Python. Точные сведения см. в справочнике по настройке IIS (iis.net).

<system.webServer>
<handlers>
<add name="PythonHandler" path="*" verb="*" modules="FastCgiModule"
scriptProcessor="c:\python36-32\python.exe|c:\python36-32\wfastcgi.py"
resourceType="Unspecified" requireAccess="Script"/>
</handlers>
</system.webServer>

2. В разделе <appSettings> файла web.config добавьте ключи WSGI_HANDLER , WSGI_LOG (не обязательно)
и PYTHONPATH :

<appSettings>
<add key="PYTHONPATH" value="c:\home\site\wwwroot"/>
<!-- The handler here is specific to Bottle; see the next section. -->
<add key="WSGI_HANDLER" value="app.wsgi_app()"/>
<add key="WSGI_LOG" value="c:\home\LogFiles\wfastcgi.log"/>
</appSettings>

Эти значения <appSettings> доступны для вашего приложения в качестве переменных среды:
Значение PYTHONPATH можно свободно расширить, однако оно должно включать корень
приложения.
WSGI_HANDLER должен указывать на приложение WSGI, импортируемое из приложения.
WSGI_LOG является необязательным, но рекомендуется для отладки приложения.
3. Задайте запись WSGI_HANDLER в файле web.config в соответствии с используемой платформой:

Bottle. Обязательно используйте скобки после app.wsgi_app , как показано ниже. Это
необходимо, так как объект является функцией (см. app.py), а не переменной.

<!-- Bottle apps only -->


<add key="WSGI_HANDLER" value="app.wsgi_app()"/>

Flask : измените значение на <project_name>.app , где <project_name>


WSGI_HANDLER
соответствует имени проекта. Узнать точный идентификатор можно в операторе
from <project_name> import app в файле runserver.py. Например, если проект имеет имя
FlaskAzurePublishExample, эта запись будет выглядеть так:

<!-- Flask apps only: change the project name to match your app -->
<add key="WSGI_HANDLER" value="flask_iis_example.app"/>

Django : для проектов Django необходимо внести два изменения в файл web.config. Во-первых,
измените значение WSGI_HANDLER на django.core.wsgi.get_wsgi_application() (объект находится
в файле wsgi.py).

<!-- Django apps only -->


<add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()"/>

Во-вторых, добавьте следующую запись под записью WSGI_HANDLER , заменив


DjangoAzurePublishExample на имя проекта:

<add key="DJANGO_SETTINGS_MODULE" value="django_iis_example.settings" />

4. Только для приложений Django : в файле settings.py проекта Django добавьте домен URL-адреса
вашего сайта или его IP-адрес в параметр ALLOWED_HOSTS , как показано ниже, заменив "1.2.3.4" своим
URL-адресом или IP-адресом:

# Change the URL or IP address to your specific site


ALLOWED_HOSTS = ['1.2.3.4']

Если не добавить URL-адрес в массив, возникнет ошибка Запрещенный узел в / Недопустимый


заголовок HTTP_HOST: "<site URL>". Возможно, необходимо добавить "<site URL>" в
ALLOWED_HOSTS.
Обратите внимание, что, если массив пуст , Django автоматически разрешает localhost и "127.0.0.1". Но
при добавлении URL-адреса рабочего развертывания эта возможность становится недоступной.
Поэтому, возможно, потребуется создать отдельные копии settings.py для разработки и рабочей
среды или использовать переменные среды, чтобы контролировать значения времени выполнения.

Развертывание в службах IIS или на виртуальной машине Windows


При наличии правильно составленного файла web.config в вашем проекте вы можете опубликовать его на
компьютере, где запущены службы IIS, воспользовавшись командой Опубликовать в контекстном меню
проекта на вкладке Обозреватель решений и указав целевой объект — IIS, FTP и т. п. В этом случае
Visual Studio просто скопирует файлы проекта на сервер. Настройку сервера вам необходимо выполнить
самостоятельно.
Редактирование кода Python
21.10.2020 • 19 minutes to read • Edit Online

Так как при разработке вы много работаете в редакторе кода, поддержка Python в Visual Studio
предоставляет соответствующие функции для повышения продуктивности этой работы. К ним относится
выделение синтаксиса IntelliSense, автозавершение, справка по сигнатурам, переопределения методов, а
также поиск и навигация.

Редактор также интегрируется с интерактивным окном в Visual Studio, упрощая обмен кодом между
ними. Подробные сведения см. в разделах Учебник, шаг 3. Использование интерактивного окна REPL и
Использование интерактивного окна. Команда "Отправить в интерактивное окно".

Общие сведения о редактировании кода в Visual Studio см. в статье Возможности редактора кода.
Ознакомьтесь также со статьей Структура, чтобы узнать, как сконцентрироваться на определенных
разделах кода.

Кроме того, с помощью обозревателя объектов Visual Studio (Вид > Другие окна > Обозреватель
объектов или клавиши CTRL +W > J ) вы можете проверять классы Python, определенные в каждом
модуле, и функции, определенные в этих классах.

технология IntelliSense
Технология IntelliSense предоставляет следующие возможности: автозавершения, справка по сигнатурам,
вывод кратких сведений и цветовая маркировка синтаксиса. Visual Studio 2017 версии 15.7 и более поздней
также поддерживает подсказки по типам.

Для улучшения производительности функция IntelliSense в Visual Studio 2017 версии 15.5 и более ранних
учитывает базу данных завершения, которая создается для каждого окружения Python в проекте. После
добавления, удаления или обновления пакетов может потребоваться обновить базы данных. Их состояние
отображается в окне Окружения Python (элемент того же уровня, что и обозреватель решений) на
вкладке IntelliSense (см. дополнительные сведения об окне "Окружения").

Visual Studio 2017 версии 15.6 и более поздних разными способами предоставляет функцию завершения
IntelliSense, которая не зависит от базы данных.
Автозавершения
Автозавершения отображаются как операторы, идентификаторы и другие атрибуты, которые можно
ввести в текущее расположение в редакторе. Автозавершения, отображаемые в списке, основываются на
контексте, а также фильтруются для пропуска неправильных или ненужных параметров. Они часто
инициируются при вводе различных инструкций (например, import ) и операторов (включая точку). Но их
также можно отобразить в любое время, нажав клавиши CTRL +J > ПРОБЕЛ.

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


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

ввод букв, которые находятся не в начале имени, например parse для поиска argparse;
ввод букв, которые находятся только в начале слов, например abc для поиска AbstractBaseClass или air
для поиска as_integer_ratio;
пропуск букв, например b64 для поиска base64.

Некоторые примеры.

Завершения элементов автоматически отображаются при вводе точки после переменной или значения.
Вместе с ними отображаются методы и атрибуты потенциальных типов. Если переменная может быть
нескольких типов, в списке содержатся все возможные варианты для всех типов с дополнительными
сведениями для указания типов, поддерживающих каждое автозавершение. Если автозавершение
поддерживается всеми возможными типами, оно отображается без заметки.

Элементы, которые начинаются и заканчиваются двумя символами подчеркивания, не отображаются по


умолчанию. В общем случае к таким элементам не следует обращаться напрямую. Если же элемент нужен,
введя два начальных символа подчеркивания, можно добавить эти завершения в список:
Операторы import и from ... import отображают список модулей, которые можно импортировать. При
использовании from ... import список содержит элементы, которые можно импортировать из указанного
модуля.

При использовании операторов raise и except отображаются списки классов, которые могут быть
типами ошибок. При этом необязательно выводятся все определяемые пользователем исключения, но с их
помощью можно быстро найти подходящие встроенные исключения.

При вводе символа @ запускается декоратор и отображаются потенциальные декораторы. Многие из этих
элементов невозможно использовать в качестве декораторов. Чтобы определить, какие именно из них
следует использовать, обратитесь к документации по библиотеке.

TIP
Вы можете настроить поведение автозавершений, выбрав Инструменты > Параметры > Текстовый ред актор
> Python > Дополнительно. Параметр Фильтрация списка по поисковой строке позволяет применить
фильтрацию предложений автозавершения при вводе (флажок установлен по умолчанию), а при выборе
параметра Завершение членов отображает пересечение членов отображаются только те автозавершения,
которые поддерживают все возможные типы (флажок снят по умолчанию). См. раздел Параметры. Результаты
завершения.

Подсказки по типам
Visual Studio 2017 версии 15.7 и более поздней.
Подсказки по типам в Python 3.5+ (PEP 484 (python.org) — это синтаксис аннотаций для функций и классов,
который указывает на типы аргументов, возвращаемых значений и атрибутов класса. IntelliSense
отображает подсказки по типам при наведении курсора на вызовы функций, аргументы и переменные с
этими аннотациями.
В следующем примере класс Vector объявлен как List[float] , и функция scale содержит подсказки по
типам для аргументов и возвращаемого значения. При наведении указателя на вызов этой функции
отображаются следующие подсказки по типам:

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

Полезно проверять подсказки по типам на протяжении проекта, поскольку ошибки обычно не возникают
до выполнения. Для этой цели Visual Studio интегрирует стандартное средство MyPy через команду
контекстного меню Python > Run Mypy в обозревателе решений:

При запуске команды отображается запрос на установку пакета mypy при необходимости. Затем Visual
Studio запускает mypy для проверки подсказок по типам в каждом файле Python в проекте. Ошибки
отображаются в окне Список ошибок в Visual Studio. При выборе элемента в окне вы перейдете к
соответствующей строке в коде.

Приведем простой пример. Следующее определение функции содержит подсказку по типам, указывая на
то, что аргумент input имеет тип str , тогда как вызов этой функции пытается передать целое число:
def commas_to_colons(input: str):
items = input.split(',')
items = [x.strip() for x in items]
return ':'.join(items)

commas_to_colons(1)

Использование команды Run Mypy в этом коде вызывает следующую ошибку:

TIP
В версиях Python, предшествующих 3.5, в Visual Studio также отображаются подсказки по типам, которые вы
предоставляете через файлы-заглушки ( .pyi). Файлы заглушки можно использовать всякий раз, когда вы не хотите
включать подсказки по типам в код напрямую или необходимо создать подсказки по типам для библиотеки,
которая не использует их напрямую. Дополнительные сведения см. в разделе Создание заглушек для модулей
Python на вики-сайте проекта mypy.
В настоящее время Visual Studio не поддерживает подсказки по типам в комментариях.

TIP
В версиях Python, предшествующих 3.5, в Visual Studio также отображаются подсказки по типам, которые вы
предоставляете через файлы-заглушки ( .pyi). Файлы заглушки можно использовать всякий раз, когда вы не хотите
включать подсказки по типам в код напрямую или необходимо создать подсказки по типам для библиотеки,
которая не использует их напрямую. Дополнительные сведения см. в разделе Создание заглушек для модулей
Python на вики-сайте проекта mypy.
Visual Studio содержит набор пакетов файлов Typeshed для Python 2 и 3, поэтому нет необходимости скачивать их
отдельно. Но если вы хотите использовать другой набор файлов, можно указать путь в меню Сред ства >
Параметры > Python > Языковой сервер. См. статью Параметры для Python в Visual Studio.

В настоящее время Visual Studio не поддерживает подсказки по типам в комментариях.

Справка по сигнатурам
Во время написания кода, вызывающего функцию, при вводе открывающейся скобки ( отображается
справка по сигнатурам, а также доступные сведения о параметрах и документации. Ее также можно
отобразить внутри вызова функции, нажав клавиши CTRL +SHIFT +ПРОБЕЛ. Хотя отображаемые сведения
определяются строками документации в исходном коде функции, они содержат любые значения по
умолчанию.
TIP
Чтобы отключить справку по сигнатурам, выберите Инструменты > Параметры > Текстовый ред актор >
Python > Общие и снимите флажок Завершение операторов > Свед ения о параметрах.

Вывод кратких сведений


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

Цветовая маркировка синтаксиса


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

Чтобы настроить цвета, выберите Инструменты > Параметры > Среда > Шрифты и цвета и
измените записи Python в списке Отображение элементов.
TIP
Чтобы отключить цветовую маркировку синтаксиса, выберите Инструменты > Параметры > Текстовый
ред актор > Python > Дополнительно и снимите флажок Разные параметры > Имена цветов по типам.
См. раздел Параметры. Прочие параметры.

Фрагменты кода
Фрагменты кода — это блоки, которые можно вставлять в файлы. Для этого введите сочетание клавиш и
нажмите клавишу TAB или выберите команду Изменить > IntelliSense > Вставить фрагмент кода и
Разместить во фрагменте , выберите Python , а затем нужный фрагмент кода.

Например, class является ярлыком для фрагмента кода, который вставляет определение класса. Вот
фрагмент кода, который отображается в списке автоматического завершения при вводе class :

Если нажать клавишу TAB , будет создана остальная часть класса. Можно ввести имя и список базовых
классов, перемещаясь между выделенными полями с помощью клавиши TAB , а затем нажав клавишу ВВОД,
чтобы начать ввод текста.

Команды меню
При использовании команды меню Правка > IntelliSense > Вставить фрагмент кода сначала
выберите Python , а затем — фрагмент кода:
Команда Правка > IntelliSense > Разместить во фрагменте точно так же помещает текущий
выделенный фрагмент в текстовый редактор внутри выбранного структурного элемента. Предположим, у
вас есть небольшой фрагмент кода:

sum = 0
for x in range(1, 100):
sum = sum + x

Если выбрать этот код и команду Разместить во фрагменте , откроется список доступных фрагментов.
Если выбрать def в списке, выбранный код будет помещен в определение функции. Вы сможете
переходить между выделенным именем функции имя и аргументами с помощью клавиши TAB :

Просмотр доступных фрагментов кода


Доступные фрагменты кода можно просмотреть в диспетчере фрагментов кода . Чтобы открыть его,
выберите пункт меню Инструменты > Диспетчер фрагментов кода и выберите Python в качестве
языка:

Сведения о том, как создать собственные фрагменты кода, см. в статье Пошаговое руководство. Создание
фрагмента кода.
Если вы написали качественный фрагмент кода, к которому вы хотите предоставить общий доступ,
разместите его в репозитории и сообщите нам. Возможно, мы сможем включить его в следующий выпуск
Visual Studio.

Навигация по коду
Поддержка Python в Visual Studio предоставляет несколько вариантов для быстрой навигации по коду, а
также по библиотекам с доступным исходным кодом: Панель навигации, Перейти к определению ,
Перейти к и Найти все ссылки. Можно также использовать обозреватель объектов Visual Studio.

Панель переходов
Панель навигации отображается в верхней части каждого окна редактора и содержит двухуровневый
список определений. Раскрывающийся список слева содержит определения классов и функций верхнего
уровня в текущем файле. Раскрывающийся список справа отображает список определений в области,
расположенной слева. При перемещении курсора в редакторе эти списки обновляются для отображения
текущего контекста, при этом из них можно напрямую перейти к нужной записи.

TIP
Чтобы скрыть панель навигации, выберите Инструменты > Параметры > Текстовый ред актор > Python >
Общие и снимите флажок Параметры > Панель навигации.

Перейти к определению
Команда Перейти к определению позволяет быстро перейти от использования идентификатора
(например, имени функции, класса или переменной) к определению в исходном коде. Ее можно вызвать,
щелкнув правой кнопкой мыши идентификатор и выбрав Перейти к определению или поместив
курсор внутрь этого идентификатора и нажав клавишу F12 . Эта команда работает в коде и внешних
библиотеках, если исходный код доступен. Если исходный код библиотеки недоступен, команда Перейти
к определению переходит к соответствующему оператору import для ссылки на модуль или
отображает ошибку.
Функция "Перейти к"
Команда Правка > Перейти к (CTRL + , ) позволяет отобразить поле поиска в редакторе, где можно
ввести любую строку и увидеть возможные совпадения в коде, определяющем функцию, класс или
переменную. Она обеспечивает те же возможности, что и команда Перейти к определению , но без
необходимости искать, где используется идентификатор.

Чтобы перейти к определению этого идентификатора, дважды щелкните любое имя или выберите его с
помощью клавиш со стрелками и клавиши ВВОД.

Найти все ссылки


Найти все ссылки — это удобная команда для обнаружения, где используется и определен нужный
идентификатор, включая операции импорта и назначения. Ее можно вызвать, щелкнув правой кнопкой
мыши идентификатор и выбрав пункт Найти все ссылки или поместив курсор внутри этого
идентификатора и нажав клавиши SHIFT +F12 . Чтобы перейти к расположению элемента, нужно дважды
щелкнуть его в списке.

См. также раздел


Форматирование
Рефакторинг
Использование анализатора кода
Форматирование кода Python
21.10.2020 • 5 minutes to read • Edit Online

Visual Studio позволяет быстро переформатировать код в соответствии с предварительно настроенными


параметрами форматирования.

Чтобы форматировать выделенный фрагмент , выберите Правка > Дополнительно >


Форматирование выделения или нажмите клавиши CTRL +E > F .
Чтобы форматировать весь файл, выберите Правка > Дополнительно > Форматирование
документа или нажмите клавиши CTRL +E > D .

Параметры задаются в разделе Сервис > Параметры > Текстовый редактор > Python >
Форматирование и на вложенных вкладках. Для отображения параметров установите флажок Show all
settings (Показать все параметры):

Параметры форматирования по умолчанию задаются в соответствии с расширенным набором указаний


руководства по стилю PEP 8. Вкладка Общие позволяет определить, когда применяется форматирование.
Остальные три вкладки описаны в этой статье.

Кроме того, благодаря поддержке Python в Visual Studio в меню Правка > Дополнительно добавлена
полезная команда Заполнить абзац комментариев.

Интервал
Элементы управления в разделе Интервал определяют , нужно ли вставлять и (или) удалять пробелы в
различных языковых конструкциях. Каждый параметр имеет три возможных значения.

Флажок установлен: пробелы всегда применяются.


Флажок снят : пробелы всегда удаляются.
Неопределенное состояние: сохраняется установленное форматирование.

В следующих таблицах приведены примеры для различных параметров:


ПАРАМЕТР ОПРЕДЕЛЕНИЯ КЛАССА ПОМЕЧЕНО ФЛАЖОК СНЯТ

Вставлять пробелы межд у class X (object): pass class X(object): pass


именем и списком базовых
классов в объявлении класса

Вставлять пробелы внутри class X( object ): pass class X(object): pass


скобок списка баз

Вставлять пробелы внутри class X( ): pass class X(): pass


скобок пустого списка баз

ПАРАМЕТР ОПРЕДЕЛЕНИЯ ФУНКЦИЙ ПОМЕЧЕНО ФЛАЖОК СНЯТ

Вставлять пробелы межд у def X (): pass def X(): pass


именем и списком параметров в
объявлении функции

Вставлять пробелы внутри def X( a, b ): pass def X(a, b): pass


скобок списка параметров

Вставлять пробелы внутри def X( ): pass def X(): pass


скобок пустого списка
параметров

Вставлять пробелы вокруг "=" в includes X(a = 42): pass includes X(a=42): pass
значениях параметров по
умолчанию

Вставлять пробелы д о и после includes X() -> 42: pass includes X()->42: pass
операторов возвращения
заметок

ПАРАМЕТР ОПЕРАТОРОВ ПОМЕЧЕНО ФЛАЖОК СНЯТ

Вставлять пробелы вокруг a + b a+b


д воичных операторов

Вставлять пробелы вокруг a = b a=b


назначений

ПАРАМЕТР ИНТЕРВАЛОВ ДЛЯ


ВЫРАЖЕНИЙ ПОМЕЧЕНО ФЛАЖОК СНЯТ

Вставлять пробелы межд у X () X()


именем и списком аргументов
вызова функции

Вставлять пробел межд у X( ) X()


скобками в пустом списке
аргументов
ПАРАМЕТР ИНТЕРВАЛОВ ДЛЯ
ВЫРАЖЕНИЙ ПОМЕЧЕНО ФЛАЖОК СНЯТ

Вставлять пробелы в списке X( a, b ) X(a, b)


аргументов

Вставлять пробелы внутри ( a ) (a)


скобок выражения

Вставлять пробелы внутри ( ) ()


скобок пустого кортежа

Вставлять пробелы внутри ( a, b ) (a, b)


скобок кортежа

Вставлять пробел межд у [ ] []


пустыми квад ратными скобками

Вставлять пробелы межд у [ a, b ] [a, b]


квад ратными скобками списков

Вставлять пробел перед x [i] x[i]


открывающей квад ратной
скобкой

Вставлять пробел межд у x[ i ] x[i]


квад ратными скобками

Операторы
Параметры в разделе Операторы управляют автоматическим изменением некоторых операторов в более
привычные для Python форматы.

ПАРАМЕТР ДО ФОРМАТИРОВАНИЯ ПОСЛЕ ФОРМАТИРОВАНИЯ

Размещать импортированные import sys, pickle import sys


мод ули в новой строке import pickle

Уд алять лишние точки с x = 42; x = 42


запятой

Размещать множество x = 42; y = 100 x = 42


операторов на новых строках y = 100

Перенос по словам
Перенос по словам позволяет задать параметр Максимальная ширина комментария (по
умолчанию — 80). При заданном параметре Переносить слишком широкие комментарии Visual
Studio переформатирует комментарии так, чтобы выходить за пределы максимальной ширины.
# Wrapped to 40 columns
# There should be one-- and preferably
# only one --obvious way to do it.

# Not-wrapped:
# There should be one-- and preferably only one --obvious way to do it.

Команда "Заполнение параграфа комментария"


Команда Правка > Дополнительно > Заполнить абзац комментариев (вызывается клавишами
CTRL +E > P ) изменяет форматирование текста заметки, объединяя короткие строки и разбивая слишком
длинные.

Пример:

# foo
# bar
# baz

изменяется на:

# foo bar baz

# This is a very long long long long long long long long long long long long long long long long long long
long comment

изменяется на:

# This is a very long long long long long long long long long long long long
# long long long long long long long comment
Рефакторинг кода Python
21.10.2020 • 6 minutes to read • Edit Online

Visual Studio предлагает несколько команд для автоматического преобразования и очистки исходного
кода Python.

Переименовать — переименовывает указанный класс, метод или переменную.


Извлечение метода — создает новый метод из выбранного фрагмента кода.
Добавление импорта — предоставляет смарт -тег для добавления отсутствующего импорта.
Удаление неиспользуемых инструкций import — удаляет неиспользуемые операции импорта.

Переименовать
1. Щелкните правой кнопкой мыши идентификатор, который нужно переименовать, и выберите
команду Переименовать или поместите курсор на идентификатор и выберите команду меню
Правка > Рефакторинг > Переименовать (F2 ).

2. В окне Переименовать введите новое имя для выбранного идентификатора и нажмите кнопку ОК.

3. В следующем диалоговом окне выберите файлы и экземпляры, к которым следует применить


переименование. Здесь можно выбрать любой отдельный экземпляр для предварительного
просмотра конкретных изменений:

4. Нажмите Применить, чтобы внести изменения в файлы исходного кода. (Это действие невозможно
отменить.)
Извлечение метода
1. Выберите строки кода или выражение, из которых хотите создать отдельный метод.
2. Выберите команду меню Правка > Рефакторинг > Извлечь метод или нажмите клавиши
CTRL +R > M .
3. В открывшемся диалоговом окне введите имя для нового метода, укажите место для его создания и
выберите переменные для закрытия. Переменные, которые не будут выбраны для закрытия,
преобразуются в аргументы метода:

4. Нажмите кнопку ОК, и код будет изменен соответствующим образом:

Добавление импорта
При наведении курсора на идентификатор, для которого отсутствует информация о типе, Visual Studio
предоставляет смарт -тег (значок лампочки слева от кода). Если его щелкнуть, можно выполнить команды
для добавления необходимого оператора import или from ... import :
Visual Studio предоставляет завершения import для модулей и пакетов верхнего уровня в текущем
проекте и стандартной библиотеке. Visual Studio также предоставляет завершения from ... import для
подмодулей и подпакетов, а также элементов модуля. В эти завершения входят функции, классы и
экспортированные данные. Если вы выберете любой из вариантов, будет добавлена соответствующая
инструкция в верхней части файла, сразу после других инструкций import или внутри существующей
инструкции from ... import , если указанный модуль уже импортирован.

Visual Studio старается отфильтровать те члены, которые не определены в самом модуле, например
модули, импортированные в другой модуль, но не являющиеся дочерними для модуля, выполняющего
импорт. Например, во многих модулях используется import sys вместо from xyz import sys , поэтому
отсутствует вариант завершения для импорта sys из других модулей, даже если в них нет элемента
__all__ , исключающего sys .

Аналогичным образом Visual Studio фильтрует функции, импортированные из других модулей или из
встроенного пространства имен. Например, если модуль импортирует функцию settrace из модуля sys ,
теоретически вы вправе импортировать ее из этого модуля. Но гораздо лучше напрямую использовать
import settrace from sys , поэтому Visual Studio предлагает добавить именно такую инструкцию.

И, наконец, если некоторая сущность по общим признакам должна быть исключена из предложений, но
для нее существуют другие значения, которые обычно следует включить в список (например, если в
модуле этому имени присваивается значение), Visual Studio все равно исключает импорт из предложений.
Такое поведение основано на предположении, что рассматриваемая сущность не должна
импортироваться, поскольку определена в другом модуле. При этом дополнительное назначение
считается фиктивным и не подлежащим экспорту.

Удаление неиспользуемых инструкций import


Нередко получается так, что в коде сохраняются инструкции import для модулей, которые вообще не
используются. Visual Studio анализирует код и может автоматически определить, нужна ли в нем
инструкция import , изучив использование импортированного имени во всех областях ниже той, где
встречается эта инструкция.

Щелкните правой кнопкой мыши в любом месте редактора и выберите команду Удалить пакеты
импорта , которая позволяет выполнить их удаление из всех областей или только из текущей
области:
Visual Studio внесет соответствующие изменения в код:

Обратите внимание, что Visual Studio не учитывает поток управления. Если имя указано в коде до
оператора import , это все равно рассматривается как использование имени. Кроме того, Visual Studio
игнорирует все операции импорта from __future__ , а также выполняемые внутри определения класса и из
инструкций from ... import * .
Проверка кода Python с помощью PyLint
21.10.2020 • 3 minutes to read • Edit Online

Широко распространенное средство PyLint позволяет искать ошибки в коде Python и поощряет правильные
методы создания кода Python. Это средство интегрируется в проекты Python для Visual Studio.

Выполнить PyLint
Щелкните правой кнопкой мыши проект Python в обозревателе решений и выберите Python >
Выполнить PyLint :

При запуске этой команды вы увидите предложение установить PyLint в вашем окружении, если это еще не
сделано.

Предупреждения и ошибки PyLint отображаются в окне Список ошибок :

Дважды щелкнув ошибку, вы перейдете к тому участку исходного кода, в котором она возникла.
TIP
В разделе документации по функциям PyLint вы можете найти полный список исходящих сообщений PyLint.

Настройка параметров командной строки PyLint


В разделе документации PyLint, посвященном параметрам командной строки, описывается управление
поведением PyLint с помощью файла конфигурации .pylintrc. Этот файл можно разместить в корне проекта
Python в Visual Studio или в другом месте в зависимости от того, где нужно применять эти параметры
(подробные сведения см. в описании параметров командной строки).
Например, с помощью файла .pylintrc можно отключить для проекта предупреждения "отсутствует
docstring", представленное на изображении выше. Для этого сделайте следующее:
1. В командной строке перейдите в корневой каталог проекта (где находится файл .pyproj) и
выполните следующую команду, чтобы создать файл конфигурации с заметками:

pylint --generate-rcfile > .pylintrc

2. В обозревателе решений Visual Studio щелкните проект правой кнопкой мыши, выберите Добавить
> Существующий элемент , затем найдите и выберите только что созданный файл .pylintrc и
выберите команду Добавить.

3. Откройте файл для редактирования. Он содержит различные параметры, с которыми можно


работать. Чтобы отключить это предупреждение, найдите раздел [MESSAGES CONTROL] и параметр
disable в нем. Там находится длинная строка специальных сообщений, к которым можно добавить
любые другие предупреждения. В нашем примере следует добавить ,missing-docstring (включая
запятую-разделитель).

4. Сохраните файл .pylintrc, снова запустите PyLint и убедитесь, что предупреждения больше не
появляются.

TIP
Для использования файла .pylintrc из сетевой папки создайте переменную среды с именем PYLINTRC и присвойте
ей в качестве значения имя файла в сетевой папке с указанием UNC-пути или буквы подключенного диска.
Например, PYLINTRC=\\myshare\python\.pylintrc .
Определение пользовательских команд для
проектов Python
21.10.2020 • 23 minutes to read • Edit Online

В процессе работы с проектами Python вам может потребоваться переключиться в командное окно для
выполнения определенных скриптов или модулей, команд pip или запуска другого произвольного средства.
Чтобы улучшить рабочий процесс, можно добавить пользовательские команды в подменю Python внутри
контекстного меню проекта Python. Эти команды можно выполнять в окне консоли или в окне вывода
Visual Studio. Кроме того, вы можете использовать регулярные выражения, чтобы сообщить Visual Studio,
как анализировать ошибки и предупреждения из выходных данных команды.

По умолчанию это меню содержит только одну команду Выполнить PyLint :

В этом же контекстном меню отображаются пользовательские команды. Пользовательские команды


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

Некоторые шаблоны проектов Python в Visual Studio уже добавляют собственные команды посредством
своего файла TARGETS . Например, шаблоны "Веб-проект Bottle" и "Веб-проект Flask" добавляют две команды
— Запуск сервера и Запустить сервер отладки. Шаблон "Веб-проект Django" добавляет как эти две
команды, так и многие другие:
Каждая пользовательская команда может ссылаться на файл Python, модуль Python, встроенный код Python,
произвольный исполняемый файл или команду pip. Вы можете указать, как и где выполняется команда.

TIP
При внесении изменений в файл проекта в текстовом редакторе нужно перезагрузить проект в Visual Studio, чтобы
применить эти изменения. Например, нужно перезагрузить проект после добавления определений
пользовательских команд, чтобы эти команды отображались в контекстном меню проекта.

Как вы знаете, Visual Studio предоставляет средства для редактирования файлов проекта напрямую. Щелкните
правой кнопкой мыши файл проекта и выберите команду Выгрузить проект, а затем снова щелкните правой
кнопкой и выберите Изменить <project-name> , чтобы открыть проект в редакторе Visual Studio. После этого
внесите и сохраните изменения, еще раз щелкните проект правой кнопкой мыши и выберите Перезагрузить
проект, после чего вам будет предложено подтвердить закрытие файла проекта в редакторе.

Однако при разработке пользовательской команды эти действия могут утомлять пользователя. Чтобы повысить
эффективность работы, загрузите проект в Visual Studio и параллельно откройте файл PYPROJ в отдельном
редакторе (например, в другом экземпляре Visual Studio, Visual Studio Code, Блокноте и т. д.). Когда вы сохраняете
изменения в редакторе и переключаетесь в Visual Studio, Visual Studio обнаруживает изменения и предлагает
перезагрузить проект (Проект <name> был изменен вне сред ы. ). Выберите Перезагрузить, чтобы сразу же
применить внесенные изменения за одно действие.

Пошаговое руководство. Добавление команды в файл проекта


Для ознакомления с пользовательскими командами в этом разделе рассматривается простой пример, в
котором файл запуска проекта выполняется напрямую с помощью python.exe. (Такая команда фактически
аналогична использованию команды Отладка > Запуск без отладки.)

1. Создайте проект с именем Python-CustomCommands, используя шаблон Приложение Python . (Если


вы еще не знакомы с этой процедурой, см. инструкции в статье Краткое руководство. Создание
проекта Python из шаблона.)

2. В Python_CustomCommands.py добавьте код print("Hello custom commands") .


3. Щелкните проект правой кнопкой мыши в обозревателе решений, выберите Python и обратите
внимание, что в подменю отображается только команда Выполнить PyLint . В этом же подменю
отображаются и ваши пользовательские команды.

4. Откройте Python-CustomCommands.pyproj в отдельном текстовом редакторе, как описано во


введении. Добавьте следующие строки в конец файла внутри прямо перед закрывающим </Project>
и сохраните файл.

<PropertyGroup>
<PythonCommands>
$(PythonCommands);
</PythonCommands>
</PropertyGroup>

5. Вернитесь в Visual Studio и выберите Перезагрузить при выводе запроса об изменении файла. Затем
проверьте меню Python еще раз и убедитесь, что единственным элементом там по-прежнему
является команда Выполнить PyLint , так как добавленные строки просто реплицируют группу
свойств по умолчанию <PythonCommands> , содержащую команду PyLint.

6. Переключитесь в редактор с файлом проекта и добавьте следующее определение <Target> после


<PropertyGroup> . Как описано далее в этой статье, этот элемент Target определяет
пользовательскую команду для выполнения файла запуска (определяется свойством StartupFile) с
помощью python.exe в окне консоли. Атрибут ExecuteIn="consolepause" использует консоль, которая
ожидает нажатия клавиши перед закрытием.

<Target Name="Example_RunStartupFile" Label="Run startup file" Returns="@(Commands)">


<CreatePythonCommandItem
TargetType="script"
Target="$(StartupFile)"
Arguments=""
WorkingDirectory="$(MSBuildProjectDirectory)"
ExecuteIn="consolepause">
<Output TaskParameter="Command" ItemName="Commands" />
</CreatePythonCommandItem>
</Target>

7. Добавьте значение атрибута Name Target в добавленную ранее группу свойств <PythonCommands> ,
чтобы элемент выглядел аналогично приведенному ниже коду. Добавление имени целевого объекта
в этот список — это фактически и добавление его в меню Python .

<PythonCommands>
$(PythonCommands);
Example_RunStartupFile
</PythonCommands>

Чтобы команда отображалась перед командами, заданными в $(PythonCommands) , расположите их


перед этим токеном.

8. Сохраните файл проекта, перейдите в Visual Studio и перезагрузите проект при появлении запроса.
Затем щелкните проект Python-CustomCommands правой кнопкой мыши и выберите пункт Python .
В меню вы увидите элемент Run star tup file (Выполнить файл запуска). Если такой элемент в меню
отсутствует , убедитесь, что вы добавили это имя в элемент <PythonCommands> . См. также раздел
Устранение неполадок далее в этой статье.
9. Выберите команду Выполнить файл запуска , чтобы отобразить командное окно с текстом Hello
custom commands (Знакомство с пользовательскими командами) и запросом Press any key to
continue (Для продолжения нажмите любую клавишу). Нажмите любую клавишу, чтобы закрыть
окно.

10. Вернитесь в редактор с файлом проекта и измените значение атрибута ExecuteIn на output .
Сохраните файл, перейдите в Visual Studio, перезагрузите проект и вызовите эту команду снова. На
этот раз выходные данные программы отображаются в окне Вывод Visual Studio:

11. Чтобы добавить дополнительные команды, определите для каждой из них подходящий элемент
<Target> , добавьте имя целевого объекта в группу свойств <PythonCommands> и перезагрузите проект в
Visual Studio.

TIP
Если вызвать команду , использующую свойства проекта, например ($StartupFile) , которая завершается с
ошибкой из-за неопределенного токена, Visual Studio отключает эту команду до перезагрузки проекта. Однако
внесение в проект изменений, определяющих это свойство, не обновляет состояние этих команд, поэтому в
подобных ситуациях все равно нужно перезагрузить проект.

Структура целевого объекта команды


Общая форма элемента <Target> показана в следующем псевдокоде:
<Target Name="Name1" Label="Display Name" Returns="@(Commands)">
<CreatePythonCommandItem Target="filename, module name, or code"
TargetType="executable/script/module/code/pip"
Arguments="..."
ExecuteIn="console/consolepause/output/repl[:Display name]/none"
WorkingDirectory="..."
ErrorRegex="..."
WarningRegex="..."
RequiredPackages="...;..."
Environment="...">

<!-- Output always appears in this form, with these exact attributes -->
<Output TaskParameter="Command" ItemName="Commands" />
</CreatePythonCommandItem>
</Target>

Чтобы сослаться на свойства проекта или переменные среды в значениях атрибутов, используйте имя в
токене $() , например $(StartupFile) и $(MSBuildProjectDirectory) . Дополнительные сведения см. в разделе
Свойства MSBuild.

Атрибуты Target
АТРИБУТ ОБЯЗАТЕЛЬНОЕ ЗНАЧЕНИЕ ОПИСАНИЕ

name Да Идентификатор для команды в


проекте Visual Studio. Это имя нужно
добавить в группу свойств
<PythonCommands> , чтобы команда
появилась в подменю Python.

Метка Да Отображаемое имя


пользовательского интерфейса,
отображаемое в подменю Python.

Возвращает Да Должен содержать @(Commands) ,


который идентифицирует целевой
объект как команду.

Атрибуты CreatePythonCommandItem
Все значения атрибутов указываются без учета регистра.

АТРИБУТ ОБЯЗАТЕЛЬНОЕ ЗНАЧЕНИЕ ОПИСАНИЕ


АТРИБУТ ОБЯЗАТЕЛЬНОЕ ЗНАЧЕНИЕ ОПИСАНИЕ

TargetType Да Указывает , что содержит атрибут


Target и как он используется вместе
с атрибутом Arguments:
executable . Запуск
исполняемого файла с
именем, указанным в Target, с
добавлением значения в
Arguments, как при вводе
непосредственно в командной
строке. Это значение должно
содержать только имя
программы без аргументов.
script . Запуск python.exe с
именем файла в Target, после
которого идет значение в
Arguments.
module . Запуск python -m ,
после которого идет имя
модуля в Target и значение в
Arguments.
code . Запуск встроенного
кода, содержащегося в Target.
Значение Arguments
игнорируется.
pip . Запуск pip с командой в
Target, после которого идет
Arguments; для ExecuteIn
задано значение output,
однако pip предполагает
команду install и
использует Target в качестве
имени пакета.

целевого объекта Да Имя файла, имя модуля, код или


команда pip, которые требуется
использовать, в зависимости от
TargetType.

Аргументы Необязательный Указывает строку аргументов (при


их наличии) для передачи целевому
объекту. Обратите внимание, что,
когда TargetType имеет значение
script , аргументы передаются
программе Python, а не python.exe.
Для TargetType code игнорируется.
АТРИБУТ ОБЯЗАТЕЛЬНОЕ ЗНАЧЕНИЕ ОПИСАНИЕ

ExecuteIn Да Определяет среду , в которой


выполняется команда:
console . Запускает Target и
аргументы, как при вводе
непосредственно в командной
строке (по умолчанию).
Командное окно
отображается при
выполнении Target, а затем
автоматически закрывается.
consolepause . То же, что и
console, но с ожиданием
нажатия клавиши перед
закрытием окна.
output . Запускает Target и
отображает результаты в
окне вывод а Visual Studio.
Если TargetType имеет
значение pip, Visual Studio
использует Target в качестве
имени пакета и добавляет
Arguments.
repl. Запускает Target в
интерактивном окне Python;
для заголовка окна
используется необязательное
отображаемое имя.
none : аналогичен console.

WorkingDirectory Необязательный Папка, в которой выполняется


команда.

ErrorRegex Необязательный Используется, только если ExecuteIn


WarningRegEx имеет значение output . Оба
значения указывают регулярное
выражение, с помощью которого
Visual Studio анализирует выходные
данные команды, чтобы отобразить
ошибки и предупреждения в окне
Список ошибок. Если значение не
указано, команда не затрагивает
окно Список ошибок.
Дополнительные сведения о том,
что ожидает Visual Studio, см. в
разделе Именованные группы записи.

RequiredPackages Необязательный Список требований к пакету для


команды, использующий тот же
формат , что и requirements.txt
(pip.readthedocs.io). Например,
команда Выполнить PyLint
указывает pylint>=1.0.0 . Перед
выполнением команды Visual Studio
проверяет , что установлены все
пакеты в списке. Для установки всех
отсутствующих пакетов Visual Studio
использует pip.
АТРИБУТ ОБЯЗАТЕЛЬНОЕ ЗНАЧЕНИЕ ОПИСАНИЕ

Среда Необязательный Строка с переменными среды,


которые нужно определить перед
выполнением команды. Каждая
переменная использует формат
<NAME>=<VALUE>, а для
разделения нескольких переменных
используется точка с запятой.
Переменная с несколькими
значениями должна быть заключена
в одинарные или двойные кавычки,
например
'имя=значение1;значение2'.

Именованные группы записи для регулярных выражений


При анализе ошибки и предупреждений из выходных данных команды Visual Studio ожидает , что
регулярные выражения в значениях ErrorRegex и WarningRegex используют следующие именованные
группы:

(?<message>...) . Текст ошибки.


(?<code>...) . Код ошибки
(?<filename>...) . Имя файла, для которого возникла ошибка.
(?<line>...) . Номер строки в файле, где произошла ошибка.
(?<column>...) . Номер столбца в файле, где произошла ошибка.

Например, PyLint выводит предупреждения в следующем виде:

************* Module hello


C: 1, 0: Missing module docstring (missing-docstring)

Чтобы разрешить Visual Studio извлечь правильную информацию из таких предупреждений и отобразить их
в окне Список ошибок , значение WarningRegex для команды Выполнить PyLint имеет следующий вид:

^(?<filename>.+?)\((?<line>\d+),(?<column>\d+)\): warning (?<msg_id>.+?): (?<message>.+?)$]]

(Обратите внимание, что msg_id в значении должно быть code , см. описание запроса 3680.)

Создание TARGETS-файлов с пользовательскими командами


Пользовательские команды, определенные в файле проекта, доступны только этому файлу. Чтобы
использовать команды в нескольких файлах проектов, следует определить группу свойств <PythonCommands>
и все ваши элементы <Target> в файле TARGETS . Затем этот файл можно импортировать в отдельные
файлы проектов.

Файл TARGETS имеет следующий формат :


<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<PythonCommands>
$(PythonCommands);
<!-- Additional command names -->
</PythonCommands>
</PropertyGroup>

<Target Name="..." Label="..." Returns="@(Commands)">


<!-- CreatePythonCommandItem and Output elements... -->
</Target>

<!-- Any number of additional Target elements-->


</Project>

Чтобы загрузить файл TARGETS в проект , расположите элемент <Import Project="(path)"> в любом месте
внутри элемента <Project> . Например, если у вас есть файл с именем CustomCommands.targets во
вложенной папке targets в проекте, используйте следующий код:

<Import Project="targets/CustomCommands.targets"/>

NOTE
При каждом изменении файла TARGETS нужно перезагружать решение, содержащее этот проект , а не только сам
проект.

Примеры команд
Выполнение PyLint (целевой объект модуля )
В файле Microsoft.PythonTools.targets отображается следующий код:

<PropertyGroup>
<PythonCommands>$(PythonCommands);PythonRunPyLintCommand</PythonCommands>
<PyLintWarningRegex>
<![CDATA[^(?<filename>.+?)\((?<line>\d+),(?<column>\d+)\): warning (?<msg_id>.+?): (?<message>.+?)$]]>
</PyLintWarningRegex>
</PropertyGroup>

<Target Name="PythonRunPyLintCommand"
Label="resource:Microsoft.PythonTools.Common;Microsoft.PythonTools.Common.Strings;RunPyLintLabel"
Returns="@(Commands)">
<CreatePythonCommandItem Target="pylint.lint"
TargetType="module"
Arguments="&quot;--msg-template={abspath}({line},{column}): warning {msg_id}: {msg}
[{C}:{symbol}]&quot; -r n @(Compile, ' ')"
WorkingDirectory="$(MSBuildProjectDirectory)"
ExecuteIn="output"
RequiredPackages="pylint&gt;=1.0.0"
WarningRegex="$(PyLintWarningRegex)">
<Output TaskParameter="Command" ItemName="Commands" />
</CreatePythonCommandItem>
</Target>

Запуск pip install с определенным пакетом (целевой объект pip)


Следующая команда запускает pip install my-package в окне вывода . Эту команду можно использовать
при разработке пакета и тестировании его установки. Обратите внимание, что Target содержит имя пакета,
а не команду install , которая предполагается при использовании ExecuteIn="output" .
<PropertyGroup>
<PythonCommands>$(PythonCommands);InstallMyPackage</PythonCommands>
</PropertyGroup>

<Target Name="InstallMyPackage" Label="pip install my-package" Returns="@(Commands)">


<CreatePythonCommandItem Target="my-package" TargetType="pip" Arguments=""
WorkingDirectory="$(MSBuildProjectDirectory)" ExecuteIn="output">
<Output TaskParameter="Command" ItemName="Commands" />
</CreatePythonCommandItem>
</Target>

Отображение устаревших пакетов pip (целевой объект pip)

<PropertyGroup>
<PythonCommands>$(PythonCommands);ShowOutdatedPackages</PythonCommands>
</PropertyGroup>

<Target Name="ShowOutdatedPackages" Label="Show outdated pip packages" Returns="@(Commands)">


<CreatePythonCommandItem Target="list" TargetType="pip" Arguments="-o --format columns"
WorkingDirectory="$(MSBuildProjectDirectory)" ExecuteIn="consolepause">
<Output TaskParameter="Command" ItemName="Commands" />
</CreatePythonCommandItem>
</Target>

Запуск исполняемого файла с consolepause


Следующая команда просто запускает where для отображения файлов Python, начиная с папки проекта:

<PropertyGroup>
<PythonCommands>$(PythonCommands);ShowAllPythonFilesInProject</PythonCommands>
</PropertyGroup>

<Target Name="ShowAllPythonFilesInProject" Label="Show Python files in project" Returns="@(Commands)">


<CreatePythonCommandItem Target="where" TargetType="executable" Arguments="/r . *.py"
WorkingDirectory="$(MSBuildProjectDirectory)" ExecuteIn="output">
<Output TaskParameter="Command" ItemName="Commands" />
</CreatePythonCommandItem>
</Target>

Выполнение команд запуска сервера и сервера отладки


Чтобы узнать, как определены команды Запуск сервера и Запустить сервер отладки для веб-
проектов, см. Microsoft.PythonTools.Web.targets (GitHub).

Установка пакета для разработки

<PropertyGroup>
<PythonCommands>PipInstallDevCommand;$(PythonCommands);</PythonCommands>
</PropertyGroup>

<Target Name="PipInstallDevCommand" Label="Install package for development" Returns="@(Commands)">


<CreatePythonCommandItem Target="pip" TargetType="module" Arguments="install --editable $(ProjectDir)"
WorkingDirectory="$(WorkingDirectory)" ExecuteIn="Repl:Install package for development">
<Output TaskParameter="Command" ItemName="Commands" />
</CreatePythonCommandItem>
</Target>

Из файла fxthomas/Example.pyproj.xml (GitHub), используемого с разрешениями.


Создание установщика Windows
<PropertyGroup>
<PythonCommands>$(PythonCommands);BdistWinInstCommand;</PythonCommands>
</PropertyGroup>

<Target Name="BdistWinInstCommand" Label="Generate Windows Installer" Returns="@(Commands)">


<CreatePythonCommandItem Target="$(ProjectDir)setup.py" TargetType="script"
Arguments="bdist_wininst --user-access-control=force --title &quot;$(InstallerTitle)&quot; --dist-
dir=&quot;$(DistributionOutputDir)&quot;"
WorkingDirectory="$(WorkingDirectory)" RequiredPackages="setuptools"
ExecuteIn="Repl:Generate Windows Installer">
<Output TaskParameter="Command" ItemName="Commands" />
</CreatePythonCommandItem>
</Target>

Из файла fxthomas/Example.pyproj.xml (GitHub), используемого с разрешениями.


Создание пакета wheel

<PropertyGroup>
<PythonCommands>$(PythonCommands);BdistWheelCommand;</PythonCommands>
</PropertyGroup>

<Target Name="BdistWheelCommand" Label="Generate Wheel Package" Returns="@(Commands)">

<CreatePythonCommandItem Target="$(ProjectDir)setup.py" TargetType="script"


Arguments="bdist_wheel --dist-dir=&quot;$(DistributionOutputDir)&quot;"
WorkingDirectory="$(WorkingDirectory)" RequiredPackages="wheel;setuptools"
ExecuteIn="Repl:Generate Wheel Package">
<Output TaskParameter="Command" ItemName="Commands" />
</CreatePythonCommandItem>
</Target>

Из файла fxthomas/Example.pyproj.xml (GitHub), используемого с разрешениями.

Устранение неполадок
Сообщение : "Не удалось загрузить файл проекта"
Указывает на наличие синтаксических ошибок в файле проекта. Это сообщение содержит конкретную
ошибку с номером строки и позицией символа.

Окно консоли закрывается сразу после выполнения команды


Используйте ExecuteIn="consolepause" вместо ExecuteIn="console" .
Команда не отображается в меню
Убедитесь, что команда включена в группу свойств <PythonCommands> , а имя в списке команд совпадает с
именем, указанным в элементе <Target> .

Например, в следующих элементах имя Example в группе свойств не соответствует имени ExampleCommand
в целевом объекте. Visual Studio не находит команду с именем Example, поэтому команда не отображается.
Используйте ExampleCommand в списке команд или измените имя целевого объекта на Example.

<PropertyGroup>
<PythonCommands>$(PythonCommands);Example</PythonCommands>
</PropertyGroup>
<Target Name="ExampleCommand" Label="Example Command" Returns="@(Commands)">
<!-- ... -->
</Target>

Сообщение : "Произошла ошибка при выполнении <command name>. Не удалось получить команду
<target-name> из проекта".
Указывает , что содержимое элементов <Target> или <CreatePythonCommandItem> неправильно. Возможные
причины:

Обязательный атрибут Target пуст.


Обязательный атрибут TargetType пуст или содержит неопознанное значение.
Обязательный атрибут ExecuteIn пуст или содержит неопознанное значение.
ErrorRegex или WarningRegex указан без задания ExecuteIn="output" .
В элементе присутствуют неопознанные атрибуты. Например, вы могли использовать Argumnets (с
опечаткой) вместо Arguments .

Значения атрибутов могут быть пустыми, если вы ссылаетесь на свойство, которое не было определено.
Например, если вы используете токен $(StartupFile) , но в проекте не задан файл запуска, этот токен
разрешается в пустую строку. В таких случаях может потребоваться определить значение по умолчанию.
Например, команды Запуск сервера и Запустить сервер отладки, определенные в шаблонах проектов
Bottle, Flask и Django, по умолчанию используют manage.py, если вы иным образом не указали файл запуска
сервера в свойствах проекта.

Visual Studio перестает отвечать и аварийно завершает работу при выполнении команды
Скорее всего, вы пытаетесь запустить команду консоли с ExecuteIn="output" . В этом случае Visual Studio
может аварийно завершить работу при попытке проанализировать выходные данные. Взамен
рекомендуется использовать ExecuteIn="console" . (См. описание запроса 3682.)

Исполняемая команда "не является внутренней или внешней командой, работающей программой или
пакетным файлом"
При использовании TargetType="executable" значение в Target должно содержать только имя программы
без аргументов, например только python или python.exe. Переместите все аргументы в атрибут Arguments .
Работа с интерактивным окном Python
21.10.2020 • 11 minutes to read • Edit Online

Visual Studio предоставляет интерактивное окно для цикла REPL (read–eval–print loop) отдельно для
каждого окружения Python, что дает ряд преимуществ над интерфейсом REPL из командной строки
python.exe. В интерактивном окне (открывается с помощью команд меню Просмотр > Другие окна >
< окружение > Интерактивное окно) можно ввести произвольный код Python и немедленно увидеть
результаты. Это помогает вам изучать API и экспериментировать с ним, а также интерактивно
разрабатывать рабочий код для добавления в проекты.

Visual Studio предоставляет ряд режимов REPL Python.

REP L ОПИСАНИЕ РЕДАКТИРОВАНИЕ ОТЛАДКА ОБРАЗЫ

Стандартный Режим REPL по Стандартное Да, через $attach Нет


умолчанию, редактирование
взаимодействует с (многострочное
Python напрямую редактирование и
т. д.)

Отладка Режим REPL по Стандартное Только отладка Нет


умолчанию, редактирование
взаимодействует с
отлаженным
процессом Python

IPython REPL Команды IPython, Нет Да, встроенные в


взаимодействует с средства Pylab REPL
серверной частью
IPython

IPython без Pylab REPL Стандартный Нет Да, в отдельном


взаимодействует с IPython окне
серверной частью
IPython

В этой статье описаны стандартный режим REPL и режим отладки REPL. Дополнительные сведения о
режимах IPython см. в руководстве по использованию IPython в интерактивном окне.

Подробное пошаговое руководство с примерами, включая взаимодействие с редактором, например с


помощью клавиш CTRL +ВВОД, см. в шаге 3 в руководстве: использование интерактивного окна REPL.

Открытие интерактивного окна


Существует несколько способов открыть для окружения интерактивное окно.

Первый способ — переключитесь в окно окружений Python (Просмотр > Другие окна > Окружения
Python или CTRL +K > CTRL + ` ) и выберите команду Открыть интерактивное окно или нажмите
кнопку выбранного окружения.

Второй способ — в нижней части меню Просмотр > Другие окна находится команда Интерактивное
окно Python для вашего окружения по умолчанию, а также команда для перехода в окно Окружения:

Третий способ — интерактивное окно можно открыть в файле запуска проекта или с помощью
отдельного файла, выбрав команду меню Отладка > Выполнить <Project | File> в интерактивном
окне Python (SHIFT +ALT +F5 ):

Наконец, можно выбрать код в файле и использовать описанную ниже команду Отправить код в
интерактивное окно.

Параметры интерактивного окна


Вы можете управлять разными аспектами интерактивного окна с помощью меню Инструменты >
Параметры > Python > Интерактивные окна (см. Параметры):
Работа с интерактивным окном Python
Открыв интерактивное окно, вы можете вводить в него отдельные строки кода в ответ на
приглашение >>> . Интерактивное окно выполняет код в каждой строке по мере ввода, включая
импорт модулей, определение переменных и т. д.

Исключением является ситуация, когда для получения законченного оператора требуются


дополнительные строки кода, например, когда оператор for заканчивается точкой с запятой, как
показано выше. В таких случаях в начале строки отображаются символы ... , указывая, что вам нужно
ввести дополнительные строки для блока, как показано в четвертой и пятой строке на приведенном
выше рисунке. Когда вы завершите ввод клавишей ВВОД в пустой строке, интерактивное окно
закроется и блок выполнится в интерпретаторе.

TIP
Интерактивное окно повышает удобство работы с обычными условиями цикла REPL в командной строке
Python, автоматически выделяя отступами операторы, принадлежащие к окружающей области видимости. В
журнале (можно отозвать с помощью стрелки вверх ) также представлены многострочные элементы, в то время
как в среде REPL с командной строкой содержатся только единичные строки.

Интерактивное окно также поддерживает несколько метакоманд. Все метакоманды начинаются с $ .


Чтобы получить список метакоманд, введите $help , а для получения сведений об использовании
конкретной команды введите $help <command> .

МЕТАКОМАНДА ОПИСАНИЕ

$$ Вставляет комментарий, благодаря чему можно


комментировать код на протяжении всего сеанса.

$attach Присоединяет отладчик Visual Studio к процессу окна


REPL для включения отладки.

$cls , $clear Удаляет содержимое окна редактора, не затрагивая


журнал и контекст выполнения.

$help Выводит список команд или справку по определенной


команде.

$load Загружает команды из файла и выполняет их до


завершения.

$mod Переключает текущую область на модуль с указанным


именем.

$reset Сбрасывает среду выполнения до начального


состояния, но сохраняет историю.

$wait Ожидает на протяжении как минимум указанного числа


миллисекунд.

Команды также допускают расширение с помощью расширений Visual Studio путем реализации и
экспорта IInteractiveWindowCommand (пример).

Переключение областей видимости


По умолчанию область действия интерактивного окна проекта ограничена файлом запуска проекта,
как и при запуске из командной строки. Для автономного файла действия выполняются в области этого
файла. Но в любой момент сеанса REPL вы можете изменить область с помощью раскрывающегося меню
в верхней части интерактивного окна:

После импорта модуля, например с помощью команды import importlib , в раскрывающемся списке
отображаются параметры, позволяющие переключиться в любую область этого модуля. В
интерактивном окне появляется сообщение, определяющее новую область, помогая вам отслеживать
изменение состояний во время сеанса.

После ввода dir() в области отобразятся допустимые идентификаторы этой области, включая имена
функций, классы и переменные. Например, если ввести import importlib , за которым следует dir() ,
отобразится следующее:

Команда "Отправить код в интерактивное окно"


Кроме выполнения действий непосредственно в интерактивном окне, вы можете выбрать любой код в
редакторе, щелкнуть его правой кнопкой мыши и выбрать Отправить в интерактивное окно или
нажать клавиши CTRL +ВВОД.

Эта команда также удобна для итеративной или эволюционной разработки кода, включая тестирование
кода по мере разработки. Например, после того как вы отправили фрагмент кода в интерактивное
окно и увидели результат его выполнения, можно снова отобразить этот код нажатием стрелки "вверх",
внести изменения и быстро проверить результат , нажав клавиши CTRL +ВВОД. (Нажатие клавиши ВВОД
в конце входной строки также выполняет введенный код, но при нажатии этой клавиши в середине
строки происходит вставка новой строки.) Внеся все необходимые изменения в код, можно легко
скопировать его обратно в файл проекта.

TIP
По умолчанию Visual Studio удаляет символы >>> и ... . REPL выводит предупреждение при вставке кода из
интерактивного окна в редактор. Это поведение можно изменить на вкладке Инструменты > Параметры >
Текстовый ред актор > Python > Дополнительно с помощью параметра Вставка уд аляет запросы REPL .
См. раздел Параметры. Прочие параметры.

Работа с ячейками кода


Ячейки кода, которые поддерживаются различными текстовыми редакторами, можно использовать в
ходе анализа данных.

Например, при использовании файла кода в качестве электронного блокнота часто требуется отправить
целиком небольшой блок кода. Чтобы сгруппировать код, пометьте его как ячейку кода, добавив в
начало ячейки заметку, начинающуюся с #%% , чтобы завершить предыдущую. Ячейки кода можно
свернуть и развернуть, а с помощью клавиш CTRL +ВВОД внутри ячейки кода ее можно целиком
отправить в интерактивное окно и перейти к следующей ячейке.

Visual Studio также обнаруживает ячейки кода, начинающиеся с таких заметок, как # In[1]: , что
соответствует формату, получаемому при экспорте записной книжки Jupyter в файл Python. Такое
обнаружение позволяет легко запустить записную книжку из компонента Записные книжки Azure, скачав
ее в виде файла Python, открыв в Visual Studio и выполнив поочередно каждую ячейку с помощью
клавиш CTRL +ВВОД.

Поведение IntelliSense
В интерактивном окне применяется технология IntelliSense на основе используемых объектов, в
отличие от редактора кода, в котором IntelliSense основывается только на анализе исходного кода. Эти
предложения в интерактивном окне более точные, особенно при работе с динамически создаваемым
кодом. Недостаток заключается в том, что функции с побочными эффектами (например, запись
сообщений) могут повлиять на процесс разработки.

Если это является проблемой, измените параметры, выбрав Инструменты > Параметры > Python >
Интерактивные окна в группе Режим завершения, как указано в описании параметров
интерактивных окон.
Использование IPython в интерактивном окне
21.10.2020 • 4 minutes to read • Edit Online

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

Для работы вам потребуется установленное окружение Anaconda, которое включает IPython и все
необходимые библиотеки.

NOTE
IronPython не поддерживает IPython, хотя его можно выбрать в форме параметров интерактивной работы.
Дополнительные сведения см. в запросе функции.

1. Откройте Visual Studio, переключитесь в окно Окружения Python (Вид > Другие окна >
Окружения Python ) и выберите среду Anaconda.

2. Изучите вкладку Пакеты (Conda) (которая может отображаться как pip или Пакеты) для этой
среды, чтобы убедиться, что ipython и matplotlib указаны. Если нет , установите их с помощью
этой же вкладки. (См. раздел Вкладка "Пакеты" окна "Окружения Python".)

3. Откройте вкладку Обзор и выберите Использовать интерактивный режим IPython . (В Visual


Studio 2015 выберите Настройка интерактивных параметров, чтобы открыть диалоговое окно
Параметры, укажите значение IPython для параметра Интерактивный режим и нажмите
кнопку ОК.)

4. Выберите Открыть интерактивное окно, чтобы открыть интерактивное окно в режиме


IPython. Если вы только что установили интерактивный режим, может потребоваться сброс
установок окна. Кроме того, может потребоваться нажать клавишу ВВОД, если отображается
только приглашение ">>>", чтобы получить приглашение как в [2] .

5. Введите следующий код:


import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 5, 10)
y = x ** 2
plt.plot(x, y, 'r', x, x ** 3, 'g', x, x ** 4, 'b')

6. После ввода последней строки прямо в этом же окне вы увидите график (размер которого при
желании можно менять, перетаскивая его за нижний правый угол).

7. Вместо того чтобы вводить код прямо в окне REPL, вы можете написать его в редакторе, затем
выбрать нужный фрагмент кода, щелкнуть правой кнопкой мыши и выбрать команду Отправить в
интерактивное окно или нажать клавиши CTRL +ВВОД. Попробуйте вставить приведенный ниже
код в новый файл в редакторе, а затем выбрать его, нажав клавиши CTRL +A , и отправить в
интерактивное окно. (Visual Studio отправляет код одним блоком, чтобы не создавать
промежуточные или частичные графы. Кроме того, при отсутствии открытого проекта Python с
выбранным другим окружением Visual Studio открывает интерактивное окно для любого
окружения, выбранного в качестве используемого по умолчанию в окне Окружения Python .)
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
for c, z in zip(['r', 'g', 'b', 'y'], [30, 20, 10, 0]):
xs = np.arange(20)
ys = np.random.rand(20)
# You can provide either a single color or an array. To demonstrate this,
# the first bar of each set is colored cyan.
cs = [c] * len(xs)
cs[0] = 'c'
ax.bar(xs, ys, zs=z, zdir='y', color=cs, alpha=0.8)

ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()

8. Чтобы просмотреть график за пределами интерактивного окна, запустите код обычным образом,
используя команду Отладка > Запуск без отладки.

IPython имеет множество других полезных функций, таких как экранирование символов для системной
оболочки, подстановка переменных, запись вывода и т. д. Дополнительные сведения см. в документации
по IPython.

См. также
Чтобы легко пользоваться Jupyter без установки, попробуйте бесплатную размещенную службу
записных книжек Azure, позволяющую сохранять и совместно использовать записные книжки.

Виртуальная машина для обработки и анализа данных Azure также предварительно настроена для
выполнения записных книжек Jupyter, а также широкого спектра других средств обработки и
анализа данных.
Отладка кода Python
21.10.2020 • 25 minutes to read • Edit Online

Visual Studio предоставляет широкие возможности отладки для Python, включая присоединение к
выполняемым процессам, вычисление выражений в окнах контрольных значений и интерпретации,
проверку локальных переменных, точки останова, инструкции "Шаг с заходом", "Шаг с выходом", "Шаг с
обходом", команду Задать следующий оператор и многое другое.

Также ознакомьтесь со следующими статьями об отладке:

Удаленная отладка в Linux


Отладка в смешанном режиме для Python/C++
Символы для отладки в смешанном режиме

TIP
Python в Visual Studio поддерживает возможность отладки без проекта. Откройте в редакторе автономный
файл Python, щелкните область редактора правой кнопкой мыши и выберите пункт Запуск с отлад кой. Visual
Studio запустит скрипт с глобальной средой по умолчанию (см. статью о средах Python) и без аргументов. В
дальнейшем у вас будет полная поддержка отладки.

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

Основы отладки
Базовый рабочий процесс отладки включает в себя настройку точек останова, пошаговое выполнение
кода, проверку значений и обработку исключений, как описано в следующих разделах.

Сеанс отладки можно начать с помощью команды Отладка > Начать отладку, кнопки Запуск на
панели инструментов или клавиши F5 . В результате запускается файл запуска проекта (выделен
полужирным шрифтом в обозревателе решений) с активным окружением проекта и аргументами
командной строки или путями поиска, указанными в свойствах проекта (см. раздел Параметры
отладки проекта). Если в Visual Studio 2017 версии 15.6 и более поздних версий не задан файл запуска,
отображается оповещение. В более ранних версиях может открыться окно вывода с выполняющимся
интерпретатором Python либо же окно вывода может появиться на короткий промежуток времени и
исчезнуть. В любом из этих случаев щелкните правой кнопкой мыши нужный файл и выберите пункт
Задать как файл запуска .

NOTE
Отладчик всегда начинает работу с запуска активной среды Python для проекта. Дополнительные сведения о
том, как сделать активным другое окружение, см. в руководстве по выбору окружения Python для проекта.

Точки останова
Точки останова прекращают выполнение кода в заданной точке, чтобы вы могли проверить состояние
программы. Задайте точку останова, щелкнув левое поле редактора кода или щелкнув правой кнопкой
мыши строку кода и выбрав пункт Точка останова > Вставить точку останова . В каждой строке с
точкой останова отображается красная точка.
Чтобы удалить точку останова, щелкните красную точку или правой кнопкой мыши щелкните строку
кода и выберите пункт Точка останова > Удалить точку оста