Меня не устраивает способ, которым я в настоящее время развертываю код Python, и мне было интересно, есть ли лучший способ. Сначала объясню что делаю, потом недостатки:
- Когда я разрабатываю, я использую virtualenv для изоляции зависимостей и установки всех библиотек с помощью pip. Сам Python исходит из моей ОС (Ubuntu)
- Затем я встраиваю свой код в пакет debian «.deb», состоящий из моего исходного дерева и пакета моих зависимостей.
- Затем, когда я развертываю, я перестраиваю среду virtualenv, загружаю foo/bin/activate и затем запускаю свою программу (под выскочкой Ubuntu)
Вот проблемы:
- Пакет pip довольно большой и значительно увеличивает размер пакета Debian. Это не так уж важно, но это раздражает.
- Мне нужно собирать все библиотеки C (PyMongo, BCrypt и т. д.) каждый раз, когда я развертываю. Это занимает некоторое время (несколько минут), и немного неудобно выполнять эту работу, связанную с ЦП, на производстве.
Вот мои ограничения:
- Должен работать на Python 3. Предпочтительно 3.2
- Должна быть изоляция зависимостей
- Должен работать с библиотеками, использующими C (например, PyMongo).
Я слышал кое-что о замораживании, но я не смог заставить это работать. cx_freeze из Pypi, похоже, не компилируется (по крайней мере, на моем Python). Другие утилиты замораживания, похоже, не работают с Python 3. Как я могу сделать это лучше?