У меня есть задача упаковки и доставки коммерческого пакета приложений, который будет включать:
- библиотека python (разработанная нами)
- некоторые программы python в зависимости от библиотеки выше
- дополнительные библиотеки, не разработанные нами, но которые являются зависимостями нашей библиотеки.
- полная установка python (python 2.6)
- дополнительные материалы, библиотеки и программы на других языках. Здесь не проблема, так как они не подключены к вышеуказанным машинам, и текущий процесс доставки уже работает.
Пакет поставляется в Linux, OSX и Windows. В Linux он распространяется как простой tar.gz. Пользователь просто распаковывает tar.gz и source
предоставленный bash script в .bashrc
, чтобы среда была правильно настроена. На mac, это dmg. На окнах я понятия не имею. Сегодня парня окон нет, но я вижу, что exe создается каким-то образом.
Теперь я более подробно объясню вышеприведенные моменты.
Наша библиотека Python
Мы не хотим выделять источники, поэтому мы хотим предоставить только скомпилированные файлы python. Лучшая стратегия, чтобы сделать их еще более защищенными от несанкционированного доступа, приветствуется, даже если это связано с глубоким взломом (например, я когда-то видел, что магия делала импорт материалов из .zip, который был "поврежден" ad-hoc). В настоящее время в библиотеке нет кода уровня C или аналогичного кода, зависящего от платформы, но это скоро изменится. Поэтому мы должны предоставить скомпилированный .so
для платформы с помощью pyc.
Очевидно, что эта библиотека будет отправлена в пакет вместе с остальной частью нашего приложения. Поэтому он будет установлен на загруженном комплекте. По этой причине он должен быть полностью перемещаем, и пользователь должен каким-то образом (вручную или через наш env script) добавить местоположение необработанного пакета в PYTHONPATH, чтобы интерпретатор мог его найти.
Наши программы на Python
Мы отправим приложения в наш пакет, и эти приложения будут зависеть от нашей библиотеки. Код этих приложений должен быть либо видимым пользователем (чтобы он мог узнать, как использовать интерфейс библиотеки), либо не видно (для тех утилит, которые мы хотим сохранить с закрытым исходным кодом), поэтому требуется двойной подход.
Дополнительные библиотеки
Наша библиотека зависит от сторонних библиотек, которые нам придется отправлять, так что пользователь работает без какой-либо зависимости. Очевидно, что эти библиотеки будут установлены нами в комплекте, но мы должны надеяться, что они не будут хранить путь установки где-то во время сборки, потому что это сделает их неперемещаемыми.
Наш питон
Мы отправим нашу версию python, которую предположим, что пользователь запустится, чтобы получить доступ к нашему script. Это связано с тем, что мы хотим быть уверенными в запущенной версии python. Кроме того, мы можем немного изменить исполняемый файл или стандартную библиотеку. Возможно, у нас есть проблема с взаимодействием этого питона со стандартным питоном, и если пользователю нужна определенная библиотека на нашем питоне, она должна будет установить ее в нашем комплекте, а не на стандартном месте для библиотек.
Запрос
Мне нужно решить эту задачу. Я видел это, но никогда не делал этого лично, поэтому мне нужна ваша точка зрения. То, что я представил выше, - это то, как я думаю, что все должно работать, в соответствии с тем, как все работает сейчас, но это может быть неправильно. Любые намеки, причуды, предложения или стратегии для успешного развертывания приветствуются. Учитывая сложность вопроса, я уже объявляю о высокой награде, согласно лучшему ответу, который я могу получить.