Así en un archivo foo estoy importar módulos:

import lib.helper_functions
import lib.config

Y en helper_functions.py he:

import config

Cuando ejecuto la función principal de foo puedo obtener una ImportError

EDIT: Aquí está la estructura de los archivos que he

foo.py
lib/
    config.py
    helper_functions.py

El error es el resultado de la importación de configuración en helper_functions

Traceback (most recent call last):
  File "C:\Python33\foo.py", line 1, in <module>
    import lib.helper_functions
  File "C:\Python33\lib\helper_functions.py", line 1, in <module>
    import config
ImportError: No module named 'config'

Así: cuando ejecuto foo.py el intérprete se está quejando de la importación de declaraciones de helper_functions. Sin embargo, cuando ejecuto el principal de helper_functions, no aparece el error.

  • Usted necesita para importar módulos en cualquier otro archivo que utiliza; cada módulo tiene su propio espacio de nombres y no heredan los nombres de los archivos de las importaciones (a menos que utilice el from foo import * sintaxis que se debe evitar, ya que conduce a la horrible, de difícil diagnóstico de fallos)
  • Si usted está diciendo que la necesidad de importación de configuración en foo, ya estoy haciendo eso (por supuesto en foo tengo que referirme a ella como lib.config) no está ayudando con la NameError.
  • No veo un NameError en su rastreabilidad. Veo un ImportError, que es muy diferente de error.
  • Gracias por la nota, de hecho, me re-producido el programa de instalación original mínimamente antes de añadir la reciente edición. Así que hubo un NameError en mi código, pero que venía de otro lugar. Supongo que debería editarlo ya que no es parte de este problema en particular.

2 Comentarios

  1. 7

    Necesita importar config utilizando absoluta de importación. Usar:

    from lib import config

    o uso:

    from . import config

    Python 3 sólo admite absoluta de las importaciones; la declaración de import config sólo las importaciones de un de nivel superior módulo config.

    • Pero lo que es tirar el error no es de la importación lib.config en foo. Más bien, es la importación de config en helper_functions. Sin embargo, curiosamente, este error sólo cuando se ejecuta foo.principal no cuando se ejecuta helper_functions.principal. He editado la pregunta para mostrar el texto del error.
    • ah, pido disculpas, no he leído tu pregunta correctamente. Había añadido a las trazas para iniciar con la que habría sido más claro.
    • Solucionado su problema real en una respuesta actualizada.
    • Sí, gracias. He cambiado la instrucción de importación en helper_functions por lo que lee: desde lib importación de configuración. Y que se corrigió.
    • NOTA: Aunque esto resuelve el problema con foo (es decir, foo.py se ejecuta sin error), no puedo ejecutar el principal de helper_functions (yo uso ese para las pruebas), ya que el intérprete se quejan de from lib import config diciendo que no hay ningún módulo denominado «lib». Al menos ese fue el caso para mí. Creo que PYTHONPATH variable puede jugar un papel.
    • Misma cosa: ImportError: No module named lib y ValueError: Attempted relative import in non-package
    • Sólo puede utilizar relativa de las importaciones dentro de un paquete (un directorio en su trayectoria con la __init__.py en ella), no entre el nivel superior de los módulos.

  2. 0

    En python cada módulo tiene su propio espacio de nombres. Al importar otro módulo que en realidad son sólo importa su nombre.

    El nombre de «config» que existe en el módulo de helper_functions porque se importó allí. La importación de helper_functions en foo trae el nombre de «helper_function» en foo del espacio de nombres, nada más.

    Podría en realidad se refieren a la «config» en nombre de foo.py con su actual importaciones por hacer algo como:

    lib.helper_functions.config

    Pero en python siempre es mejor ser explícito, más que implícito. Así que la importación de configuración en foo.py sería la mejor manera de proceder.

    #file foo.py
    import lib.helper_functions
    import config
    • así, la configuración es en el lib. Yo soy de la importación en foo.py de todos modos (importación lib.config). Pero cuando se ejecuta foo.principal, el intérprete se queja acerca de la importación de declaraciones en helper_functions.py. a pesar de que cuando ejecuto el helper_functions.principal, no hay tal error se produce. De todos modos, he editado la pregunta para añadir el mensaje de error
    • Ah, veo su editar ahora. No podía reproducirlo porque yo uso Python2.7. Esto provoca un mensaje de error sólo en Python3. La razón ha sido explicado por @Martijn Pieters en su respuesta.

Dejar respuesta

Please enter your comment!
Please enter your name here