Персональна освітня сорінка
by Pavlo Shcherbukha
Вибір інстументів розробки та налаштування середовища розробки
2.1. Вибір фреймворку
Створення початкового мінімального проекту на python Flask на Wi64
3.1. Створити проект в Visual Studio Code
Постало передімною завдання, що вимагає розробки webservice з бібліотеками, що є тільки для python, але для win платформи та для Linux. Тому прийшлося швидко вивчати Python ну і щось зразу писати. Ну а працювати все йе повинно під kubernetes платформою Openshift. Тому цей блог орієнтований на початківців, хто, можливо опинився в схожій ситуації. Більш того, мені здається, що це буде серія блогів, тому що в один все це втулити складно. Тож поїхали
Для розробки Web Services на Python google каже, що найширше використовуються фреймоворки Django та Flask. Кому цікаво, їх порівняльні характеристики можна почитати за посиланням: Flask Vs Django: Which Python Framework to Choose?. Я вибрав Flask тому що мені потрібні маленькі сервіси, де кожен сервіс виконує свою роботу, а не масивні application. Тому я зупинився на Flask. Тимбільше, що для Node.js developer шаблон додатку чомусь дуже мені нагадав Node.js express. Тому для розробки вибрав Flask. І у мене існують обмеження зовнішнбої бібіліотеки: не вище Python 3.9.
В якості середвоища розробки вибрав Visual Code Studio з плаіном Python.

За дінком нписано, як налаштувати VSC для роботи з Flask Using Flask in Visual Studio Code і тут є корисний приклад: python-sample-vscode-flask-tutorial.
Тут розклад простий. Розробку та выдладку вести на win-64. Виконуватися повинно в контейнері Linux на RedHat OpenShift. В якості базового контейнера вибрано сертифікований RedHat UBI8 з адаптацією під Python 3.9, ubi8/python-39 .
Перед цим, звичайно, на машині повинно бути встановлено Python 3.9.
Створив каталог та перенести з python-sample-vscode-flask-tutorial папку .vscode в ній в файлі launch.json записана конфsгурація для debug різних фраймворків на Python та launch.json settings.json де записано, що старт додатку відбувається не з загального каталогу, де установдено Python а з віртуального середовища, що індивідуальне для окремо взятого проекту. Далі потрібно створити віртуальне середовище запуску
Як створити віртуальне середовище, описано за лінком: Installing packages using pip and virtual environments¶
Створення віртуального середовища виконується командою
py -m venv env
, що запускається в терміналі VSC.

В результаті виконання команди в проекті створяться каталог env, з підкаталогами pic-3

Для перевірки, що virtual environment запуститься можна виконати в терміналі VSC:
.\env\Scripts\activate.ps1

Якщо виникає помилка при запуску скрипта Activate.ps1, то потрібно запустити WinShell с правами адміністратора і виконати команду
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Інші рецепти не допомгли.
На цьому віртуальне середовище створено. Переходимо до інсталювання необхіних бібліотек.
Процес установки необхідних бібліотек дуже схожить з Node.js
Можна ставити бібліотеки поіменно, як в цьому прикладі, інсталюємо бібліотку requests:
py -m pip install requests
А можна створити файл залежностей requirements.txt в корені проекту, та встановити всі залужності за списком. Для мене цей варіант більш прийнятний, тому що при збірці в контейнері, якраз використовується пакетна установка.
py -m pip install -r requirements.txt
Тому ствроюю проситьй набір бібілиотек в requirements.txt
Flask
requests
та запускаю
py -m pip install -r requirements.txt

А в каталозі env\Scripts з’явився файл flask.exe

Таким чином мінімаьне віртуальне середивище для запуска Flask application сконфігуроване.
Створимо app.py в кореневому каталозі проекту
from flask import Flask
app = Flask(__name__)
@app.route("/")
def home():
return "Hello, Flask This IS APP.PY!"
Та запустимо його командою:
python -m flask run
Запуститься додакток за замовчуванням: app.py

Ну і зразу сервіс доступний по http://localhost:5000

Створимо mainprog.py в кореневому каталозі проекту
from flask import Flask
app = Flask(__name__)
@app.route("/")
def home():
return "Hello, Flask! This is mainprog.py !"
Запустити програму з назвою, що відрізняється від app.py можна кільком методами.
python -m flask --app mainprog.py run

потрібно в терміналі WSC встановити
$env:FLASK_APP = "mainprog.py"
Переглянути зачення можна командою:
$env:FLASK_APP
SET FLASK_APP=mainprog.py
echo %FLASK_APP%
ну і запустити flask
python -m flask run


Для запусу в режимі DEBUG потрібно внести конфігурацію в файл .vscode/launch.json в розділ Python: Flask
{
"name": "Python: Flask",
"type": "python",
"request": "launch",
"module": "flask",
"env": {
"FLASK_APP": "mainprog.py",
"FLASK_ENV": "development",
"FLASK_DEBUG": "0",
"DB_NAME": "ORACLE-1234"
},
"args": [
"run",
"--no-debugger",
"--no-reload"
],
"jinja": true
},
Далі переключаємося в режим DEBUG і запускаємо додаток.



3.1. При ПЕРШОМУ запуску вас просить вибрати інтерпритатор. То потрібно вибирати інтерпритетор віртуального середовища:

Ну і в результаті видно, що програма стартонула і навіть зупинилася на breakpint.

Аде, зазвичай, в додаток потрібно передавати env-змінні, що параметризують його роботу. Під час конфігурації режиму DEBUG була додана змінна ** “DB_NAME”: “ORACLE-1234”. Спробуємо її вичатити та повернути її значення у відповіді. Для цього трохи змінемо файл **mainprog.py
import os
from flask import Flask
app = Flask(__name__)
@app.route("/")
def home():
dbname=os.environ.get('DB_NAME');
if dbname==None:
return "Hello, Flask! This is mainprog.py ! ENV DB_NAME IS NOT DEFINED"
else:
return "Hello, Flask! This is mainprog.py ! ENV DB_NAME =" + dbname
І вуаля, значення змінної отримано!

Якщо працюємо з Git реазторієм, то потрібно налаштувати файл .gitignore щоб не завантажувати в Git біділіотеки, тимчасові файли і таке інше. Взяв з прикладу python-sample-vscode-flask-tutorial. Мені він здався найбільш універсальним.
Це елементарні приклади для початківця щоб розгорнути середовище розробки та перевірити його працездатність. Сам репозиторій з прикладом знаходиться за лінком: py-flask-app-smpl
tags: