Pregunta

Estoy usando Django y tengo un archivo llamado models.admin.py y yo quiero hacer la siguiente idea en models.py:

from "models.admin" import *

Sin embargo, me sale un error de sintaxis para tener comillas dobles. Pero si acabo de hacer

from models.admin import *

Entonces consigo "ImportError: Ningún módulo llamado admin"

¿Hay alguna manera de importar desde un archivo de Python que tiene un período en su nombre?

¿Fue útil?

Solución

En realidad, puede importar un módulo con un nombre no válido. Pero tendrá que usar imp para que, por ejemplo, asumiendo archivo se llama models.admin.py, se podría hacer

import imp
with open('models.admin.py', 'rb') as fp:
    models_admin = imp.load_module(
        'models_admin', fp, 'models.admin.py',
        ('.py', 'rb', imp.PY_SOURCE)
    )

Pero lea la documentación sobre imp.find_module y imp.load_module antes de comenzar a utilizarlo.

Otros consejos

Si realmente quiere, puede importar un módulo con un nombre de archivo original (por ejemplo, un nombre de archivo que contiene una antes de la '.py' '') usando el módulo imp:

>>> import imp
>>> a_b = imp.load_source('a.b', 'a.b.py')
>>> a_b.x
"I was defined in a.b.py!"

Sin embargo, eso es generalmente una mala idea. Es más probable que usted está tratando de utilizar los paquetes, en cuyo caso se debe crear un directorio llamado "a", que contiene un archivo llamado "b.py"; y luego "a.b importación" se carga a / b.py.

El archivo se llama models/admin.py. ( Fuente )

Es decir, que debería ser llamado admin.py en un directorio llamado models.

A continuación, puede importar usando from models.admin import *, asumiendo que es en su camino Python.

No, no se puede importar un archivo de Python como un módulo si su nombre contiene un punto (o un signo de interrogación o exclamación, etc.). el nombre de un módulo de Python (no incluyendo el .py) debe ser un nombre pitón válido (es decir, puede ser utilizado como un nombre de variable).

No se hace referencia a archivos en la declaración de importación, se hace referencia a Módulos y paquetes .

Por favor lea la docs , que son muy claras al respecto.

De todos modos, dado que está utilizando Django, el enfoque habitual no funcionará. Si desea mantener los modelos en archivos separados, en lugar de en models.py, usted tiene que tomar medidas adicionales, se indica, por ejemplo, aquí .

Editar:
Bueno, no se sabe muy bien lo que significa la questioneer cuando menciona admin y si es o no está relacionado con la interfaz de administración de Django. siendo mis puntos de pie.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top