Объедините скрипт Python и зависимости в один файл

У меня есть несколько скриптов, в которых была собственная копия некоторых функций, поэтому я извлек эти функции в модуль и попросил скрипты импортировать функцию. Эти скрипты должны быть скопированы на несколько серверов Linux и выполнены. Когда скрипты работали автономно, я просто копировал файлы на серверы и запускал «python».

У меня есть центральный сервер управления, который будет копировать и запускать сценарии на разных серверах.

Я прочитал о яйцах питона, но мог бы воспользоваться некоторыми советами по выбору метода. Я делаю это сегодня, просто копирую и запускаю скрипт python. Поскольку это работает нормально, я подумал, может быть, есть способ связать сами сценарии с (внутренним) модулем, от которого они зависят, скопировать пакет на серверы и выполнить их. Не понимаю, зачем мне устанавливать что-либо с помощью «pip».

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

Большинство моих серверов работают под управлением Python 2.6, но у меня есть некоторые из них, работающие под управлением Python 2.4 и 3.2.

Привет, Кеннет


person kenneho    schedule 30.01.2015    source источник


Ответы (2)


Возможно, вы захотите изучить библиотеку Twitter PEX, которая может создавать исполняемые файлы из пакетов python: https://pex.readthedocs.org/en/latest/whatispex.html

Файлы .pex - это просто тщательно сконструированные zip-файлы с питоном #! / usr / bin / env и специальным __main.py__

person icio    schedule 15.03.2015

Обновление 2016 г.: wagon помогает создавать пакеты wheel с зависимостями для автономной установки. .


Для простых проектов достаточно хранить весь исходный код в одной папке и копировать его целиком. Вы можете использовать git, чтобы отправить свой код в центральный репозиторий и вытащить его на свой сервер, не создавая никаких пакетов. . Fabric и Ansible - два инструмента, которые помогут автоматизировать процесс развертывания. (Например, удаленно запустите git pull и удалите все свои pyc файлы).

Если у вас есть общие зависимости между проектами, pip и wheels - современные альтернативы яйцам:

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

$ tempdir=$(mktemp -d /tmp/wheelhouse-XXXXX)
$ pip wheel -r requirements.txt --wheel-dir=$tempdir
$ cwd=`pwd`
$ (cd "$tempdir"; tar -cjvf "$cwd/bundled.tar.bz2" *)

Когда у вас есть пакет, вы можете удалить его, используя:

$ tempdir=$(mktemp -d /tmp/wheelhouse-XXXXX)
$ (cd $tempdir; tar -xvf /path/to/bundled.tar.bz2)
$ pip install --force-reinstall --ignore-installed --upgrade --no-index --use-wheel --no-deps $tempdir/*

(Из pip docs < / а>)

person Udi    schedule 15.03.2015
comment
Отлично, спасибо за совет. Я продолжу хранить все источники в одном zip-файле, пока не увижу необходимость разделять зависимости между проектами. - person kenneho; 27.03.2015