name modulenotfounderror jsonmerge configmgrpy cannot board python package importerror

modulenotfounderror - python3: ImportError: no hay un módulo llamado xxxx



no module named folder python (1)

Esta pregunta ya tiene una respuesta aquí:

Soy nuevo en Python y estoy tratando de entender un problema, que veo al crear un paquete. Tengo la siguiente estructura de archivos: (El directorio de trabajo es / my / Python / jmLib2)

/my/Python/jmLib2 |--- Phone | |--- __init__.py | |--- Pots.py |- Test2.py --------------------------------- cat ./jmLib2/Pots.py #!/usr/bin/python def Pots(): print ("I''m Pots Phone") --------------------------------- cat ./jmLib2/__init__.py from Pots import Pots --------------------------------- cat ./Test2.py #!/usr/bin/python from Phone import Pots import os.path print ("OS:"+str(os.path)) Pots()

Cuando ahora hago:

python2 Test2.py OS:<module ''posixpath'' from ''/usr/lib/python2.7/posixpath.pyc''> I''m Pots Phone*

GRAN ... PERO, si lo hago:

python3 Test2.py Traceback (most recent call last): File "Test2.py", line 2, in <module> from Phone import Pots File "/home/juergen/my/Python/jmLib2/Phone/__init__.py", line 1, in <module> from Pots import Pots ImportError: No module named ''Pots''

Estoy trabajando con PyDev bajo Eclipse. PyDev me informa dentro del archivo init .py un error "Importar sin resolver: Ollas". Tengo el mismo problema de rastreo en PyDev y bash.

Una vez más, soy nuevo en Python ... así que tal vez sea un error muy estúpido. Pero, ¿puede alguien explicarme la diferencia entre python2 y python3.4? ¿Tengo que modificar el PYTHONPATH? ¿Por qué?

Saludos juergen


TL; DR: Las importaciones relativas se han ido . Utilice importaciones absolutas en su lugar.

Cualquiera de los dos utilizar

from Phone.Pots import Pots

o:

from .Pots import Pots

El problema se produce porque Pots es parte del paquete del Phone : no hay ningún módulo llamado Pots , hay un módulo llamado Phone.Pots .

Python 2 tenía una característica llamada importaciones relativas que te permiten escribir import Pots incluso si eso no era técnicamente correcto.

Las importaciones relativas sin embargo son una fuente de problemas y confusión :

  • Quien lee el código no puede decir inmediatamente si la importación es de un paquete o no.
  • ¿Cómo es que el módulo se llama Phone.Pots , pero puedo usar Phone.Pots import Pots ? Esto es altamente inconsistente.
  • ¿Qué pasa si el submódulo oculta el nombre de otro módulo?

Por estas razones, las importaciones relativas se eliminaron de Python 3.

Puede deshacerse de las importaciones relativas de Python 2 utilizando una importación __future__ :

from __future__ import absolute_import