Распространение кода на Python с помощью virtualenv? - PullRequest
11 голосов
/ 04 апреля 2011

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

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

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

Ответы [ 3 ]

6 голосов
/ 04 апреля 2011

Buildout - http://pypi.python.org/pypi/zc.buildout
Как пример, посмотрите на мой чистый проект: http://hg.jackleo.info/hyde-0.5.3-buildout-enviroment/src это только 2 файла, которые делают чудеса, больше над Makefile необязательно, но тогда вам понадобится bootstrap.py (Makeфайл загружает его, но он работает только в 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
Поскольку за него недавно проголосовали и, возможно, в качестве ответа (вероятно), я хочу сообщить о нескольких изменениях.

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

Этот проект hyde, вероятно, потерпит неудачу из-за критических изменений в buildout 2.

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

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

4 голосов
/ 04 апреля 2011

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

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

4 голосов
/ 04 апреля 2011

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

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

...