わかりました、例を挙げましょう(以下の元の質問)。
私が直面している問題を示す「myproject」というパッケージを作成しました。
- ここからパッケージをダウンロードしてください: https://dl.dropbox.com/u/11013311/myproject.zip
- パッケージをインストールします (例: sudo python setup.py development)
- Ipython セッションを開き、「import myproject」と入力します。
- 「myproject」と入力し始めると。タブを 2 回押して、使用可能なメソッド/値を取得します...、同じ問題を示す "myproject.myproject" が表示されます。
私が間違っていることを説明できる人はいますか?アンドリュー・アルコックからの回答は、それを修正するのに役立ちません。少なくとも、どこに問題があるのか わかりません。
もちろん、このような単純な例では、パッケージ ファイルをそれほど複雑にする必要はありませんが__init__.py
、私の実際のプロジェクトでは、.COOL
myproject.COOL
回答ありがとうございます。
編集: utapyngoに報奨金を授与しました。彼のソリューションが効果的であり、さらに何かを学んだからです (深いサブモジュールを使用した相対インポート)。しかし、 Andrewとnehzの回答に感謝したいと思います ( nehzは私の問題を解決する解決策も提供してくれましたが、非常に主観的には「あまり美しくない」と感じました。Andrewは有用なアドバイスを提供してくれました)。賞金を分けられないのは残念です。
**
元の質問:
**
私は質問を正しく表現したかどうか確信が持てません。多数のサブパッケージを含む大きなコードを作成しました。簡単にするために、それを 'CODE' と呼びましょう。
問題は: 'CODE' が名前空間に表示されるので、CODE.CODE
orCODE.CODE.CODE
などを無制限に持つことができます。警告なしに)。
問題は私__init__.py
とコードの構造に関係していると思われるので、ここでさらに情報を提供します。
簡素化されたコード構造:
CODE
| __init__.py
| tools
| __init__.py
| mytools.py
| other
| __init__.py
| init.py
| sub
| __init__.py
| module.py
ファイル: __init__.py
(最初のもの、のルートにありCODE
ます)
import CODE.tools.mytools as MyTools
import CODE.other.init
OBJ = CODE.other.init.function()
...
このファイルは、CODE、またはインポートできるその他のモジュールからmytools.py
はインポートされません。
などのモジュールをインポートできます。最後に、のようなモジュールは、または(CODE から)のいずれかをインポートできます。通常、すべてのインポートは in: のように絶対インポートで行われます。OBJ
OBJ
init.py
mytools.py
module.py
mytools.py
OBJ
from CODE.sub.module import func
誰かがそのような行動の説明を持っていますか? SOに関する関連する質問は見つかりませんでしたが、私の言い回しが間違っている可能性があります。