2017-06-19 10 views
1

私はPythonを初めて使いましたが、どのようにしてimportステートメントが動作するかを理解していると思いました。次の例は私が証明しない。 tree以来インポートされたモジュールをネストされたモジュールを参照するために使用する

# Works 
from sklearn import tree 
classifier = tree.DecisionTreeClassifier() 

# Doesn't work 
import sklearn 
classifier = sklearn.tree.DecisionTreeClassifier() 
# Error: AttributeError: module 'sklearn' has no attribute 'tree' 

私は、ドットシンタックスを使用してアクセスすることはできません別のモジュール自体のですか? "from x import y"が正規の方法であっても、それはオプションのみですか?

答えて

3

モジュールをインポートすると、Pythonはモジュールを探します。それは__init__.pyファイルを持つ任意のディレクトリである "パッケージ"である可能性があります。このファイルは、ディレクトリ名としてインポートされます。

import name.sub_package.module_a 
import name.sub_package.module_b 
import name.module_c 

は、パッケージ内のモジュールの残りの部分をインポートするので、彼らは直接使用することができます:あなたの__init__.pyファイルで

は、あなたが通常持っているでしょう。時には、特に大きなモジュールの場合、パッケージの作者はPythonがロードするモジュールが少なくて済むため、ロード時間を短縮することになります。これは、あなたが行うときことを意味します

from sklearn import tree 

私はパッケージが少しこのようになりますと仮定しています:

sklearn/ 
    __init__.py 
    tree/ 
     __init__.py 

それはsklearn/__init__.pyをインポートすることは、その後、treeとしてsklearn/tree/__init__.pyを輸入し、何treeがないことを見ています。

しかし、明らかに__init__.pyには、import sklearn.treeがありません。インポートすると見つからないためです。

この問題を解決するには、手動でインポートします。

import sklearn.tree 
classifier = sklearn.tree.DecisionTreeClassifier() 
関連する問題