2011-02-04 17 views
5

Hago algunas cosas de inicio cuando un módulo se carga por primera vez. El problema es que de alguna manera se importa dos veces, y no puedo entender por qué. Pensé que podría ser importado utilizando camino diferente, como en este ejemplo:Módulo importado varias veces

a.py:

from apps.blog import models 
... 

b.py:

from blog import models 
... 

que inserte print __name__ en mi módulo, y se imprimió blog.models dos veces, por lo que resulta que el problema no está dentro de las rutas de importación.
Entonces, ¿hay alguna otra razón para importar un módulo varias veces?

ACTUALIZACIÓN: No mencioné que estoy usando django. Creo que este problema relacionado con la escritura manage.py de Django: https://docs.djangoproject.com/en/dev/releases/1.4/#updated-default-project-layout-and-manage-py

+0

Para cualquier otra persona que podría haber tenido este error, me encontré la mía fue causado por intentar importar elementos de las carpetas principales, no usando ' ..' pero usando 'sys.path.append (os.path.abspath (os.path.join (os.path.dirname (__ file__), os.path.pardir)))' – Aesthete

Respuesta

8

Normalmente Python no debe importar un módulo de dos veces sin tener en cuenta las referencias absolutas/relativas. Es probable que Python vea el archivo fuente como dos archivos diferentes y, por lo tanto, los importe por separado. Esto podría suceder debido a archivos/directorios enlazados, o versiones diferentes lado a lado, o directorios superpuestos en PYTHONPATH, es difícil de decir.

Una forma de rastrear esto es utilizar el depurador interactivo. Agregue una línea import pdb; pdb.set_trace() en el nivel superior de su archivo, y en el shell interactivo ingrese bt para obtener una traza inversa que debe mostrar la cadena de importación. Continúa con c. Cuando el archivo se importa por segunda vez y el depurador está activado, intente de nuevo con bt y compare las dos salidas, que pueden revelar el problema.

+4

Un procedimiento más fácil es solo simule una falla en la importación (error de sintaxis o cualquier excepción en el momento de la importación), que hará que Python imprima un rastreo. –

+0

Por favor publíquelo como una respuesta separada para que podamos votarlo adecuadamente. –

+0

excepción en el momento de la importación me daría seguimiento solo en la primera importación –

Cuestiones relacionadas