¿Por qué la importación de un paquete no es válida cuando se utiliza el nombre de alias del paquete?

Para que quede más claro, considere un ejemplo numpy:

import numpy as np from numpy import array 

Esto funciona como se esperaba. Pero ¿qué pasa con esto?

 from np import array 

La salida es:

 Traceback (most recent call last)  in () ----> 1 from np import array ModuleNotFoundError: No module named 'np' 

Una vez que haya establecido el alias del número de módulo importado como np , ¿no podría ser capaz de importar algo más usando np solamente?

Además, el id() de ambos es el mismo: tanto numpy como np refieren a la misma cosa.

El nombre del módulo sigue siendo numpy , incluso después de importar el módulo como np .

Lo que la import … as … syntax básicamente hace es esto:

 np = internal_import_module('numpy') 

Entonces, np es solo el nombre local que se usa para referirse al módulo numpy . Si miras el nombre del módulo de np , puedes ver que sigue siendo 'numpy' :

 >>> import numpy as np >>> np.__name__ 'numpy' 

Ahora, el nombre local de un módulo no se usa en absoluto cuando se evalúa otra statement de importación. Así que tu from numpy import array es básicamente esto:

 array = internal_import_module('numpy').array 

Aquí la array es nuevamente solo un nombre local para el miembro de la array dentro del módulo numpy . Sin embargo, no es un miembro dentro del módulo np porque simplemente no hay un módulo con ese nombre.