Как связать зависимости Python в IronWorker?

Я пишу простой IronWorker на Python для работы с API AWS.

Для этого я хочу использовать библиотеку boto, которая распространяется через PiPy. Библиотека boto не устанавливается по умолчанию в среде выполнения IronWorker.

Как я могу связать зависимость библиотеки boto с моим кодом IronWorker?

В идеале я надеюсь, что смогу использовать что-то вроде связки гемов, доступной для Ruby IronWorkers - то есть в myRuby.worker уточнить

gemfile '../Gemfile', 'common', 'worker' # merges gems from common and worker groups

В примере Python Loggly я вижу, что используется библиотека hoover:

#here we have to include hoover library with worker.
hoover_dir = os.path.dirname(hoover.__file__)
shutil.copytree(hoover_dir, worker_dir + '/loggly') #copy it to worker directory

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

Какой официальный / правильный способ использования сторонних библиотек в Python IronWorkers?

2 ответа

Решение

[править] Мы немного поработали над нашим набором инструментов, так как этот ответ был написан и принят. Ответ моего коллеги ниже - рекомендуемый курс для продвижения вперед.[/ Edit]

Я написал клиентскую библиотеку Python для IronWorker. Я также работаю в Iron.io.

Если вы используете клиентскую библиотеку Python, самый простой (и рекомендуемый) способ сделать это - просто скопировать установленную папку библиотеки и включить ее при загрузке пакета. Вот что пример Python Loggly делает выше. Как вы сказали, это не указывает версию или откуда скачать библиотеку, потому что это не волнует. Он просто берет тот, который установлен в вашей системе, и использует его. Все, что вы получите, когда введете "import boto" на локальном компьютере, будет загружено.

Другой вариант - использовать наш CLI для загрузки вашего работника с файлом.worker.

Чтобы сделать это, вот что вам нужно сделать:

Создайте файл botoworker.worker:

runtime "binary"
build 'pip install --install-option="--prefix=`pwd`/pips" boto'
file 'botoworker.py'
exec "botoworker.sh"

Эта вторая строка - команда pip, которая будет запущена для установки зависимости. Вы можете изменить его так, как если бы вы запускали любую команду pip из командной строки. Эта команда будет выполняться на рабочем месте на этапе "сборки", поэтому она выполняется только один раз, а не каждый раз, когда вы запускаете задачу.

Третья строка должна быть изменена на файл Python, который вы хотите запустить - это ваш рабочий файл Python. Вот тот, который мы использовали для проверки этого:

import boto

Если вы сохраните это как botoworker.py, вышеприведенное должно работать без каких-либо изменений.:)

Четвертая строка - это сценарий оболочки, который фактически запускает ваш рабочий. Я включил тот, который мы использовали ниже. Просто сохраните его как botoworker.sh, и вам не придется беспокоиться об изменении файла.worker выше.

PYTHONPATH="$HOME/pips/lib/python2.7/site-packages:$PYTHONPATH" python botoworker.py "$@"

Вы заметите, что это относится к вашему файлу Python - если вы не называете свой файл Python botoworker.py, не забудьте также изменить его здесь. Все, что для этого нужно, - настроить PYTHONPATH на включение установленной библиотеки, а затем запустить файл Python.

Чтобы загрузить это, просто убедитесь, что у вас установлен CLI (gem install iron_worker_ng, убедитесь, что ваша версия Ruby 1.9.3 или выше), а затем запустите "iron_worker upload botoworker" в вашей оболочке из той же директории, что и файл botoworker.worker. в.

Надеюсь это поможет!

Более новая версия iron_worker имеет встроенную поддержку pip команда. Итак, вам нужно:

runtime "python"
exec "something.py"

pip "boto"
pip "someotherpip"

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