ModuleNotFoundError: ningún módulo llamado 'tensorflow.contrib'; 'tensorflow' no es un paquete
Estoy intentando comenzar con Tensorflow pero aparece un error. Busqué en Google y en este sitio web pero no encontré respuesta.
Entonces déjame explicarte. Actualmente estoy usando anaconda3 en mi computadora. Utilicé 'Anaconda Prompt' para instalar tensorflow con pip install -q --upgrade tensorflow
. Funcionó, pero cuando ejecuto este código (desde aquí ):
from __future__ import absolute_import, division, print_function
import os
import matplotlib.pyplot as plt
import tensorflow as tf
import tensorflow.contrib.eager as tfe
tf.enable_eager_execution()
print("TensorFlow version: {}".format(tf.VERSION))
print("Eager execution : {}".format(tf.executing_eagerly()))
Obtuve el siguiente error:
Traceback (most recent call last):
File "<ipython-input-11-9a561e7b074b>", line 1, in <module>
runfile('C:/Users/emile/Desktop/tensorflow.py', wdir='C:/Users/emile/Desktop')
File "C:\Users\emile\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 705, in runfile
execfile(filename, namespace)
File "C:\Users\emile\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "C:/Users/emile/Desktop/tensorflow.py", line 6, in <module>
import tensorflow as tf
File "C:\Users\emile\Desktop\tensorflow.py", line 7, in <module>
import tensorflow.contrib.eager as tfe
ModuleNotFoundError: No module named 'tensorflow.contrib'; 'tensorflow' is not a package
¿Quizás el problema sea causado por Anaconda?
Muchas gracias.
Un hallazgo interesante, espero que esto ayude a otros que están desarrollando bajo Anaconda o entornos integrados similares donde su programa no se ejecuta directamente desde la línea de comando, por ejemplo, como "python myprogram.py".
El problema podría deberse al hecho de que el programa en sí se llama tensorflow.py. Se ejecuta en un entorno donde no se inicia como módulo "principal", sino que lo carga otro programa Python (anaconda, en este caso).
Cuando un programa Python se carga de esta manera, el intérprete lo lee como un módulo y lo coloca en su lista de módulos (con el mismo nombre que el archivo), por lo que ahora tiene sys.modules["tensorflow"] que apunta al programa de usuario cargado (y NO al módulo tensorflow instalado). Cuando se encuentra la línea 'importar tensorflow as tf', Python ve que "tensorflow" ya está importado y simplemente lo hace tf=sys.modules["tensorflow"]
, lo cual es una referencia a la suya tensorflow.py
(ya es un problema, pero aún no lo ha hecho tf.enable_eager_execution()
; fallaría si lo hiciste, porque tu tensorflow.py no tiene esa función).
Ahora, la parte interesante:
import tensorflow.contrib.eager as tfe
Python ya tiene 'tensorflow' importado (¡tu módulo!), por lo que espera encontrar cualquier submódulo en el mismo directorio que el tensorflow.py cargado. En particular, espera que ese directorio sea un paquete de Python (lo tiene __init__.py
), pero obviamente no es así, de ahí el mensaje de error "... no es un paquete".