Объединить Python-скрипт и зависимости в один файл
У меня есть несколько сценариев, которые имеют свою собственную копию некоторых функций, поэтому я извлек эти функции в модуль и заставил сценарии импортировать функцию. Эти сценарии должны быть скопированы на несколько серверов Linux и выполнены. Когда скрипты работали автономно, я просто копировал файлы на серверы и выполнял "python".
У меня есть центральный сервер управления, который будет копировать и запускать сценарии на разных серверах.
Я немного читал о питонских яйцах, но мог бы воспользоваться некоторыми советами по методу. То, как я это делаю сегодня, - это скопировать и просто запустить скрипт python. Поскольку это работает нормально, я подумал, что, возможно, есть способ связать сами сценарии с (внутренним) модулем, от которого они зависят, скопировать пакет на серверы и выполнить их. Не понимаю, почему мне нужно что-то устанавливать, используя "pip".
Теперь, какую настройку вы бы порекомендовали, ребята? Должен ли я собирать яйца на своем локальном компьютере, и чтобы сервер управления скопировал файл яйца на серверы? Я бы предпочел скопировать все, что нужно серверу, с сервера управления, вместо того, чтобы серверы сами опускали зависимости, чтобы мне не пришлось пробивать больше дыр во всех брандмауэрах. Поскольку яйца, как правило, должны разрушать зависимости, может быть, яйца - не тот путь?
Большинство моих серверов работают под управлением Python 2.6, но у меня есть некоторые под управлением Python 2.4 и 3.2.
Привет, Кеннет
2 ответа
Возможно, вы захотите посмотреть на библиотеку Twitter PEX, которая может создавать исполняемые файлы из пакетов python: https://pex.readthedocs.org/en/latest/whatispex.html
Файлы.pex - это просто тщательно скомпонованные zip-файлы с #!/usr/bin/env python и специальными
__main.py__
Обновление 2016: wagon помогает создавать пакеты колес с зависимостями для автономной установки.
Для простых проектов достаточно хранить все исходники в одной папке и копировать их целиком. Вы можете использовать git, чтобы отправить ваш код в центральное хранилище и перенести его на ваш сервер, не создавая пакетов. Fabric и Ansible - это два инструмента, которые могут помочь вам автоматизировать процесс развертывания. (Например, удаленно запустить git pull
и удалите все свои pyc
файлы).
Если у вас есть общие зависимости между проектами, pip и wheel являются современной альтернативой яйцам:
Вы можете создать простой пакет, содержащий все зависимости, которые вы хотите установить, используя.
$ 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/*
(Из пип документации)