2016-04-11 24 views
0

モジュールをインポートすると、このネストされたシナリオは正常に動作します。しかし、私がパッケージをインポートしようとすると、私は一貫性のない結果を得ました。私の現在のフォルダのpython: 'ネストされた'モジュールを持つインポートされたパッケージ

内容::これはスクリプトである

mypackages <directory> 
    __init__.py 
    one.py 
    two.py 
    three.py 

:ここでは非常に単純なケースです

__init__.py : 
import one 

one.py : 
import two 

two.py : 
import three 

私がアクセスできるようになりますことを期待していが、と3つのこのように:

import mypackages 
mypackages.one.two 
mypackages.one.two.three 

または他の言葉で論理レベルは、このようなことshoul:

one 
    two 
    three 

しかし、私は輸入mypackagesを行うとき、私はすべてのモジュールが同じレベルで露出ました:

>>> import mypackages 
>>> print dir(mypackages) 
['__builtins__', '__doc__', '__file__', '__name__', '__package__', 
'__path__', 'one', 'three', 'two'] 

それはすべきですoneモジュールを表示するだけですか? それは彼らが同じレベル(私は直接mypackages.twomypackages.threeを使用することができます)であることを意味しているすべてのone , twothreeを示し、なぜ私は混乱しています。

説明はありますか?

答えて

0

thisをお読みください。

ファイルを同じレベルに置くと、同じパッケージレベルになります。

import mypackage.one 
import mypackage.one.two 
import mypackage.one.two.three 
:あなたがパッケージにアクセスすることができ、その後、

mypackage 
├── __init__.py 
├── one.py # contains "import two" 
└── two 
    ├── __init__.py 
    ├── three 
    │   ├── __init__.py 
    │   └── three.py 
    └── two.py # contains "import three" 

そして: あなたのケースでは、このアーキテクチャを取得する必要があります

関連する問題