¿Reunir todos los módulos de Python utilizados en una carpeta?

No creo que esto haya sido preguntado antes, tengo una carpeta que tiene muchos archivos .py diferentes. El script que he hecho solo usa algunos, pero algunos llaman a otros y no sé todos los que se usan. ¿Hay algún progtwig que obtenga todo lo necesario para que el script se ejecute en una carpeta?

¡Aclamaciones!

Utilice el módulo modulefinder en la biblioteca estándar; consulte, por ejemplo, http://docs.python.org/library/modulefinder.html

 # zipmod.py - make a zip archive consisting of Python modules and their dependencies as reported by modulefinder # To use: cd to the directory containing your Python module tree and type # $ python zipmod.py archive.zip mod1.py mod2.py ... # Only modules in the current working directory and its subdirectories will be included. # Written and tested on Mac OS X, but it should work on other platforms with minimal modifications. import modulefinder import os import sys import zipfile def main(output, *mnames): mf = modulefinder.ModuleFinder() for mname in mnames: mf.run_script(mname) cwd = os.getcwd() zf = zipfile.ZipFile(output, 'w') for mod in mf.modules.itervalues(): if not mod.__file__: continue modfile = os.path.abspath(mod.__file__) if os.path.commonprefix([cwd, modfile]) == cwd: zf.write(modfile, os.path.relpath(modfile)) zf.close() if __name__ == '__main__': main(*sys.argv[1:]) 

Congelar hace bastante cerca de lo que describe. Realiza un paso adicional de generar archivos C para crear un ejecutable independiente, pero puede usar la salida de registro que produce para obtener la lista de módulos que usa su script. Desde allí, es una cuestión simple copiarlos todos en un directorio para ser comprimidos (o lo que sea).