當從別名試圖import
- 這常見於scala
我很驚訝地看到下面的結果:導入模塊
創建一個別名
import numpy as np
使用別名導入模塊它包含
from np import linalg
ImportError: No module named np.linalg
python中是否有任何其他語法/等效用於導入模塊?
當從別名試圖import
- 這常見於scala
我很驚訝地看到下面的結果:導入模塊
創建一個別名
import numpy as np
使用別名導入模塊它包含
from np import linalg
ImportError: No module named np.linalg
python中是否有任何其他語法/等效用於導入模塊?
使用import module as name
確實不是創建別名。你誤解了進口系統。
導入做了兩兩件事:
sys.modules
。這完成一次只有;隨後的導入重新使用已經加載的模塊對象。as name
語法可讓您在上一步中控制名稱。
對於from module import name
語法,您仍然需要命名完整模塊,因爲在sys.modules
中查找module
。如果你真的想爲這個別名,你可以在那裏添加額外的引用:
import numpy # loads sys.modules['numpy']
import sys
sys.modules['np'] = numpy # creates another reference
注意,在這種特定情況下,進口numpy
還引發numpy.linalg
負荷,因此,所有你需要做的就是:
import numpy as np
# np.linalg now is available
不需要模塊別名。對於不自動導入子模塊包,你必須使用:
import package as alias
import package.submodule
和alias.submodule
隨後可無論如何,因爲一個子模塊始終作爲父包的屬性。
我對你的例子的理解是,既然你已經導入了numpy,你不能用別名重新導入它,因爲它已經導入了linalg部分。
from numpy import linealg – Laszlowaty
你的例子工作正常。你的意思是你真的嘗試過'從np import linalg'? – BrenBarn