Cómo crear un archivo de huevo de Python

91

Tengo preguntas sobre los archivos egg en Python.

Tengo mucho código Python organizado por paquete y estoy tratando de crear archivos huevo. Estoy siguiendo instrucciones , pero son muy comunes.

De acuerdo con eso, parece que necesito tener un archivo setup.py.

  1. ¿Podría decirme qué necesito poner en el archivo setup.py y dónde debería residir?
  2. Supongo que es suficiente crear setup.py y luego iniciar "setup.py bdist_egg" para obtener el archivo egg. ¿Podrías confirmar?
  3. ¿Es posible incluir solo archivos .pyc en un archivo egg?
  4. Teniendo el archivo .egg, ¿cómo puedo iniciar el código sin desempaquetarlo como lo java -jar <jar file>hace?
yart
fuente
Entonces, ¿qué debo usar en lugar de huevos? Aquí está mi pregunta sobre los huevos stackoverflow.com/questions/14902732/…
Verde
@YauhenYakimovich: ese enlace ahora es un dominio de spam estacionado. ¿Quizás valga la pena editarlo para usar packaging.python.org/en/latest/wheel_egg ?
Chris Adams

Respuestas:

74

Estás leyendo la documentación incorrecta. Quieres esto: https://setuptools.readthedocs.io/en/latest/setuptools.html#develop-deploy-the-project-source-in-development-mode

  1. La creación de setup.py se cubre en la documentación de distutils en la documentación de la biblioteca estándar de Python aquí . La diferencia principal (para los huevos de Python) que es import setupde setuptools, no distutils.

  2. Sí. Eso debería ser correcto.

  3. No lo creo. pyclos archivos pueden depender de la versión y la plataforma. Es posible que pueda abrir el huevo (deberían ser solo archivos zip) y eliminar los .pyarchivos que dejan .pycarchivos, pero no sería recomendable.

  4. No estoy seguro. Ese podría ser el "Modo de desarrollo". ¿O está buscando algún modo “py2exe” o “py2app”?

nostálgico
fuente
51
+1: nunca incluya los archivos .pyc. Son totalmente confusos. Copiamos accidentalmente archivos .pyc de Windows en una caja de Linux y tuvimos los mensajes de rastreo de error más confusos de todos los tiempos. Porque los nombres de archivo eran los nombres de archivo originales de Windows. Fue aterrador ver esos nombres de archivo de Windows en el servidor de producción.
S.Lott
solo use pyinstaller
Nickpick
30

Para el n. ° 4, lo más parecido a iniciar java con un archivo jar para su aplicación es una nueva característica en Python 2.6, archivos y directorios zip ejecutables .

python myapp.zip

Donde myapp.zip es un zip que contiene un __main__.pyarchivo que se ejecuta como el archivo de script a ejecutar. Las dependencias de su paquete también se pueden incluir en el archivo:

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

También puedes ejecutar un huevo, pero el encantamiento no es tan agradable:

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

Esto coloca myapp.egg en la ruta de Python y usa el argumento -m para ejecutar un módulo. Su myapp.egg probablemente se verá así:

myapp/__init__.py
myapp/somelibfile.py

Y Python se ejecutará __init__.py(debe verificarlo __file__=='__main__'en su aplicación para el uso de la línea de comandos).

Los archivos Egg son solo archivos zip, por lo que es posible que pueda agregarlos __main__.pya su huevo con una herramienta zip y hacerlo ejecutable en Python 2.6 y ejecutarlo comopython myapp.egg lugar del encantamiento anterior donde se establece la variable de entorno PYTHONPATH.

Puede encontrar más información sobre archivos zip ejecutables, incluido cómo hacerlos directamente ejecutables con un shebang, en la publicación del blog de Michael Foord sobre el tema .

lambacck
fuente
Alternativamente, se puede usar el entorno virtual guide.python-distribute.org/installation.html#upgrading
Yauhen Yakimovich
10

Creo que ahora deberías usar ruedas de pitón para la distribución en lugar de huevo.

Las ruedas son el nuevo estándar de distribución de pitones y están destinadas a reemplazar los huevos. El soporte se ofrece en pip> = 1.4 y setuptools> = 0.8.

Hanfei Sun
fuente
2
No se puede importar una rueda, por lo que yo sé. A veces solo quiero implementar mi script junto con un huevo para hacerlo más portátil.
Gillespie