невозможно использовать модули Python на отдельных этапах рабочего процесса popper

У меня есть requirements.txt файл, который я использую при выполнении следующего рабочего процесса:

steps:
  - id: install-python-modules
    uses: popperized/python-actions@master
    args:
    - pip install -r requirements.txt

  - id: run-script
    uses: popperized/python-actions@master
    args:
    - python my_script.py

Проблема в том, что когда run-script step работает, в нем нет модулей, которые были установлены на первом шаге.

1 ответ

Решение

Проблема в том, что когда pip install запускается как часть первого шага, он устанавливает модули python в /usr/localпапка внутри контейнера. Поскольку на втором этапе создается экземпляр другого контейнера, эти модули недоступны. Более подробно это объясняется в официальной документации Popper, где объясняются отношения между пространствами имен контейнера и хост-машиной, на которой находится рабочий процесс.

Использование официального образа докера python и явная работа с virtualenv может помочь:

steps:
- id: install-requirements
  uses: docker://python:3.8-slim-buster
  runs: [bash, -uec]
  args:
  - |
    python -mvenv venv/
    source venv/bin/activate
    pip install -r requirements.txt

- id: run-sim
  uses: docker://python:3.8-slim-buster
  runs: [bash, -uec]
  args:
  - |
    source venv/bin/activate
    python my_script.py

первый шаг создает виртуальную среду в папке, где popper run вызывается из (a venv/папку) и устанавливает туда требования. Второй загружает среду перед запуском скрипта.

Вам может быть интересно, как python:3.8-slim-busterбыл выбран. Как правило, в docker hub есть три типа официальных образов: на основе 1) полного debian, 2) debian-slim и 3) alpine. Обычно я использую последний стабильный выпуск python (на сегодняшний день 3.8) и начинаю с alpine, потому что он занимает мало места по сравнению с образами debian. Если требования используют системные библиотеки (например,numpy), alpine обычно не работает, потому что для него нет предварительно скомпилированных двоичных файлов (колес), поэтому я перехожу к тонкому варианту образов на основе debian

Другие вопросы по тегам