2010-11-08 29 views
14

Estoy empezando a llegar al punto en mis proyectos de python que necesito para comenzar a utilizar varios paquetes y estoy un poco confundido sobre cómo se supone que todo debe funcionar en conjunto. ¿Qué debería incluir exactamente el __init__.py del paquete? Algunos proyectos que veo solo tienen inits en blanco y todos sus códigos están en módulos en ese paquete. Otros proyectos implementan lo que parece ser la mayoría de las clases y funciones del paquete dentro del init.diseño de módulo de python

¿Hay algún documento o guía de estilo o algo que describa lo que los autores de python tenían en mente para el uso de paquetes y el archivo __init__ y tal?

Editar:
Sé que el punto de tener el archivo __init__.py en el sentido más simple que hace una carpeta de un paquete. Pero ¿por qué debería poner una función allí en lugar de un módulo en esa misma carpeta (paquete)?

Respuesta

8

__init__.py puede estar vacío, pero lo que realmente hace es asegurarse de que Python trata sus directorios correctamente, proporciona cualquier inicialización que pueda necesitar cuando se importa su paquete (configurando el entorno o algo similar) o definiendo __all__ que Python sabe qué hacer cuando alguien usa from package import *.

Todo lo que necesita saber se describe en el docs on Packages. Dive Into Python also has a piece on packaging.

1

Ya sabes, supongo que los archivos __init__.py son necesarios para que Python considere que los directorios contienen paquetes.

  1. En el modelo anterior, __init__.py puede permanecer vacío.

  2. También puede ejecutar el código de inicialización para el paquete.

  3. También puede establecer la variable __all__.

[Editar: aprendizajes] Cuando haces "del punto de importación paquete", o "de paquete de importación *", entonces el __all__ variable se puede utilizar para importar los paquetes seleccionados.

Ver:. http://docs.python.org/tutorial/modules.html

+0

'__init __ py',' __all__'. Doble subrayado –

+0

@Rafe Kettler: Gracias. Sí, Edite problemas. Mi respuesta es la misma que la tuya y no la vi antes de publicar la mía. – pyfunc

+0

Para 'del artículo de importación del paquete', la variable' __all__' no controla lo que queda expuesto. Si 'item' es un módulo o un subpaquete, y usted está en Windows,' __all__' podría controlar el uso de mayúsculas en 'item', pero no controla a qué puede acceder. –