Изменение конфигурации сервиса выполнения скриптов

После первого запуска контейнера python-script-service сервиса в папке /docker-volume/python-script-service сервиса будет создан файл start-script.sh – это файл скрипта, который будет запускаться при запуске контейнера. В нём может быть написана логика настраивающая контейнер, может быть установлен нужный интерпретатор python и установлены нужные пакеты.

Настройка пути до интерпретатора python

Чтобы настроить путь до интерпретатора python, который будет вызывать сервис, есть несколько вариантов (перечислены в порядке увеличения приоритета от меньшего к большему):

  1. По умолчанию под Linux сервис будет использовать путь "/usr/bin/python", а под Windows "C:\Program Files (x86)\Python38-32\python".

  2. Если в системе определена переменная окружения с именем "SCRIPTEXECUTOR_PythonPath", то её значение будет использовано, как путь до интерпретатора.

  3. В сетевой папке сервиса есть файл config.json, если в нём указать значение свойства "PythonPath", то будет использовано оно.

Настройка окружения в закрытом контуре

Так как сервис позволяет выполнить собственный bash-скрипт при запуске docker-контейнера, который будет иметь доступ к docker-контейнеру под администраторскими правами и папке хвостового сервера, доступной через сетевую папку (настраивается при запуске docker-контейнера), то есть множество способов настроить docker-контейнер сервиса, без интернета.

Например, можно использовать offline-репозиторий: https://help.ubuntu.com/community/AptGet/Offline/Repository/.

А для установки python-пакетов без интернета, использовать wheel: https://dizballanze.com/ru/python-wheels-dlia-bystroi-ustanovki-zavisimostei/.

Также возможна установка напрямую из исходного кода: https://www.tecmint.com/install-python-in-linux/.

Какой способ установки выбрать?

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

Необходимо установить python-пакет

Скорее всего самым простым способом установить python-пакет будет способ установки с использованием wheel – выбирайте его тогда, когда этот пакет можно поставить с использованием pip. Поищите этот пакет на сайте: https://pypi.org/ или информацию об установке через pip на странице этого пакета, а дальше посмотрите пример установки pytorch через wheel и затем адаптируйте инструкцию к установке того конкретного пакета, который вам нужно установить. Важным нюансом установки через wheel является то, что вам нужно выяснить полный список пакетов, от которых зависит пакет, который вы ставите и явно прописать этот список в файл requirements.txt. Чтобы выяснить этот список, вы можете, например, установить нужный вам пакет через pip на свежеустановленной операционной системе такой же, какая используется сейчас в сервисе выполнения скриптов (на данный момент это Ubuntu Bionic) и посмотреть какие пакеты дополнительно при этом ставятся.

Если через pip поставить пакет нельзя и он присутствует в репозитории ubuntu, вы можете использовать оффлайн-репозиторий для его установки.

Если в репозитории он тоже отсутствует, то остаётся способ установки с использованием исходного кода – идите на страничку нужного вам пакета и ищите инструкцию по установке из исходников, если инструкции там нет, то нужно поискать эту инструкцию с использованием какого-либо поисковика, например google.com.

Необходимо установить python-интерпретатор

Рекомендуем установку из исходников, пример установки интерпретатора python приводится ниже.

Установка интерпретатора python из исходников

Находим ссылку на исходники нужной нам версии python: https://www.python.org/downloads/release/.

Я буду устанавливать версию 3.7.5: https://www.python.org/ftp/python/3.7.5/Python-3.7.5.tgz.

На машине имеющей доступ к интернету скачиваем их:

wget https://www.python.org/ftp/python/3.7.5/Python-3.7.5.tar.xz

Переносим на машину, не имеющую доступа к интернету, и кладём их в папку доступную для сервиса выполнения скриптов. Выполняем команду:

tar xJf Python-3.7.5.tar.xz

Пишем следующий текст в файл start-script.sh:

/mnt/volume/Python-3.7.5/configure
make -C /mnt/volume/Python-3.7.5
make -C /mnt/volume/Python-3.7.5 install

Теперь при старте docker-контейнера будет установлен интерпретатор python 3.7.5.

Обратите внимание, что для того, чтобы сервис использовал его, необходимо в config.json сервиса выполнения скриптов написать путь до нового установленного интерпретатора: "/usr/local/bin/python3".

Скрипт для проверки используемой версии python:

import sys
print(sys.version)

Установка пакета pytorch для интерпретатора python 2.7 с использованием wheel

  1. Работы происходят на машине, имеющей доступ к интернету 

1.1 Устанавливаем python, pip и wheel:

# apt-get update && apt-get install -y python-pip
# pip install wheel

1.2 Создаём папку wheels2:

# mkdir wheels2

1.3 Создаём файл requirements.txt:

# touch requirements.txt

1.4 На сайте pytorch смотрим как установить его через pip: https://pytorch.org/get-started/locally/#start-locally.

Для python 2 нужно выполнить команду: 

# pip install torch==1.3.1+cpu torchvision==0.4.2+cpu -f https://download.pytorch.org/whl/torch_stable.html

Выполнять её не будем, просто возьмём оттуда названия пакетов, которые нам нужны.

1.5 В файл requirements.txt записываем следующий текст (названия пакетов, которые нужно установить из предыдущего пункта):

torch==1.3.1+cpu
torchvision==0.4.2+cpu

1.6 Выполняем команды:

# pip install -r requirements.txt -f https://download.pytorch.org/whl/torch_stable.html --user

(синтаксис: # pip install -r requirements.txt {ваши дополнительные параметры из pip install} --user )

# pip wheel -w wheels2/ -r requirements.txt --pre -f https://download.pytorch.org/whl/torch_stable.html

(синтаксис: # pip wheel -w wheels2/ -r requirements.txt --pre {ваши дополнительные параметры из pip install} )

1.7. Копируем файл requirements.txt в папку wheels2.

Теперь все необходимые пакеты находятся в папке wheels2, скачиваем эту  папку на накопитель и переносим на машину, на которой отсутствует доступ в интернет.


2. Работы происходят на машине, не имеющей доступ к интернету (в закрытом контуре)

2.1 Копируем папку wheels2 в папку, которая доступна с хостовой машины в сервис выполнения скриптов, в моём случае это папка:

/docker-volume/python-script-service

Это настраивается при запуске контейнера.

2.2 Переходим в папку и правим файл start-script.sh (должен появиться после первого запуска docker-контейнера в папке /docker-volume/python-script-service ).

В конец файла добавить строчку:

pip install --no-index -f /mnt/volume/wheels2/ -r /mnt/volume/wheels2/requirements.txt

2.3 Перезапустить сервис выполнения скриптов.

Теперь при запуске docker-контейнера будет установлен pytorch.

Проверить установку можно запустив в сервисе скрипт:

import torch
result = torch.cuda.is_available()

Установка пакета pytorch для интерпретатора python 3.6 с использованием wheel

На машине имеющий доступ к интернету устанавливаем python 3, pip и wheel.

apt-get update && apt-get install -y python3-pip
pip3 install wheel

На сайте pytorch смотрим, как установить его через pip: https://pytorch.org/get-started/locally/#start-locally.

Для python 3 нужно выполнить команду: 

pip3 install torch==1.3.1+cpu torchvision==0.4.2+cpu -f https://download.pytorch.org/whl/torch_stable.html

Выполнять её не будем, просто возьмём оттуда названия пакетов, которые нам нужны.

Создаём папку wheels3:

mkdir wheels3

Создаём файл requirements.txt:

touch requirements.txt
В файл requirements.txt записываем следующий текст (названия пакетов, которые нужно установить):
torch==1.3.1+cpu
torchvision==0.4.2+cpu

Выполняем команды:

pip3 install -r requirements.txt -f https://download.pytorch.org/whl/torch_stable.html --user
pip3 wheel -w wheels3/ -r requirements.txt --pre -f https://download.pytorch.org/whl/torch_stable.html

Теперь все необходимые пакеты находятся в папке wheels3, скачиваем их на носитель и переносим на машину, на которой отсутствует доступ в интернет и затем копируем их в папку, которая доступна с хостовой машины в сервис выполнения скриптов, в моём случае это папка:

/home/{username}/python-script-service

А внутри docker-контейнера это будет папка:

/mnt/volume

Это настраивается при запуске контейнера.

На хостовом сервере переходим в сетевую папку и правим файл start-script.sh (должен появиться после первого запуска docker-контейнера).

pip3 install --no-index -f /mnt/volume/wheels3/ -r /mnt/volume/requirements.txt

Теперь при запуске docker-контейнера будет установлен pytorch.

Проверить установку можно попробовав, запустив в сервисе скрипт:

import torch
result = torch.cuda.is_available()