Изменение конфигурации сервиса выполнения скриптов
После первого запуска контейнера python-script-service сервиса в папке /docker-volume/python-script-service сервиса будет создан файл start-script.sh - это файл скрипта, который будет запускаться при запуске контейнера. В нём может быть написана логика настраивающая контейнер, может быть установлен нужный интерпретатор python и установлены нужные пакеты.
Настройка пути до интерпретатора python
Чтобы настроить путь до интерпретатора python, который будет вызывать сервис есть несколько вариантов (перечислены в порядке увеличения приоритета от меньшего к большему):
По умолчанию под Linux сервис будет использовать путь "/usr/bin/python", а под Windows "C:\Program Files (x86)\Python38-32\python"
Если в системе определена переменная окружения с именем "SCRIPTEXECUTOR_PythonPath" то её значение будет использовано, как путь до интерпретатора
В папке шары сервиса есть файл 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 Устанавливаем 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()