О чем эта статья

Эта статья для тех, кто столкнулся с необходимостью иметь компьютер под управлением системы из семейства Linux и при этом есть единственный компьютер под управлением Windows. Для таких случаев в Windows есть стандартное решение под названием WSL (Windows Subsystem for Linux). Конечно нельзя назвать данное решение полноценным. Но для тестирования проекта или обучения вполне может подойти. В моем случае решил использовать эту систему для обучения работы в Airflow. Что из этого вышло покажу дальше в статье. Забегая вперед скажу, что не все так однозначно ни с подсистемой Linux в Windows ни с дальнейшей работай проектов в ней.

Для работы мы используем:

  • компьютер под управлением Windows 10

  • программа VSC (Visual Studio Code или VSCode)

  • установленная в Windows база данных PostgreSQL

Оглавление

  1. Установка и запуск WSL в Windows

  2. Открытие проекта, расположенного в Linux в VSC

  3. Особенности настройки баз данных PostgreSQL

  4. Итоги и выводы

1. Установка и запуск WSL в Windows

WSL стандартное решение для Windows, поэтому установка и настройка системы максимально простая. Быстро пробежимся по пунктам как это сделать.

Перед началом работы полезно проверить, установлена ли уже подсистема и какой дистрибутив используется по умолчанию. Для этого открываем командную строку от имени администратора (в нижнем поле поиска вводим "командная строка", нажимаем правой кнопкой и запускаем от имени администратора) и выполняем команду:

wsl --status

В моем случае система показала:

  • Распределение по умолчанию: Ubuntu

  • Версия по умолчанию: 2

Это означает, что WSL уже установлен, используется Ubuntu и задействована вторая версия подсистемы, которая работает с полноценным ядром Linux.

Если у вас WSL не установлен, достаточно выполнить команду:

wsl --install

и перезагрузить компьютер — система сама скачает и настроит все необходимое.

После установки WSL запустить Linux можно разными способами. Самый простой способ — ввести в командной строке:

wsl

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

Запуск WSL после установки и перезагрузки компьютера с помощью команды wsl.
Запуск WSL после установки и перезагрузки компьютера с помощью команды wsl.

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

cd ~
mkdir test
cd test

На этом этапе у нас есть папка с проектом в Linux-окружении. Теперь самое интересное — открыть этот проект в VSCode, который работает в Windows.

2. Открытие проекта, расположенного в Linux в VSC

Для комфортной работы с кодом нам понадобится Visual Studio Code. Главная хитрость — не просто открыть папку в Windows, а подключиться именно к WSL-окружению. Открываем VSCode, переходим во вкладку расширений (Ctrl+Shift+X) и находим WSL. На скриншоте видно, что это расширение от Microsoft с более чем 37 миллионами загрузок и высоким рейтингом. Устанавливаем его.

Расширение необходимое для установки в VSC.
Расширение необходимое для установки в VSC.

Для подключеня VSC к проекту находясь в папке проекта в терминале WSL (в командной строке), выполняем команду:

code .

Автоматически запустится VSC. При первом запуске этой команды VSCode может предложить установить дополнительные компоненты для интеграции с WSL — соглашаемся. После подключения в левом нижнем углу VSCode появится индикатор WSL: Ubuntu, а в проводнике откроется файловая система Linux.

Теперь мы можем полноценно работать с кодом, использовать терминал VSCode (который автоматически будет внутри WSL), ставить пакеты через apt, запускать Python-скрипты и при этом пользоваться всеми возможностями VSCode — автодополнением, отладчиком, Git-интеграцией.

3. Особенности настройки баз данных PostgreSQL

Теперь переходим к самому интересному — работе с базами данных. В моем случае для обучения Airflow потребовалась PostgreSQL. Тут есть особенность. Если у вас уже была установлена база данных в Windows то даже из среды WSL приложения будут пытаться подключиься именно к ней. Так было и в моем случае. Хотя я устанавливал базу данных именно в WSL - Airflow все равно пытался подключиnься именно к базе, установленной и сконфигурированной в Windows. При этому в командной строке того же VSC когда вы открывает проект, расположенный в WSL, управлять базой данных в Windows вы не сможете, придется открыть отдельный терминал для работы с ней в самой среде Windows.

Еще хочу упомянуть об одной интересной особенности работы с базами данных в Windows. Часто после установки PostgreSQL, ее настройки и попытки подключиться из какого либо проекта вы можете получить неоднозначное сообщение об ошибке:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc2 in position 67: invalid continuation byte

Ну или что то в этом духе. Так было к примеру у меня при работе с проектом на Django, тоже самое было и с Airflow из WSL. И я достаточно много врмени потратил чтобы на просторах интеренета все же отыскать решение. Оказалось дело в настройках в Windows. Для корректной работы базы данных необходимо в Windows звйти в меню Региональные стандарты - Изменение форматов даты - Изменить язык системы и поставить крайне важную для работы PostgreSQL галочку:

Крайне важная галочка для работы PostgreSQL в Windows.
Крайне важная галочка для работы PostgreSQL в Windows.

Только так PostgreSQL в Windows будет работать с приложениями корректно.

4. Итоги и выводы

Что в итоге получилось с обучением Airflow? Скажу честно — не все гладко, но вполне работоспособно.

Плюсы подхода с WSL:

  • Быстрый доступ к Linux-окружению без виртуальной машины

  • Отличная интеграция с VSCode (спасибо расширению WSL)

  • Возможность использовать Linux-инструменты и Windows-приложения параллельно

Минусы и сложности:

  • Путаница с файловыми системами (где что хранить)

  • Нетривиальная настройка баз данных для взаимодействия Windows и WSL

  • Иногда приходится перезапускать WSL (wsl --shutdown) при проблемах с сетью

  • Некоторые Linux-сервисы ведут себя нестандартно

Если вы планируете тестовую разработку или обучение — смело используйте WSL, но сразу храните все проекты в Linux-разделе, а для раб��ты с кодом обязательно подключите VSCode с расширением WSL. Тогда разница с "настоящим" Linux будет почти незаметна.

Спасибо за внимание. Надеюсь моя статья будет полезна.