Если у вас есть только модули Python, держите все различия, скрытые в Python, либо одинаковыми файлами (python std lib), либо отдельными файлами (pyserial).
Если у вас есть скомпилированные модули, это немного сложнее.
Я использую следующую структуру каталогов для проекта, который требует скомпилированного расширения:
./lib/display.py # frontend, platform-independent
./lib.linux-x86_64-2.6/_display.so
./lib.linux-armv5tejl-2.6/_display.so
И этот код в начале начала программы:
sys.path.append("lib.%s-%s-%s.%s" % ((posix.uname()[0].lower(),
posix.uname()[4])
+sys.version_info[:2]))
Вы также можете обернуть структуру таким образом в .egg, если вы укажете, что он не является zip-безопасным.