[英]Why does import <package> not work ,but import <package.submodule> work?
我正在嘗試使用一個名為 nilearn 的 python nilearn
,但我認為這個問題可能會更普遍地發生,我只是想了解為什么會發生這種情況。 如果有任何進一步的參考資料可以幫助我更深入地了解正在發生的事情,我將不勝感激。
nilearn 介紹教程中的第一個說明是
import nilearn
print(nilearn.datasets.MNI152_FILE_PATH)
如果我嘗試運行它,我會收到以下錯誤:
AttributeError: module 'nilearn' has no attribute 'datasets'
但是,如果我嘗試以下代碼,一切正常
import nilearn.datasets
print(nilearn.datasets.MNI152_FILE_PATH)
顯然, nilearn
確實有一個名為datasets
的子模塊。 為什么我剛import nilearn
就無法使用它。
更廣泛地說,這種行為是nilearn
的,還是更廣泛地發生在 python 包中? 究竟是怎么回事?
在 Python 中,當你導入某些東西時,你只導入那個模塊。 nilearn
是一個模塊, nilearn.datasets
是另一個。 通過導入nilearn
,您只是導入了該模塊(不包括nilearn.datasets
子模塊),而不是nilearn.datasets
模塊。
如果你要做
from nilearn import *
您將獲得nilearn.datasets
模塊,因為在 import 語句中使用*
時,您正在導入其中的每個模塊,因此導入了nilearn.datasets
。
或者你也可以這樣做:
from nilearn import nilearn.datasets
如果你只是想要這個子模塊。
這不是 nilearn 特有的。 這通常發生在模塊是這樣定義的
module_name/
__init__.py
submodule.py
這里我們不能導入 module_name 並使用 module_name.submodule。這會拋出錯誤。 我們必須像import module_name.submodule
一樣導入
您可以在 python 中了解更多關於導入的信息以及模塊與 package 的區別。在 python中導入是如何工作的?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.