Приложение Python — это исполняемый скрипт Python, который также может зависеть от некоторого общего кода Python, который существует в локальных модулях Python или Пакеты.
Чтобы развернуть приложение (любое приложение, не обязательно приложение Python), мы обычно запускаем какой-то процесс сборки, а затем копируем выходные данные сборки в заранее определенный каталог. местоположение на целевой машине. Целевой компьютер может быть тем же компьютером, который мы используем для разработки нашего приложения.
Если мы сделаем все вышеперечисленное, то нашими процессами будет легко управлять с помощью systemd. Мы можем написать служебный файл, который ссылается на исполняемый файл в известном месте.
Каков процесс разработки Python с помощью venv?
Код: Выделить всё
venv- Изолирует установку библиотек, необходимых одному проекту, от всех остальных проектов и операционной системы
- Это дает мне возможность создавать общие библиотеки Python, содержащие код Python, который должен использоваться несколькими исполняемыми процессами, входящими в один и тот же проект.
Код: Выделить всё
my-python-project/
bin/
webscraper-processes/
webscraper.py
html_processor.py
feature_extractor.py
database_uploader.py
local_library/
__init__.py
... other files ...
cron-download-process/
pycron-download-trigger.py
downloader.py
data-processor.py
database_uploader_2.py
lib_cron_download/
__init__.py
... other files ...
src/
lib_database/
__init__.py
... other files ...
lib_kafka/
__init__.py
... other files ...
test/
... tests ...
.venv/
bin/activate
... other files ...
pyproject.toml
- Существует несколько «групп» исполняемых файлов. Каждый исполняемый файл представляет собой микросервис, выполняющий некоторую функцию. Группа исполняемых файлов — это группа микросервисов. Каждая группа микросервисов выполняет набор связанных операций как часть последовательности или цепочки. Они работают вместе, чтобы выполнить какой-то процесс или операцию более высокого уровня. Исполняемые файлы в разных группах независимы.
- Хотя групповые веб-процессы и cron-download-process независимы, они используют некоторый общий код. Этот общий код находится в одной или нескольких общих библиотеках в каталоге src.
- Любой код, который используется группой, но не несколькими группами, помещается в «локальный» общий код. библиотека. (Я не совсем уверен, что это хорошая идея. Возможно, ее также следует добавить в src.)
Код: Выделить всё
venv- Для локального управления и установки внешних зависимостей. Сюда будут входить confluent-kafka, библиотека Python Kafka Confluent и sqlalchemy.
- Чтобы обеспечить механизм, позволяющий исполняемым сценариям Python «видеть» код общей библиотеки, который находится в каталоге src. В противном случае интерпретатор сможет видеть код только в текущем рабочем каталоге, который включает «локальные» библиотеки, но не «общие» библиотеки, которые используются обеими группами.
Я также недавно экспериментировал с поэзией и если я правильно понимаю, он предоставляет более удобный интерфейс для управления виртуальными средами. Я готов использовать что-то другое, кроме venv, если это обеспечивает более простой способ управления развертыванием.
Как это развернуть?
Я не до конца понимаю, как это развернуть и управлять жизненным циклом процесса с помощью systemd.
- Я знаю, что мне нужно выбрать какую-то цель для развертывания. Фиксированное местоположение, на которое systemd может ссылаться в служебных файлах, которые я напишу для использования systemd.
- Давайте выберем /opt/my-python-project/, что выглядит так: разумное расположение.
- Как мне «развернуть» код в это место?
- Простой подход — скопировать cp -r my-python-project/bin /opt/my-python-project/
- Но это не включает код общей библиотеки в src
- Я подозреваю, что код общей библиотеки должен быть встроен в колесо, и это колесо должно скопировать в /opt/my-python-project/dist/, а затем установить в какой-нибудь venv в /opt/my-python-project/ ?
- Должен ли код библиотеки в bin/webscraper-process и bin/cron-download-process быть также встроен в колесо?
- Нужен ли мне другой venv или подходящая альтернатива в целевом расположении /opt/my-python-project?
- Является ли мой подход фундаментально ошибочным, поскольку каталог проекта настройка структуры ошибочна? Есть ли лучший подход к использованию структуры каталогов и venv?
Подробнее здесь: https://stackoverflow.com/questions/782 ... th-systemd
Мобильная версия