Comment créer un fichier d'oeuf Python

91

J'ai des questions sur les fichiers egg en Python.

J'ai beaucoup de code Python organisé par package et j'essaye de créer des fichiers egg. Je suis les instructions , mais elles sont très courantes.

Selon cela, il semble que j'ai besoin d'un fichier setup.py.

  1. Pouvez-vous me dire ce que je dois mettre dans le fichier setup.py et où il doit résider?
  2. Je suppose qu'il suffit de créer setup.py puis de démarrer "setup.py bdist_egg" pour obtenir le fichier egg. Pouvez-vous confirmer s'il vous plaît?
  3. Est-il possible d'inclure uniquement des fichiers .pyc dans le fichier egg?
  4. Avoir un fichier .egg, comment puis-je simplement démarrer le code à partir de celui-ci sans décompresser comme le java -jar <jar file>fait?
yart
la source
Que devrais-je utiliser à la place des œufs alors? Voici ma question sur les œufs stackoverflow.com/questions/14902732/…
Vert
@YauhenYakimovich: ce lien est maintenant un domaine de spam parqué. Peut-être vaut-il la peine de modifier pour utiliser packaging.python.org/en/latest/wheel_egg ?
Chris Adams

Réponses:

74

Vous lisez la mauvaise documentation. Vous voulez ceci: https://setuptools.readthedocs.io/en/latest/setuptools.html#develop-deploy-the-project-source-in-development-mode

  1. La création de setup.py est traitée dans la documentation distutils de la documentation de la bibliothèque standard de Python ici . La principale différence (pour les œufs de python) vous est import setupde setuptools, non distutils.

  2. Oui. Cela devrait être juste.

  3. Je ne pense pas. pycles fichiers peuvent dépendre de la version et de la plate-forme. Vous pourrez peut-être ouvrir l'œuf (il ne devrait s'agir que de fichiers zip) et supprimer des .pyfichiers laissant des .pycfichiers, mais cela ne serait pas recommandé.

  4. Je ne suis pas sûr. Cela pourrait être le «mode développement». Ou recherchez-vous un mode «py2exe» ou «py2app»?

mélancolique
la source
51
+1: N'incluez jamais les fichiers .pyc. Ils sont totalement déroutants. Nous avons accidentellement copié des fichiers Windows .pyc sur une boîte Linux et avons eu les messages de suivi d'erreur les plus déroutants jamais. Parce que les noms de fichiers où les noms de fichiers Windows d'origine. C'était terrifiant de voir ces noms de fichiers Windows sur le serveur de production.
S.Lott
il suffit d'utiliser pyinstaller
Nickpick
30

Pour le n ° 4, la chose la plus proche de démarrer java avec un fichier jar pour votre application est une nouvelle fonctionnalité de Python 2.6, des fichiers zip exécutables et des répertoires .

python myapp.zip

Où myapp.zip est un zip contenant un __main__.pyfichier qui est exécuté en tant que fichier de script à exécuter. Vos dépendances de package peuvent également être incluses dans le fichier:

__main__.py
mypackage/__init__.py
mypackage/someliblibfile.py

Vous pouvez également exécuter un œuf, mais l'incantation n'est pas aussi agréable:

# Bourn Shell and derivatives (Linux/OSX/Unix)
PYTHONPATH=myapp.egg python -m myapp
rem Windows 
set PYTHONPATH=myapp.egg
python -m myapp

Cela place le myapp.egg sur le chemin Python et utilise l'argument -m pour exécuter un module. Votre myapp.egg ressemblera probablement à quelque chose comme:

myapp/__init__.py
myapp/somelibfile.py

Et python fonctionnera __init__.py(vous devriez vérifier que__file__=='__main__' dans votre application pour une utilisation en ligne de commande).

Les fichiers Egg ne sont que des fichiers zip, vous pourrez donc peut-être ajouter __main__.pyà votre œuf avec un outil zip et le rendre exécutable en python 2.6 et l'exécuter commepython myapp.egg au lieu de l'incantation ci-dessus où la variable d'environnement PYTHONPATH est définie.

Plus d'informations sur les fichiers zip exécutables, y compris comment les rendre directement exécutables avec un shebang, peuvent être trouvées sur le blog de Michael Foord sur le sujet .

Lambacck
la source
Vous pouvez également utiliser le guide de l'
Yauhen
10

Je pense que vous devriez utiliser des roues python pour la distribution au lieu de l'oeuf maintenant.

Les roues sont le nouveau standard de la distribution python et sont destinées à remplacer les œufs. Le support est offert dans pip> = 1.4 et setuptools> = 0.8.

Soleil de Hanfei
la source
2
Vous ne pouvez pas importer une roue, pour autant que je sache. Parfois, je veux simplement déployer mon script avec un œuf pour le rendre plus portable.
Gillespie