2016-04-17 33 views
1

私は多くの簡単なヘルパー関数を持つモジュールを持っていますが、大規模で退屈なものになっています。私はそれを簡単なパッケージに分割したいと思います。私のパッケージディレクトリは、PYTHONPATHに定義されており、このようになりますされていますモジュールをパッケージに変換中にエラーが発生しました

test 
|--__init__.py   <---this is empty 
|--a.py 
|--b.py 

これは、ライブラリは、モジュールAまたはBが含まれていない通常の方法(輸入試験)が、検査時に(DIR(テスト))にインポートされます、いくつかの最上位レベルの属性。私は間違っていることをヒントとして使うことができます。ありがとう!

解決策: initファイルは、いつでもアクセスしたいモジュールを自動的に読み込みます。これは、Python 3.4に固有の絶対パスの仮定を尊重します。

from .a import a 
from .b import b 

フォローアップ: 私の意図は、検索や管理が容易な、おそらく多くの小さなモジュールにつながる、独自のモジュールとして、各ヘルパースクリプトを持っていることでした。これは慣用的ですか?非効率的な?私は、initファイルにメンテナンスの意味を与えます。共有する経験やベストプラクティスありがとう。

+0

があなたから欲しい名前とBをインポートinitファイルに書きます。 – jonrsharpe

答えて

5

dirのパッケージには、import abも含まれている必要があります。パッケージをインポートするときに、パッケージに自動インポートモジュールをしたい場合は、__init__.py必見、あなたはパッケージをインポートするたびにモジュール1をインポートするには__init__.py

test   # package directory 
├── module1.py 
├── module2.py 
├── __init__.py 

にインポートするモジュールのimport文を追加することにより、__init__.pyに指定します以下を含みます。

編集 from test import module2

testパッケージからモジュールをインポートすることができ

import module1 

:、限り異なるモジュールは異なる目的を果たすよう

それより自分自身に関連するすべてのヘルパーを保つためにモジュール。パッケージのインポート時にデフォルトでインポートするすべてのモジュールは、__init__.pyファイルで指定する必要があります。必要に応じて他のものをインポートすることができます。 hereのように1回だけ初期化されたモジュールを複数回インポートしても、パフォーマンスに影響はありません。

+1

@JoeGavin ...あなたの現在のQとは無関係のトピックが表示されたり、現在のQを更新したりすると、他の懸念がある場合は、新しいQとして投稿してください。 –

+0

@ user161151 ..例。 –

1

私は最も簡単な答えは、このような希望のモジュールをインポートすることであると思う:

import test.a 
import test.b as b # variant if you don't want the package name 

その後、あなたは、モジュール内の関数を呼び出すことができます。

test.a.foo() 
b.bar() 
関連する問題