OK, zrobiłem to. To trochę hacky, ale działa bardzo dobrze dla mojego przypadku użycia.
Głównym celem jest użycie modułu ModuleFinder w celu znalezienia wszystkich zaimportowanych modułów, odfiltrowania dowolnych systemów, skompilowania ich i skompresowania.
Niestety mój kod ten jest pełno dodatkowych komplikacji, które nie mają żadnego znaczenia dla tego pytania, więc nie mogę wkleić program roboczy, tylko niektóre rozszerzone:
zipfile = ZipFile(os.path.join(dest_dir, zip_name), 'w', ZIP_DEFLATED)
sys.path.insert(0, '.')
finder = ModuleFinder()
finder.run_script(source_name)
for name, mod in finder.modules.iteritems():
filename = mod.__file__
if filename is None:
continue
if "python" in filename.lower():
continue
subprocess.call('"%s" -OO -m py_compile "%s"' % (python_exe, filename))
zipfile.write(filename, dest_path)
Można bezpiecznie założyć, że Python jest już zainstalowany na większości systemów Linux. – ThiefMaster
Tak, ale nadal chciałbym łatwo spakować wszystkie odpowiednie pliki źródłowe, w tym importowane moduły, bez instalowania rzeczy w docelowym systemie Linux. – xorsyst