Tengo una situación simple en un sistema Linux:

ls test_repo

example  __init__.py  text

En el directorio text, solo tengo 2 archivos:

__init__.py ex.py

En el directorio example, tengo solo 2 archivos nuevamente:

__init__.py test.py

En ex.py tengo el código:

def test():
    print(10)

Ahora, en el directorio de texto, quiero importarlo:

from text.ex import test

print(test())

Pero cuando ejecuto el archivo en el directorio de ejemplo, así como fuera de él: python test.py

Recibo el error:

Traceback (most recent call last):
  File "test.py", line 1, in <module>
    from text.ex import test
ModuleNotFoundError: No module named 'text'

¿Cómo puedo importar la función?

¿Debo poner algo en __init__.py?

0
tafa 8 oct. 2019 a las 03:38

3 respuestas

La mejor respuesta

Para todos los que tengan este problema de importación, déjenme explicarles cómo funciona

Primero cuando importa cierto módulo a un archivo, ¿cómo sabe dónde encontrar el módulo? cuando importamos el módulo, Python verifica ese módulo en varias ubicaciones. Estas ubicaciones están en sys.path. Si imprime sys.path, dará una lista de ubicaciones donde Python verifica cuando ejecutamos una declaración import. en la salida de mi máquina se ve así ingrese la descripción de la imagen aquí

¿Cuáles son los valores en esta lista?

  1. el primer valor es solo el directorio donde se ejecuta mi script actual
  2. Los siguientes valores son directorios listados en la variable de entorno de la ruta de Python
  3. Directorios de bibliotecas estándar
  4. directorio de paquetes del sitio para paquetes de terceros

Entonces, Python verifica todas estas ubicaciones cuando ejecutas una importación.

Cuando ejecuta python test.py dentro del directorio de ejemplo, esto es lo que sucede

  1. Python agrega la ubicación donde su script actual se ejecuta en la lista sys.path (que es test_repo/example)
  2. El archivo test.py tiene una declaración de importación del módulo text.ex
  3. Python busca en toda la lista sys.path para cargar el módulo text.ex
  4. dado que el archivo ex.py está dentro del módulo test_repo/text y sys.path no tiene la ubicación para el test_repo/text, dará el error Ningún módulo llamado 'texto'
0
Rajith Thennakoon 8 oct. 2019 a las 02:00

En su caso, puede agregar esto en la línea inicial de su test.py

import sys
sys.path.insert(0, "..")

Debido a que su test.py está ubicado dentro del directorio example, no en el directorio root.

0
Ghifari Adam Faza 8 oct. 2019 a las 03:51

Mire esta pregunta, en StackOverflow. Tiene varios ejemplos para importar archivos, así que solo use el que mejor se adapte a su situación.

1
AnonymousHacker1279 8 oct. 2019 a las 00:58
58278762