Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

441
Vistas
Importaciones relativas - ModuleNotFoundError: ningún módulo llamado x

Esta es la primera vez que realmente me siento y probé python 3, y parece que estoy fallando miserablemente. Tengo los siguientes dos archivos:

  1. prueba.py
  2. config.py

config.py tiene algunas funciones definidas en él, así como algunas variables. Lo he reducido a lo siguiente:

config.py

 debug = True

prueba.py

 import config print (config.debug)

También tengo un __init__.py

Sin embargo, recibo el siguiente error:

 ModuleNotFoundError: No module named 'config'

Soy consciente de que la convención py3 es usar importaciones absolutas:

 from . import config

Sin embargo, esto conduce al siguiente error:

 ImportError: cannot import name 'config'

Así que no sé qué hacer aquí... Cualquier ayuda es muy apreciada. :)

over 4 years ago · Santiago Trujillo
16 Respuestas
Responde la pregunta

0

Estoy trabajando en una máquina Linux. Tuve el mismo problema cuando python my_module/__main__.py .

El error se soluciona si ejecuta el comando export PYTHONPATH=. antes de ejecutar su script.

 export PYTHONPATH=. python my_module/__main__.py
over 4 years ago · Santiago Trujillo Denunciar

0

Puede usar estas declaraciones para configurar el directorio de trabajo, que funcionó para mí con python3

 import os import sys sys.path.insert(1, os.getcwd())
over 4 years ago · Santiago Trujillo Denunciar

0

En mi experiencia, la variable de entorno PYTHONPATH no funciona siempre.

En mi caso, mi pytest solo funcionó cuando agregué la ruta absoluta: sys.path.insert( 0, "/Users/bob/project/repo/lambda" )

over 4 years ago · Santiago Trujillo Denunciar

0

Para mí, simplemente agregar el directorio actual funcionó.

Usando la siguiente estructura:

 └── myproject ├── a.py └── b.py

a.py:

 from b import some_object # returns ModuleNotFound error from myproject.b import some_object # works
over 4 years ago · Santiago Trujillo Denunciar

0

Si está utilizando python 3+, intente agregar las siguientes líneas

 import os, sys dir_path = os.path.dirname(os.path.realpath(__file__)) parent_dir_path = os.path.abspath(os.path.join(dir_path, os.pardir)) sys.path.insert(0, parent_dir_path)
over 4 years ago · Santiago Trujillo Denunciar

0

Tratar

 from . import config

Lo que hace es importar desde el mismo nivel de carpeta. Si intenta importarlo directamente, asume que es un subordinado

over 4 years ago · Santiago Trujillo Denunciar

0

Establezca la variable de entorno PYTHONPATH en el directorio raíz del proyecto.

Considerando UNIX-como:

 export PYTHONPATH=.
over 4 years ago · Santiago Trujillo Denunciar

0

Debe agregar la ruta de su proyecto a PYTHONPATH y asegurarse de usar importaciones absolutas .


Para UNIX (Linux, OSX,...)

 export PYTHONPATH="${PYTHONPATH}:/path/to/your/project/"

Para ventanas

 set PYTHONPATH=%PYTHONPATH%;C:\path\to\your\project\

Importaciones absolutas

Suponiendo que tenemos la siguiente estructura de proyecto,

 └── myproject ├── mypackage │ ├── __init__.py │ ├── a.py └── anotherpackage ├── __init__.py ├── b.py ├── c.py └── mysubpackage ├── __init__.py └── d.py

solo asegúrese de hacer referencia a cada importación a partir del directorio raíz del proyecto. Por ejemplo,

 # in module a.py import anotherpackage.mysubpackage.d # in module b import anotherpackage.c import mypackage.a

Para obtener una explicación más completa, consulte el artículo Cómo corregir ModuleNotFoundError e ImportError

over 4 years ago · Santiago Trujillo Denunciar

0

Declare la lista sys.path correcta antes de llamar al módulo:

 import os, sys #'/home/user/example/parent/child' current_path = os.path.abspath('.') #'/home/user/example/parent' parent_path = os.path.dirname(current_path) sys.path.append(parent_path) os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'child.settings')
over 4 years ago · Santiago Trujillo Denunciar

0

Simplemente puede agregar el siguiente archivo a su directorio de pruebas, y luego Python lo ejecutará antes de las pruebas

 __init__.py file import os import sys sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
over 4 years ago · Santiago Trujillo Denunciar

0

Establecer PYTHONPATH también puede ayudar con este problema.

Así es como se puede hacer en Windows

set PYTHONPATH=.

over 4 years ago · Santiago Trujillo Denunciar

0

Intenté tu ejemplo

 from . import config

obtuve el siguiente SystemError:
/usr/bin/python3.4 prueba.py
Rastreo (llamadas recientes más última):
Archivo "test.py", línea 1, en
desde . importar configuración
SystemError: módulo principal '' no cargado, no se puede realizar una importación relativa


Esto funcionará para mí:

 import config print('debug=%s'%config.debug) >>>debug=True

Probado con Python:3.4.2 - PyCharm 2016.3.2


Además, PyCharm le ofrece importar este nombre .
Tienes que hacer clic en config y aparece un icono de ayuda . ingrese la descripción de la imagen aquí

over 4 years ago · Santiago Trujillo Denunciar

0

TL; DR: no puede hacer importaciones relativas desde el archivo que ejecuta ya que el módulo __main__ no es parte de un paquete.

Importaciones absolutas : importe algo disponible en sys.path

Importaciones relativas : importe algo relativo al módulo actual, debe ser parte de un paquete

Si está ejecutando ambas variantes exactamente de la misma manera, una de ellas debería funcionar. Aquí hay un ejemplo que debería ayudarlo a comprender lo que está sucediendo. Agreguemos otro archivo main.py con la estructura general de directorios como esta:

 . ./main.py ./ryan/__init__.py ./ryan/config.py ./ryan/test.py

Y actualicemos test.py para ver qué está pasando:

 # config.py debug = True
 # test.py print(__name__) try: # Trying to find module in the parent package from . import config print(config.debug) del config except ImportError: print('Relative import failed') try: # Trying to find module on sys.path import config print(config.debug) except ModuleNotFoundError: print('Absolute import failed')
 # main.py import ryan.test

test.py primero:

 $ python ryan/test.py __main__ Relative import failed True

Aquí "test" es el módulo __main__ y no sabe nada acerca de pertenecer a un paquete. Sin embargo, la import config debería funcionar, ya que la carpeta ryan se agregará a sys.path .

main.py en su lugar:

 $ python main.py ryan.test True Absolute import failed

Y aquí la prueba está dentro del paquete "ryan" y puede realizar importaciones relativas. la import config falla ya que las importaciones relativas implícitas no están permitidas en Python 3.

Espero que esto haya ayudado.

PD: si te quedas con Python 3, ya no necesitas los archivos __init__.py .

over 4 years ago · Santiago Trujillo Denunciar

0

Este ejemplo funciona en Python 3.6.

Sugiero ir a Run -> Edit Configurations en PyCharm, eliminar cualquier entrada allí e intentar ejecutar el código a través de PyCharm nuevamente.

Si eso no funciona, verifique el intérprete de su proyecto (Configuración -> Intérprete del proyecto) y ejecute los valores predeterminados de configuración (Ejecutar -> Editar configuraciones ...).

over 4 years ago · Santiago Trujillo Denunciar

0

Como se indicó en los comentarios de la publicación original, esto parecía ser un problema con el intérprete de python que estaba usando por cualquier motivo, y no algo malo con los scripts de python. Cambié del paquete WinPython al python 3.6 oficial de python.org y funcionó bien. gracias por la ayuda a todos :)

over 4 years ago · Santiago Trujillo Denunciar

0

Me lo imaginé. Muy frustrante, especialmente viniendo de python2.

Tienes que agregar un . al módulo, independientemente de que sea o no relativo o absoluto.

Creé la configuración del directorio de la siguiente manera.

 /main.py --/lib --/__init__.py --/mody.py --/modx.py

modx.py

 def does_something(): return "I gave you this string."

mody.py

 from modx import does_something def loaded(): string = does_something() print(string)

principal.py

 from lib import mody mody.loaded()

cuando ejecuto main, esto es lo que sucede

 $ python main.py Traceback (most recent call last): File "main.py", line 2, in <module> from lib import mody File "/mnt/c/Users/Austin/Dropbox/Source/Python/virtualenviron/mock/package/lib/mody.py", line 1, in <module> from modx import does_something ImportError: No module named 'modx'

Ejecuté 2to3, y el resultado principal fue este

 RefactoringTool: Refactored lib/mody.py --- lib/mody.py (original) +++ lib/mody.py (refactored) @@ -1,4 +1,4 @@ -from modx import does_something +from .modx import does_something def loaded(): string = does_something() RefactoringTool: Files that need to be modified: RefactoringTool: lib/modx.py RefactoringTool: lib/mody.py

Tuve que modificar la declaración de importación de mody.py para solucionarlo

 try: from modx import does_something except ImportError: from .modx import does_something def loaded(): string = does_something() print(string)

Luego ejecuté main.py nuevamente y obtuve el resultado esperado

 $ python main.py I gave you this string.

Por último, solo para limpiarlo y hacerlo portátil entre 2 y 3.

 from __future__ import absolute_import from .modx import does_something
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda