paquetes - Python: importación de clases de paquete en el espacio de nombres global de la consola
paquetes de python (1)
Desea usar una forma diferente de importación.
En projectname/main_stuff/__init__.py
:
from other_stuff import *
__all__ = ["main1", "main2", "main3"]
Cuando usas una declaración como esta:
import foo
Está definiendo el nombre foo en el módulo actual. Entonces puedes usar foo.something
para obtener las cosas en foo.
Cuando usas esto:
from foo import *
Está tomando todos los nombres definidos en foo y los define en este módulo (como verter un cubo de nombres de foo en su módulo).
Estoy teniendo problemas para que mis clases de python funcionen dentro de la consola de Python. Quiero importar automáticamente todas mis clases en el espacio de nombres global para que pueda usarlas sin prefix.module.names.
Esto es lo que tengo hasta ahora ...
projectname/
|-__init__.py
|
|-main_stuff/
|-__init__.py
|-main1.py
|-main2.py
|
|-other_stuff/
|-__init__.py
|-other1.py
|-other2.py
Cada archivo define una clase del mismo nombre, por ejemplo, main1.py definirá una clase llamada Main1.
Mi PYTHONPATH
es la ruta absoluta a projectname /.
Tengo un archivo de inicio de Python que contiene esto:
from projectname import *
Pero esto no me permite usar mis clases en absoluto. Al iniciar una consola de Python, me gustaría poder escribir:
ob=Main1()
pero Main1 no está dentro del espacio de nombres actual, por lo que no funciona.
Traté de agregar cosas a los archivos __init__.py
...
En projectname/__init__.py
:
import main_stuff
En projectname/main_stuff/__init__.py
:
import other_stuff
__all__ = ["main1", "main2", "main3"]
Y así. Y en mi archivo de inicio agregué:
from projectname.main_stuff import *
from projectname.main_stuff/other_stuff import *
Pero para usar las clases dentro de la consola de Python, todavía tengo que escribir:
ob=main1.Main1()
Prefiero no necesitar el main1.
parte. ¿Alguien sabe cómo puedo poner automáticamente mis clases en el espacio de nombres global cuando uso la consola de Python?
Gracias.
==== EDITAR ====
Lo que necesito es importar un paquete en el nivel de clase, pero from package import *
me da todo a nivel de módulo. Estoy buscando una manera fácil de hacer algo como esto:
for module in package do:
from package.module import *
==== OTRO EDIT ====
Terminé agregando las importaciones de clase a mi archivo de inicio de python individualmente. No es ideal debido a la sobrecarga de mantenerlo, pero hace lo que quiero.
from class1.py import Class1
from class2.py import Class2
from class3.py import Class3