2009-07-30 6 views
4

J'ai besoin d'un moyen d'importer toute la bibliothèque standard Python dans mon programme. Bien que cela puisse sembler être une mauvaise idée, je veux faire ceci afin que py2exe empaquette toute la bibliothèque standard avec mon programme, afin que mes utilisateurs puissent l'importer dans le shell que je leur donne.Importation de toute la bibliothèque standard Python

Y at-il un moyen facile de faire cela? Points bonus: Je préférerais que cette action n'importera PAS les paquets que j'ai installés dans les paquets de site et qui ne sont pas fournis avec Python. Cependant, ce n'est pas critique.

+1

Quoi? Vous écrivez un shell qui démarre en préimportant tout? Quel est le cas d'utilisation possible pour cela? Pour enregistrer les utilisateurs en tapant une douzaine de caractères de "importer ceci"? –

+1

Il ne pré-importe rien. Mais pour que l'utilisateur puisse importer des choses de stdlib, je dois les importer (ou sembler les importer) dans mon programme, ainsi py2exe saura que j'ai besoin d'eux et les empaquette avec mon exécutable. –

Répondre

2

Hey, je viens de penser à quelque chose: je ne ai besoin d'une liste de tous les modules stdlib, puis je vais générer automatiquement un script Python qui importe chacun d'eux « manuellement », comme ceci:

import re 
import math 
import time 
# ... 

Et ensuite l'inclure avec mon programme.

Alors tout ce dont j'ai besoin maintenant est une liste facilement formatée de tous les modules/paquets de stdlib. Maintenant, comment puis-je obtenir cela?

MISE À JOUR:

Je suis la liste comme ceci: J'ai installé Python 2.6 sur une machine virtuelle, puis a couru en IDLE:

import pkgutil 
stuff = [thing[1] for thing in pkgutil.iter_modules()] 
stuff.sort() # To make it easy to look through 
print(stuff) 

Ensuite, copiez collé la sortie dans mon IDE, et fait un petit script pour écrire:

if False: 
    import re 
    import email 
    import time 
    # ... 

Dans un module Python que j'importe dans mon programme.

Cela fonctionne! py2exe emballe le stdlib entier.

MISE À JOUR:

J'ai créé un paquet qui fait cela. Je le télécharger ici, mais depuis que je ne vois pas le bouton de téléchargement, vous pouvez l'obtenir de mon dossier de projet:

http://github.com/cool-RR/PythonTurtle/tree/master

Il est dans le dossier src, le paquet est appelé almostimportstdlib et il est documenté.

+0

http://docs.python.org/modindex.html il vous faudra un peu de copier-coller et de format, mais c'est une tâche ponctuelle :-) – fortran

+1

Je le générerais dynamiquement personnellement. Regardez ce que j'ai dit ci-dessus: vous pouvez utiliser la même méthode pour obtenir la liste des modules à inclure et générer un fichier à partir de cela. Ce serait mieux que d'en avoir un manuellement. – jkp

1

J'ai créé un fichier zip à partir de toute la bibliothèque standard Python, puis l'ai ajouté à sys.path au démarrage du programme.

Vous pouvez consulter les sources here (projet abandonné)

+0

Bonne idée. Vous devriez pouvoir l'empaqueter en tant que ressource en utilisant py2exe et l'ajouter au chemin après le chargement de l'application: Je sais que vous pouvez le faire avec PyInstaller au moins. – jkp

Questions connexes