2009-05-25 5 views
7

Je ne pense pas que cela a déjà été demandé-j'ai un dossier qui contient beaucoup de fichiers .py différents. Le script que j'ai créé n'en utilise que quelques-uns mais d'autres en appellent d'autres & Je ne connais pas tous ceux qui sont utilisés. Y a-t-il un programme qui obtiendra tout le nécessaire pour que ce script fonctionne dans un dossier?Rassemble tous les modules Python utilisés dans un dossier?

À la votre!

Répondre

0

Freeze est assez proche de ce que vous décrivez. Il effectue une étape supplémentaire de génération de fichiers C pour créer un exécutable autonome, mais vous pouvez utiliser la sortie de journal qu'il produit pour obtenir la liste des modules utilisés par votre script. De là, il est simple de les copier tous dans un répertoire à compresser (ou autre).

6
# 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:]) 
+0

+1 bon travail, ce petit script peut être très pratique –

6

utiliser le module modulefinder dans la bibliothèque standard, voir par exemple http://docs.python.org/library/modulefinder.html

+2

+1, vous pouvez l'utiliser comme un script comme ça: python -m modulefinder myscript.py –

+0

excellent point Nadia, l'-m est souvent utile en effet. –

Questions connexes