Распространение кода на python с virtualenv?

Я хочу распространять некоторый код python с несколькими внешними зависимостями на машины с установленным только базовым python (и пользователями, незнакомыми с easy_install и т.д.).

Мне было интересно, можно ли использовать virtualenv для этой цели? Я должен написать несколько скриптов bash, которые запускают virtualenv (с подходящими пакетами), а затем запускают мой код.. но это кажется несколько грязным, и мне интересно, если я повторно изобретаю колесо?

Существуют ли какие-либо простые решения для распределения кода python с зависимостями, которые в идеале не требуют sudo на клиентских машинах?

Ответ 1

Buildout - http://pypi.python.org/pypi/zc.buildout
Как образец посмотрите на мой чистый проект: http://hg.jackleo.info/hyde-0.5.3-buildout-enviroment/src его только 2 файла, которые делают магию, более чем Makefile является необязательным, но тогда вам понадобится bootstrap.py(Сделать файл загружает его, но он работает только в Linux). buildout.cfg - это основной файл, в котором вы пишете зависимость и настройку, как выполняется проект.
Чтобы загрузить bootstrap.py, просто скачайте с http://svn.zope.org/repos/main/zc.buildout/trunk/bootstrap/bootstrap.py
Затем запустите python bootstap.py и bin/buildout. Я не рекомендую устанавливать buildout локально, хотя это возможно, просто используйте одну загрузку загрузки.

Я должен признать, что buildout - это не самое простое решение, но его действительно мощное. Поэтому обучение стоит времени.

ОБНОВЛЕНИЕ 2014-05-30
Поскольку он был недавно опробован и использован как ответ (возможно), я хотел сообщить о нескольких изменениях.

Первое из - buildout теперь загружается из github https://raw.githubusercontent.com/buildout/buildout/master/bootstrap/bootstrap.py

Этот проект hyde, вероятно, потерпит неудачу из-за нарушения плагина 2.

Здесь вы можете найти более качественные образцы http://www.buildout.org/en/latest/docs/index.html, также я хочу предложить посмотреть "сбор ссылок, связанных с Buildout", может содержать информацию для вашего проекта.

Во-вторых, я лично больше в пользу setup.py script, который можно установить с помощью python. Подробнее о структуре яйца можно найти здесь http://peak.telecommunity.com/DevCenter/PythonEggs, и если это выглядит слишком страшно - найдите google (запрос для python egg). Это на самом деле более просто, на мой взгляд, чем buildout (определенно легче отлаживать), а также, вероятно, более полезно, поскольку он может быть проще распределен и установлен в любом месте с помощью virtualenv или глобально, где с buildout вы должны предоставить все постоянно создавая скрипты с источником.

Ответ 2

Для этой цели вы можете использовать такой инструмент, как PyInstaller. Ваше приложение будет отображаться как один исполняемый файл на всех платформах и включает зависимости. Пользователь даже не нуждается в Python!

См. пример моего пакета logview, который имеет зависимости от PyQt4 и ZeroMQ и включает в себя дистрибутивы для Linux, Mac OSX и Windows. созданный с помощью PyInstaller.

Ответ 3

Вы не хотите распространять свой virtualenv, если это то, что вы просите. Но вы можете использовать pip для создания файла требований - обычно называемого requirements.txt - и попросить пользователей создать virtualenv, а затем запустить pip install -r requirements.txt, который установит для них все зависимости.

См. Pip docs для описания формата файла требований и проект Pinax для примера проекта, который делает это очень хорошо.