Создание портативных приложений Django - нужна помощь - PullRequest
8 голосов
/ 07 декабря 2009

Я создаю приложение Django, которое я комфортно запускаю (test :)) на хосте Ubuntu Linux. Я хотел бы упаковать приложение без исходного кода и распространить его на другой рабочий компьютер. В идеале приложение может запускаться командой ./runapp, которая запускает сервер CherryPy, на котором выполняется код python / django.

Я обнаружил несколько способов сделать это:

  1. Распространение только файлов .pyc, сборка и установка всех требований на целевой машине.
  2. Использование одного из множества инструментов для упаковки приложений Python в распространяемый пакет.

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

Я попытался заморозить (не удалось), Cx_freeze (версия с простой установкой не удалась, версия из репозитория работает, но выходная информация приложения не удалась) и всплыла на dbuilder.py (которая должна работать, но не работает). на самом деле не работает - наверное). Если я правильно понимаю, большинство проблем возникают из-за того, что Django импортирует модули (пример), но я не знаю, как их решить.

Я буду более чем рад, если кто-нибудь предоставит в Интернете какие-либо советы или полезные ресурсы, касающиеся упаковки / распространения автономных приложений Django.

Ответы [ 2 ]

7 голосов
/ 07 декабря 2009

Я предлагаю вам основать ваш дистрибутив на setuptools (инструмент, улучшающий стандартный механизм дистрибутива Python distutils ).

Используя setuptools, вы сможете создать яйцо Python, содержащее ваше приложение. Метаданные яйца могут содержать список зависимостей, которые будут автоматически установлены easy_install (может включать Django + любые сторонние модули / пакеты, которые вы используете).

В дистрибутивах setuptools / distutils могут быть сценарии, которые будут установлены на /usr/bin, поэтому вы можете включить свой сценарий runapp.

Если вы не знакомы с virtualenv , я советую вам также взглянуть на это. Это способ создания изолированных сред Python, он будет очень полезен для тестирования вашего дистрибутива.

Вот сообщение в блоге с некоторой информацией о virtualenv, а также обсуждение нескольких других полезных инструментов: Инструменты Modern Python Hacker: Virtualenv, Fabric and Pip

0 голосов
/ 07 декабря 2009

Опция --noreload остановит автоматическое определение Django модулей, которые были изменены. Я не знаю, исправит ли это, но может.

Другой вариант (и он не идеален) - скрыть некоторые из ваших основных функций, упаковав их в dll, который будет вызывать ваш простой текстовый код.

...