Skip to main content
 首页 » 编程设计

python之为什么在使用包的别名时从包中导入无效

2025年05月04日13jyk

为了更清楚,考虑一个 numpy 示例:

import numpy as np 
from numpy import array 

这按预期工作。但是这个呢:

from np import array 

输出是:

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

一旦我将导入模块 numpy 的别名设置为 np,难道我不能只使用 np 导入其他东西吗?

另外,两者的 id() 是相同的——numpy 和 np 指的是同一个东西。

请您参考如下方法:

模块名称仍然是 numpy,即使您将模块导入为 np。

import … as … 语法基本上是这样的:

np = internal_import_module('numpy') 

所以 np 只是用来引用 numpy 模块的本地名称。如果你查看np的模块名称,你会发现它仍然是'numpy':

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

现在,在评估另一个导入语句时,根本不会使用模块的本地名称。所以你的 from numpy import array 基本上就是这样:

array = internal_import_module('numpy').array 

这里 array 再次只是 numpy 模块内的 array 成员的本地名称。然而,它不是 np 模块中的成员,因为根本不存在具有该名称的模块。