Я сделал это пару лет назад для приложения Django, работающего в качестве локального демона. Он был запущен Twisted и упакован py2app для Mac и py2exe для Windows. Был и браузер, и фронтэн Air, поразивший его. По большей части это работало довольно хорошо, но я не смог развернуть его в дикой природе, потому что более крупный проект был отложен. Прошло много времени, и я немного заржавел в деталях, но вот несколько советов:
IIRC, наиболее проблематичной была загрузка Python C-расширений. У меня был модуль ассемблера Intel, написанный с помощью команд «asm», которые мне нужно было загрузить, чтобы получить низкоуровневые системные данные. Это заняло некоторое время, чтобы начать работать на обеих платформах. Если можете, старайтесь избегать расширений C.
Вам определенно понадобится установщик. Скорее всего, приложение будет работать в фоновом режиме, поэтому вам нужно будет пометить его как службу Windows, демон Unix или приложение для запуска Mac.
В вашем инсталляторе вы захотите указать способ определения свободного локального порта TCP. Возможно, вам придется написать небольшую подпрограмму-заглушку, которую запускает установщик, или использовать встроенную в сценарий программу установки, чтобы найти порт, который не был занят, и сохранить его в файле конфигурации. Затем вы загружаете файл конфигурации внутри вашего settings.py и любого внешнего интерфейса, который вы собираетесь развернуть. Это общий порт. Или вы можете просто выбрать случайное число и надеяться, что никакие другие службы на рабочем столе не будут вам мешать: -)
Если ваш внешний и внутренний приложения являются отдельными приложениями, вам нужно разработать API для них, чтобы они могли общаться друг с другом. Убедитесь, что вы указали флаг для возврата данных как в необработанном, так и в читаемом виде. Это действительно помогает в отладке.
Если вы хотите, чтобы Django мог отправлять уведомления пользователю, вам нужно интегрироваться с чем-то вроде Growl или получить расширения Python для Windows, чтобы вы могли вызывать всплывающие уведомления тостера.
Возможно, вы захотите придерживаться SQLite для базы данных, и в этом случае вам нужно будет убедиться, что вы используете семафоры для обработки нескольких запросов, претендующих на базу данных (или любой другой общий ресурс). Если ваше приложение доступно через браузер, пользователи могут открыть несколько окон и одновременно нажать на приложение. Если вы используете пользовательский интерфейс (native, Air и т. Д.), То вы можете контролировать, сколько экземпляров запущено в данный момент времени, поэтому это не будет такой большой проблемой.
Вам также понадобится какой-то доступ к средствам ведения журнала локальной системы, поскольку приложение будет работать в фоновом режиме и убедитесь, что вы перехватываете все свои исключения и направляете их в системный журнал. Большой проблемой было устранение проблем с запуском службы Windows. Это было бы невозможно без входа в систему.
Будьте осторожны с жестко закодированными путями, если хотите остаться кроссплатформенным. Возможно, вам придется положиться на установщик, чтобы написать запись файла конфигурации с фактическим путем установки, который вам нужно будет загрузить при запуске.
Проверка фактического развертывания, особенно на различных межсетевых экранах. Некоторые настольные брандмауэры довольно агрессивны в отношении блокировки доступа к сетевым службам, принимающим входящие запросы.
Это все, что я могу придумать. Надеюсь, это поможет.