web-dev-qa-db-fra.com

Comment créer Python Egg

J'ai des questions sur les fichiers d'oeufs en Python.

J'ai beaucoup Python organisé par paquet et j'essaie de créer des fichiers Egg. Je suis instructions , mais ils sont très courants.

D'après cela, il me semble que j'ai besoin d'un fichier setup.py.

  1. Pourriez-vous s'il vous plaît me dire ce que j'ai besoin de mettre dans le fichier setup.py et où il devrait résider?
  2. Je suppose que c'est suffisant pour créer setup.py et ensuite 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 les fichiers .pyc dans le fichier Egg?
  4. Ayant le fichier .Egg comment je peux juste commencer le code à partir de lui sans décompresser comme Java -jar <jar file> Est-ce que?
88
yart

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 décrite dans la documentation de distutils dans la documentation de la bibliothèque standard de Python here . La principale différence (pour python oeufs) est que vous import setup de setuptools, pas distutils.

  2. Oui. Cela devrait être juste.

  3. Je ne pense pas. Les fichiers pyc peuvent dépendre de la version et de la plate-forme. Vous pourrez peut-être ouvrir l’oeuf (il devrait s’agir de fichiers Zip) et supprimer .py fichiers quittant .pyc fichiers, mais cela ne serait pas recommandé.

  4. Je ne suis pas sûr. Cela pourrait être "Mode de développement". Ou cherchez-vous un mode "py2exe" ou "py2app"?

72
wisty

Pour le n ° 4, le plus proche du démarrage de Java avec un fichier jar pour votre application est une nouvelle fonctionnalité de Python 2.6, fichiers Zip exécutables et répertoires .

python myapp.Zip

Où myapp.Zip est un zip contenant un __main__.py fichier qui est exécuté en tant que fichier de script à exécuter. Les dépendances de votre paquet peuvent également être incluses dans le fichier:

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

Vous pouvez également exécuter un oeuf, 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 myapp.Egg sur le chemin Python et utilise l'argument -m pour exécuter un module. Votre myapp.Egg ressemblera probablement à ceci:

myapp/__init__.py
myapp/somelibfile.py

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

Les fichiers d'oeufs ne sont que des fichiers Zip, vous pouvez donc éventuellement ajouter __main__.py à votre oeuf avec un outil Zip et le rendre exécutable dans python 2.6 et l'exécuter comme python 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 , sont disponibles sur billet de blog de Michael Foord sur le sujet .

30
lambacck

Je pense que vous devriez utiliser roues de python pour la distribution au lieu de Egg maintenant.

Les roues sont le nouveau standard de distribution python) et sont destinées à remplacer les œufs. La prise en charge est proposée sous forme de pip> = 1,4 et de setuptools> = 0,8.

10
Hanfei Sun