Python: различия между версиями
Tantsev (обсуждение | вклад) (→Активация venv) |
Vovan (обсуждение | вклад) (→Установка зависимостей в виртуальное окружение) |
||
(не показаны 24 промежуточные версии 2 участников) | |||
Строка 17: | Строка 17: | ||
(envname) $ | (envname) $ | ||
− | == | + | ==Справка по модулю== |
+ | $ python3 -m venv --help | ||
+ | usage: venv [-h] [--system-site-packages] [--symlinks | --copies] [--clear] | ||
+ | [--upgrade] [--without-pip] [--prompt PROMPT] [--upgrade-deps] | ||
+ | ENV_DIR [ENV_DIR ...] | ||
+ | Creates virtual Python environments in one or more target directories. | ||
+ | |||
+ | positional arguments: | ||
+ | ENV_DIR A directory to create the environment in. | ||
+ | |||
+ | options: | ||
+ | -h, --help show this help message and exit | ||
+ | --system-site-packages | ||
+ | Give the virtual environment access to the system | ||
+ | site-packages dir. | ||
+ | --symlinks Try to use symlinks rather than copies, when symlinks | ||
+ | are not the default for the platform. | ||
+ | --copies Try to use copies rather than symlinks, even when | ||
+ | symlinks are the default for the platform. | ||
+ | --clear Delete the contents of the environment directory if it | ||
+ | already exists, before environment creation. | ||
+ | --upgrade Upgrade the environment directory to use this version | ||
+ | of Python, assuming Python has been upgraded in-place. | ||
+ | --without-pip Skips installing or upgrading pip in the virtual | ||
+ | environment (pip is bootstrapped by default) | ||
+ | --prompt PROMPT Provides an alternative prompt prefix for this | ||
+ | environment. | ||
+ | --upgrade-deps Upgrade core dependencies: pip setuptools to the | ||
+ | latest version in PyPI | ||
+ | |||
+ | Once an environment has been created, you may wish to activate it, e.g. by sourcing an activate script in its bin directory. | ||
+ | |||
+ | ==Способы создания venv== | ||
===Создание виртуального окружения с символическими ссылками на интерпретатор Python=== | ===Создание виртуального окружения с символическими ссылками на интерпретатор Python=== | ||
По умолчанию виртуальные окружения создаются с использованием стандартного системного Python. Файл bin/python — это просто символическая ссылка на системный python: | По умолчанию виртуальные окружения создаются с использованием стандартного системного Python. Файл bin/python — это просто символическая ссылка на системный python: | ||
Строка 27: | Строка 59: | ||
$ ls envname/bin/python -l | $ ls envname/bin/python -l | ||
-rwxr-xr-x 1 vladt vladt 5872328 фев 23 00:00 envname/bin/python | -rwxr-xr-x 1 vladt vladt 5872328 фев 23 00:00 envname/bin/python | ||
+ | |||
+ | =Flask= | ||
+ | ==Установка== | ||
+ | $ pip install Flask | ||
+ | ==Простейший сервер== | ||
+ | ===Собираем сервер=== | ||
+ | cat << EOF > webapp.py | ||
+ | from flask import Flask | ||
+ | app = Flask(__name__) | ||
+ | |||
+ | |||
+ | @app.route('/') | ||
+ | def hello_world(): | ||
+ | return 'Hello, World!' | ||
+ | |||
+ | |||
+ | app.run(host='127.0.0.1', port=5000) | ||
+ | EOF | ||
+ | |||
+ | ===Запускаем сервер=== | ||
+ | $ python3 webapp.py | ||
+ | |||
+ | ===Проверка работы=== | ||
+ | $ curl 127.0.0.1:5000 | ||
+ | Hello, World! | ||
+ | |||
+ | =Публикация приложения в Nginx UNIT= | ||
+ | |||
+ | ==Подготовка приложения на компьютере пользователя== | ||
+ | |||
+ | ===Активация окружения conda для пользователя=== | ||
+ | |||
+ | /opt/anaconda/bin/conda init bash | ||
+ | |||
+ | затем перезапустить эмулятор терминала | ||
+ | |||
+ | После успешного перезапуска эмулятора терминала приглашение командной строки должно выглядеть так: | ||
+ | |||
+ | (base) user@prdb-seat webapp $ | ||
+ | |||
+ | ===Создание каталога с проектом=== | ||
+ | |||
+ | mkdir ~/my_project | ||
+ | cd ~/my_project | ||
+ | |||
+ | <pre> | ||
+ | cat << 'EOF' > main.py | ||
+ | from flask import Flask | ||
+ | app = Flask(__name__) | ||
+ | |||
+ | @app.route('/') | ||
+ | def hello_world(): | ||
+ | return 'Hello, World!' | ||
+ | EOF | ||
+ | </pre> | ||
+ | |||
+ | ===Создание и активация виртуального окружения посредством conda=== | ||
+ | |||
+ | Переход в каталог проекта | ||
+ | |||
+ | cd ~/my_project | ||
+ | |||
+ | Создание виртуального окружения venv для python версии 3.9 | ||
+ | conda create -p venv python=3.9 | ||
+ | |||
+ | Активация виртуального окружения venv | ||
+ | conda activate venv | ||
+ | |||
+ | Приглашение командной строки должно выглядеть так: | ||
+ | |||
+ | (venv) user@prdb-seat my_project $ | ||
+ | |||
+ | ===Установка зависимостей в виртуальное окружение=== | ||
+ | |||
+ | Например, для установки модуля flask для обеспечения запуска приложения | ||
+ | |||
+ | conda install -p venv flask --offline | ||
+ | |||
+ | ===Деактивация виртуального окружения venv=== | ||
+ | |||
+ | conda deactivate | ||
+ | |||
+ | Приглашение командной строки должно измениться на: | ||
+ | |||
+ | (base) user@prdb-seat my_project $ | ||
+ | |||
+ | Ещё раз | ||
+ | conda deactivate | ||
+ | |||
+ | Приглашение командной строки должно измениться на: | ||
+ | |||
+ | user@prdb-seat my_project $ | ||
+ | |||
+ | ===Результат=== | ||
+ | |||
+ | Все файлы и каталоги внутри каталога | ||
+ | |||
+ | ~/my_project | ||
+ | |||
+ | необходимо будет скопировать на сервер с Nginx UNIT, на который необходимо выполнить публикацию приложения | ||
+ | |||
+ | ==Публикация приложения на сервере== | ||
+ | |||
+ | ===Исходные данные=== | ||
+ | |||
+ | Мы исходим из того, что на сервере Nginx UNIT имеется аккаунт с логином | ||
+ | |||
+ | user01 | ||
+ | |||
+ | и паролем | ||
+ | |||
+ | user01 | ||
+ | |||
+ | . Внутри домашнего каталога пользователя существует каталог | ||
+ | |||
+ | app_python | ||
+ | |||
+ | ,для публикации созданного на компьютере пользователя приложения на Python 3.9. | ||
+ | |||
+ | Каталогом для виртуального окружения является каталог | ||
+ | |||
+ | venv | ||
+ | |||
+ | , который находится внутри каталога для публикации приложения. | ||
+ | |||
+ | Приложение будет опубликовано на порту 8080 сервера. | ||
+ | |||
+ | Имя приложения в конфигурационном файле будет | ||
+ | |||
+ | app1 | ||
+ | . | ||
+ | |||
+ | ===Подготовка конфигурации сервера=== | ||
+ | |||
+ | Переходим в домашний каталог | ||
+ | |||
+ | cd ~ | ||
+ | |||
+ | Создаём конфигурационный файл | ||
+ | |||
+ | <pre> | ||
+ | cat << 'EOF' > config.json | ||
+ | { | ||
+ | "listeners": { | ||
+ | "*:8080": { | ||
+ | "pass": "applications/app1" | ||
+ | } | ||
+ | }, | ||
+ | "applications": { | ||
+ | "app1": { | ||
+ | "type": "python 3.9", | ||
+ | "path": "/home/user01/app_python/", | ||
+ | "home": "/home/user01/app_python/venv", | ||
+ | "module": "main", | ||
+ | "callable": "app", | ||
+ | "user": "user01", | ||
+ | "group": "user01" | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | EOF | ||
+ | </pre> | ||
+ | |||
+ | |||
+ | ===Копирование приложения на сервер=== | ||
+ | |||
+ | Переход в каталог приложения | ||
+ | |||
+ | cd ~/my_project | ||
+ | |||
+ | Копирование средствами scp (по протоколу ssh) приложения с компьютера пользователя на сервер публикации | ||
+ | |||
+ | scp -q -r venv main.py user01@10.207.149.220:/home/user01/app_python/ | ||
+ | |||
+ | |||
+ | ===Публикация (основы)=== | ||
+ | |||
+ | ====Просмотр состояния сервера==== | ||
+ | |||
+ | curl http://10.207.149.220:8443/config/ | ||
+ | |||
+ | |||
+ | ====Публикация конфигурации из файла==== | ||
+ | |||
+ | cd ~ | ||
+ | curl -X PUT -d@config.json http://10.207.149.220:8443/config/ | ||
+ | |||
+ | ====Удаления слушателя (listener-а)==== | ||
+ | |||
+ | curl -X DELETE http://10.207.149.220:8443/config/listeners/*:8080 | ||
+ | |||
+ | ====Удаление приложения==== | ||
+ | |||
+ | curl -X DELETE http://10.207.149.220:8443/config/applications/app1 | ||
+ | |||
+ | ====Перезапуск приложения==== | ||
+ | |||
+ | curl http://10.207.149.220:8443/control/applications/app1/restart | ||
+ | |||
+ | ==Проверка публикации приложения== | ||
+ | |||
+ | Согласно слушателю | ||
+ | |||
+ | <pre> | ||
+ | "*:8080": { | ||
+ | "pass": "applications/app1" | ||
+ | } | ||
+ | </pre> | ||
+ | |||
+ | из конфигурационного файла | ||
+ | |||
+ | config.json | ||
+ | |||
+ | приложение должно работать на IP-адресе сервера публикации на порту 8080. | ||
+ | |||
+ | В нашем случае это адрес: | ||
+ | |||
+ | http://10.207.149.220:8080 | ||
+ | |||
+ | Для проверки необходимо открыть этот адрес в браузере |
Текущая версия на 08:45, 9 марта 2023
Содержание
Установка
Установка интерпретатора Python 3
apt-get install python3
Установка модуля venv
Python 3.3+ поставляется с модулем venv.
Виртуальное окружение (venv)
Виртуальное окружение (virtual environment) — это каталог, в который устанавливаются некоторые исполняемые файлы и скрипты. Среди файлов есть python для выполнения скриптов и pip для установки других модулей в окружении. Также есть скрипты для активации окружения в различных командных облочках (по одному для bash, csh и fish). По сути, виртуальное окружение имитирует полную системную установку Python и всех необходимых модулей, не вмешиваясь в работу системы, на которой будет запускаться приложение.
Создание нового venv
python3 -m venv /path/to/new/virtual/environment
Активация venv
Для активации виртуального окружения используйте один из имеющихся скриптов для вашей командной оболочки. Пример для bash:
$ source envname/bin/activate (envname) $
Справка по модулю
$ python3 -m venv --help usage: venv [-h] [--system-site-packages] [--symlinks | --copies] [--clear] [--upgrade] [--without-pip] [--prompt PROMPT] [--upgrade-deps] ENV_DIR [ENV_DIR ...] Creates virtual Python environments in one or more target directories. positional arguments: ENV_DIR A directory to create the environment in. options: -h, --help show this help message and exit --system-site-packages Give the virtual environment access to the system site-packages dir. --symlinks Try to use symlinks rather than copies, when symlinks are not the default for the platform. --copies Try to use copies rather than symlinks, even when symlinks are the default for the platform. --clear Delete the contents of the environment directory if it already exists, before environment creation. --upgrade Upgrade the environment directory to use this version of Python, assuming Python has been upgraded in-place. --without-pip Skips installing or upgrading pip in the virtual environment (pip is bootstrapped by default) --prompt PROMPT Provides an alternative prompt prefix for this environment. --upgrade-deps Upgrade core dependencies: pip setuptools to the latest version in PyPI Once an environment has been created, you may wish to activate it, e.g. by sourcing an activate script in its bin directory.
Способы создания venv
Создание виртуального окружения с символическими ссылками на интерпретатор Python
По умолчанию виртуальные окружения создаются с использованием стандартного системного Python. Файл bin/python — это просто символическая ссылка на системный python:
$ ls -l envname/bin/python lrwxrwxrwx 1 foo foo 15 янв 29 18:48 envname/bin/python -> /usr/bin/python
Создание виртуального окружения с копией интерпретатора Python
$ python3 -m venv envname --copies $ ls envname/bin/python -l -rwxr-xr-x 1 vladt vladt 5872328 фев 23 00:00 envname/bin/python
Flask
Установка
$ pip install Flask
Простейший сервер
Собираем сервер
cat << EOF > webapp.py from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello, World!' app.run(host='127.0.0.1', port=5000) EOF
Запускаем сервер
$ python3 webapp.py
Проверка работы
$ curl 127.0.0.1:5000 Hello, World!
Публикация приложения в Nginx UNIT
Подготовка приложения на компьютере пользователя
Активация окружения conda для пользователя
/opt/anaconda/bin/conda init bash
затем перезапустить эмулятор терминала
После успешного перезапуска эмулятора терминала приглашение командной строки должно выглядеть так:
(base) user@prdb-seat webapp $
Создание каталога с проектом
mkdir ~/my_project cd ~/my_project
cat << 'EOF' > main.py from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello, World!' EOF
Создание и активация виртуального окружения посредством conda
Переход в каталог проекта
cd ~/my_project
Создание виртуального окружения venv для python версии 3.9
conda create -p venv python=3.9
Активация виртуального окружения venv
conda activate venv
Приглашение командной строки должно выглядеть так:
(venv) user@prdb-seat my_project $
Установка зависимостей в виртуальное окружение
Например, для установки модуля flask для обеспечения запуска приложения
conda install -p venv flask --offline
Деактивация виртуального окружения venv
conda deactivate
Приглашение командной строки должно измениться на:
(base) user@prdb-seat my_project $
Ещё раз
conda deactivate
Приглашение командной строки должно измениться на:
user@prdb-seat my_project $
Результат
Все файлы и каталоги внутри каталога
~/my_project
необходимо будет скопировать на сервер с Nginx UNIT, на который необходимо выполнить публикацию приложения
Публикация приложения на сервере
Исходные данные
Мы исходим из того, что на сервере Nginx UNIT имеется аккаунт с логином
user01
и паролем
user01
. Внутри домашнего каталога пользователя существует каталог
app_python
,для публикации созданного на компьютере пользователя приложения на Python 3.9.
Каталогом для виртуального окружения является каталог
venv
, который находится внутри каталога для публикации приложения.
Приложение будет опубликовано на порту 8080 сервера.
Имя приложения в конфигурационном файле будет
app1
.
Подготовка конфигурации сервера
Переходим в домашний каталог
cd ~
Создаём конфигурационный файл
cat << 'EOF' > config.json { "listeners": { "*:8080": { "pass": "applications/app1" } }, "applications": { "app1": { "type": "python 3.9", "path": "/home/user01/app_python/", "home": "/home/user01/app_python/venv", "module": "main", "callable": "app", "user": "user01", "group": "user01" } } } EOF
Копирование приложения на сервер
Переход в каталог приложения
cd ~/my_project
Копирование средствами scp (по протоколу ssh) приложения с компьютера пользователя на сервер публикации
scp -q -r venv main.py user01@10.207.149.220:/home/user01/app_python/
Публикация (основы)
Просмотр состояния сервера
curl http://10.207.149.220:8443/config/
Публикация конфигурации из файла
cd ~ curl -X PUT -d@config.json http://10.207.149.220:8443/config/
Удаления слушателя (listener-а)
curl -X DELETE http://10.207.149.220:8443/config/listeners/*:8080
Удаление приложения
curl -X DELETE http://10.207.149.220:8443/config/applications/app1
Перезапуск приложения
curl http://10.207.149.220:8443/control/applications/app1/restart
Проверка публикации приложения
Согласно слушателю
"*:8080": { "pass": "applications/app1" }
из конфигурационного файла
config.json
приложение должно работать на IP-адресе сервера публикации на порту 8080.
В нашем случае это адрес:
http://10.207.149.220:8080
Для проверки необходимо открыть этот адрес в браузере