buhtz
Sé de estas dos preguntas sobre __init__.py
y __main__.py
:
¿Para qué sirve __init__.py?
¿Qué es __main__.py?
Pero realmente no entiendo la diferencia entre ellos. O podría decir que no entiendo cómo interactúan juntos.
Terry Jan Reedy
__init__.py se ejecuta cuando usted importar un paquete en un programa Python en ejecución. Por ejemplo, import idlelib
dentro de un programa, se ejecuta idlelib/__init__.py
, que no hace nada ya que su único propósito es marcar el directorio idlelib como un paquete. Por otro lado, tkinter/__init__.py
contiene la mayor parte del código tkinter y define todas las clases de widgets.
__principal__.py se ejecuta como ‘__main__’ cuando correr un paquete como programa principal. Por ejemplo, python -m idlelib
en una línea de comando se ejecuta idlelib/__main__.py
, que inicia Inactivo. Similarmente, python -m tkinter
carreras tkinter/__main__.py
que tiene esta línea:
from . import _test as main
En este contexto, .
es tkinter
entonces importando .
importaciones tkinter
la cual recorre tkinter/__init__.py
. _test
es una función definida dentro de ese archivo. Entonces llamando main()
(siguiente línea) tiene el mismo efecto que ejecutar python -m tkinter.__init__
en la línea de comando.
-
Por que
tkinter
tener mucho código en el__init__.py
archivo mientrasidlelib
no tienes codigo ahi? ¿Hay alguna razón por la que a veces le gustaría tener código en__init__.py
pero otras veces no?– Hola Adios
11 de agosto de 2017 a las 10:59
-
Código en
package/__init__.py
hacer elimport package
realmente hacer algo. Antes de 3.0,Tkinter
era un módulo, no un paquete. En 3.0, el código enTkinter.py
fue puesto entkinter/__init__.py, so the only change needed was
importar tkinter` en lugar deimport Tkinter
.– Terry Jan Reedy
13 de agosto de 2017 a las 22:52
-
@Terry Jan Reedy: ¿Podría explicar “Así que llamar a main() (siguiente línea) tiene el mismo efecto que ejecutar python -m tkinter.__init__ en la línea de comando”…? Gracias.
– Aprendiz
7 de mayo a las 20:02
-
@Hola Adios
tkinter
un paquete pero los desarrolladores queríanimport tkinter
para dar acceso al conjunto de widgets pre-ttk. Pegando el código para esto en en eso fue la manera más fácil de lograr esto.– Terry Jan Reedy
10 de mayo a las 1:14
__init__.py
entre otras cosas, etiqueta un directorio como un directorio de python y le permite establecer variables en un nivel de paquete amplio.
__main__.py
entre otras cosas, se ejecuta si intenta ejecutar un grupo comprimido de archivos python. __main__.py
le permite ejecutar paquetes.
Ambas respuestas se obtuvieron de las respuestas que vinculó. ¿Hay algo más que no entendiste sobre estas cosas?
Las respuestas a las dos preguntas que vinculaste son completamente diferentes. ¿Cuál es tu punto de confusión?
– Alquimista de dos bits
9 de julio de 2015 a las 20:48