2009-07-09 7 views
6

Existe-t-il un moyen de créer des fichiers Python, comme JAR en Java? J'ai besoin d'un ensemble de classes et de fonctions Python, mais contrairement à un module standard, j'aimerais que ce soit dans un seul fichier.Combinaison de fichiers de module en Python

Répondre

3

La plus simple approche consiste à utiliser simplement zip. Un fichier jar en Java est un fichier zip contenant des métadonnées telles qu'un manifeste; mais vous n'avez pas forcément besoin de la metatada - Python peut importer depuis un fichier zip tant que vous placez ce fichier zip sur sys.path, comme vous le feriez pour n'importe quel répertoire. Dans le fichier zip, vous pouvez avoir les sources (fichiers .py), mais Python devra les compiler à la volée chaque fois qu'un processus les importe pour la première fois; ou vous pouvez avoir les fichiers bytecode (.pyc ou .pyo) mais vous êtes limité à une version spécifique de Python et soit à l'absence (pour .pyc) ou à la présence (pour .pyo) du flag -O (ou -OO).

Comme d'autres réponses indiqué, il existe des formats tels que .egg qui viennent enrichir le fichier zip avec metatada en Python et, comme Java .jar, mais que ce soit dans un cas d'utilisation particulière qui vous donne une valeur supplémentaire wrt une zipfile plaine est une décision vous pouvez créer

2

Vous pouvez créer des fichiers zip contenant du code Python et importer à partir de fichiers zip en utilisant zipimport. Un système tel que PyInstaller (multiplateforme) ou py2exe (Windows) fera tout cela pour vous.

9

Après avoir cherché une solution au même problème, je fini par écrire un outil simple qui combine plusieurs fichiers .py en un seul: PyBreeder

Il ne fonctionne qu'avec les modules Python pure et peut nécessiter des essais- et -erreur pour obtenir l'ordre des modules, mais c'est très pratique quand vous voulez déployer un script avec des dépendances en un seul .py. Les commentaires/corrections/critiques sont les bienvenus!

+0

Grand script, merci de le mentionner! – TechZilla

+0

J'ai fait [quelque chose de similaire] (https://github.com/thomasballinger/pyconcat) parce que cela semblait cool, mais PyBreeder semble moins ridicule et hacky. – Thomas

Questions connexes