Вы можете использовать cx_Freeze , чтобы сделать это. Он похож на py2exe (связывает воедино интерпретатор и скрипт запуска и все необходимые библиотеки и модули), но работает как в Linux, так и в Windows.
Он собирает зависимости от среды, в которой он запущен, а это значит, что они также должны соответствовать месту назначения. Если вы делаете что-то вроде сборки на 32-битном Debian и развертывания на другом 32-битном Debian, то это нормально. Вы можете обрабатывать 32/64-битные различия, создавая несколько версий в соответствующих средах (например, 32-битных и 64-битных chroot) и распространяя соответствующую. Если вам нужно что-то более общее (например, сборка на Debian, развертывание в любом дистрибутиве), то это становится немного мутным, в зависимости от того, какие именно у вас зависимости.
Если вы делаете довольно простой дистрибутив (т.е. вы знаете, что ваша среда сборки и среды развертывания схожи), то это позволяет избежать довольно сложного шага rpm / deb / egg / etc (использовать cx_Freeze очень легко, особенно если вы знакомы с py2exe). Если нет, то будет работать что угодно, от установки собственного установщика зависимостей до сборки deb / rpm / egg / etc, в зависимости от того, сколько работы вы хотите выполнить, насколько гибко вы хотите предлагать требуемые версии и каковы зависимости.