Comment pouvez-vous regrouper toutes votre code python dans un seul fichier zip?
Il serait pratique lors de la distribution d'applications pour combiner tous des oeufs dans un seul fichier zip, de sorte que tous vous avez besoin à distribuer est un fichier zip unique et un exécutable (certains binaire qui commence simplement, charge le fichier zip de la fonction principale et les coups de pied de python off ou similaire).
J'ai vu certains parlent de faire cela en ligne, mais aucun des exemples de la façon de le faire réellement.
Je suis conscient que vous pouvez (si son zip sûr) de convertir les œufs dans des fichiers zip.
Ce que je ne suis pas sûr à ce sujet est:
Pouvez vous en quelque sorte combiner tous vos oeufs dans un seul fichier zip? Si oui, comment?
Comment voulez-vous charger et d'exécuter du code à partir d'un œuf?
Comment vous assurez-vous que le code de l'oeuf peut accéder à toutes les dépendances (ie. d'autres œufs dans le fichier zip)?
Les gens demandent ce genre de choses en beaucoup de choses et obtenir des réponses similaires; utilisation py2exe. Oui, je comprends, c'est une solution. Ce n'est pas la question que je pose la question ici...
OriginalL'auteur Doug | 2013-07-05
Vous devez vous connecter pour publier un commentaire.
Vous pouvez automatiser la plupart des travaux réguliers outils python. Commençons par nettoyer virtualenv.
Maintenant, nous allons installer les paquets qui vont aller dans l'zippée bibliothèque. Le truc, c'est de la force de leur installation dans le répertoire spécifique.
(Note: ne pas utiliser --oeuf option sur la ligne de commande ou dans le pep.conf/pip.ini car il va se casser la disposition des fichiers en le rendant non importables dans un zip)
Mise à jour: pip a
-t <path>
commutateur, qui fait la même chose que--install-option --install-lib=
.Maintenant, nous allons pack tous en un seul zip
Noter que ces fichiers doivent être au-dessus du zip, vous ne pouvez pas simplement
zip -r9 library.zip unpacked
En vérifiant le résultat:
Mise à jour: depuis python 3.5 il y a aussi zipapp module qui peut aider avec le regroupement de l'ensemble .pyz fichier. Pour des besoins plus complexes pyinstaller, py2exe ou py2app peut mieux l'adapter à la facture.
OriginalL'auteur Zart
Python exécuter des fichiers zip comme si ils étaient les seuls scripts si elles contiennent un __main__.py[c] fichier à l'intérieur au plus haut niveau. Package importations sera alors également vérifier à l'intérieur du zip que __principaux__ est en cours d'exécution de l'intérieur.
Afin de créer votre setup.py (
py_modules = ['__main__']
est important ici de préciser tous vos paquets et d'autres modules).Puis exécutez
python setup.py bdist --format zip
pour créer le fichier zip. Maintenant, si vous voulez qu'il soit exécutable, vous pouvez effectuer les opérations suivantes. À ce stade, vous pouvez exécuter la résultante fichier zip comme n'importe quel autre script python.Une étape de plus pour les utilisateurs de Linux/Mac lecture de ce pour améliorer le confort (bien que probablement pas votre scénario comme vous le mentionnez py2exe)
Ce juste ajoute un #! ligne dans le fichier zip de sorte que lorsque vous exécutez à partir du shell que vous n'avez pas besoin de spécifier l'interprète. À ce stade, vous pouvez l'exécuter comme tout les autres binaires sur le système, bien que secrètement, c'est un fichier zip complet de python. En général, je créer un fichier makefile pour exécuter setup.py et puis faire cette conversion.
chmod 555 ./my_executable_zip
ouchmod +x ./my_executable_zip
.OriginalL'auteur Matt
Oui, un seul fichier zip/œuf peut fournir plusieurs modules, de sorte que vous pouvez les combiner en un seul fichier. Je suis cependant très sceptique à ce qu'une bonne idée. Vous avez encore besoin d'installer ce fichier zip, et il peut encore en contradiction avec d'autres déjà installé les versions, etc.
Donc, la première question à se poser est ce que le but est. Pourquoi voulez-vous qu'un seul fichier? Est-il pour la facilité de l'installation, ou pour en faciliter la distribution, ou quoi?
D'avoir un seul fichier ne sera pas vraiment rendre l'installation plus facile, il y a les autres, de meilleurs moyens. Vous pouvez laisser l'installation de télécharger et d'installer automatiquement les dépendances, c'est facile à faire.
Et de les avoir dans un fichier zip signifie que vous avez besoin pour développer ce fichier zip et exécutez setup.py ce qui n'est pas très convivial.
Afin d'avoir un seul fichier n'a pas vraiment de résoudre de nombreux problèmes, donc la question est quel est le problème que vous essayez de résoudre.
Aussi, de télécharger automatiquement? Étant donné que pypi.python.org a bas pendant des heures cette dernière semaine, je dirais que pour une bonne expérience utilisateur c'est une terrrrrible idée. Même juste téléchargement choses quand c'est des résultats dans les délais d'expiration de la moitié du temps. Absolument pas intéressé à aller dans cette voie.
OriginalL'auteur Lennart Regebro
Vous pouvez utiliser un fichier zip auto-extractible, mis en place pour lancer un interpréteur Python après avoir décompressé les oeufs dans le même .exe fichier qui les contient.
OriginalL'auteur John Zwinck
Bien, il est possible de créer votre propre "packages/oeufs" dans votre {app-home-dir/packages} (par adaptation des œufs il y par exemple) et de configurer les fichiers supplémentaires dans setup.py (setuptools) à emballer comme le seul mode de distribution (Qu'est-ce que setup.py?). Notez qu'avant de vous lancez votre application principale fonction, vous devez en informer Python où exactement votre externe "packages/œufs" sont - par l'ajout de {app-home-dir/packages} sys.chemin d'accès. C'est le easies manière de créer le package autonome ..mais avec qui va dangers en termes de dépendance et de leurs versions, les modules Python mélangé avec du code C Ansi, etc.
OriginalL'auteur soerium
Pouvez vous en quelque sorte combiner tous vos oeufs dans un seul fichier zip? Si oui, comment?
Oui, vous pouvez. Python vous permettra de charger à partir de l'archive zip qui sont ajoutés dans sys.path (voir PEP 273). Si vous mettez toutes les bibliothèques python à l'intérieur d'une archive, l'archive est traité comme un répertoire. C'est ce que certains de la py2exe, bbfreeze, etc. outils pour isoler les bibliothèques.
Comme pour le comment, cela dépend vraiment de la façon dont vos oeufs sont installés: pip, easy_install, etc. La logique serait d'inspecter toutes les fonction d'œufs et de recueillir leur chemin d'installation, puis zip les oeufs à l'intérieur d'une archive.
Comment voulez-vous charger et d'exécuter du code à partir d'un œuf?
Vous avez besoin de définir de charger et d'exécuter. Si l'on parle de module d'importation et de colis, vous n'avez rien à faire
spécial. Voici un intéressant article de blog sur le sujet, y compris quelques mise en garde Emballage Python programmes exécutables, les fichiers ZIP
Comment vous assurez-vous que le code de l'oeuf peut accéder à toutes les dépendances (ie. d'autres œufs dans le fichier zip)?
C'est intégré en tant que les oeufs ne sont pas des extensions (ie zip de sécurité). Voir aussi zipimport
Aussi, j'ai juste essayé et ça ne semble pas fonctionner, c'est à dire. pip install bla, et de créer un fichier zip à partir de tous les .oeuf de dossiers et d'essayer de les importer; ne fonctionne pas du tout. 🙁 Pouvez-vous préciser votre troisième point, par hasard?
OriginalL'auteur Rod