__init__.pyからPythonでファイルをインポートする
質問
次の構造があると仮定します。
app/
__init__.py
foo/
a.py
b.py
c.py
__init__.py
a.py、b.py、およびc.pyは、いくつかの共通のインポート(ロギング、OS、REなど)を共有します。これらの3つまたは4つの共通モジュールを __ init __。py
ファイルからインポートできるので、すべてのファイルにインポートする必要はありませんか?
編集:私の目標は、各ファイルに5〜6個のモジュールをインポートすることを避けることであり、パフォーマンス上の理由とは関係ありません。
解決
いいえ、それらは各モジュールの名前空間に配置する必要があるため、何らかの方法でそれらをインポートする必要があります( logging
を関数引数として渡さない限り、これは奇妙な方法です。控えめに言って)。
しかし、とにかくモジュールは一度しかインポートされない(そして a
、 b
、および c
名前空間に配置される)ので、メモリを使いすぎるなどの心配はありません。
もちろん、それらを別のモジュールに入れて、 を各 a
、 b
、および c にインポートできます。 code>、ただし、この個別のモジュールは毎回インポートする必要があります。
他のヒント
include.py
などの一般的なファイルを使用してこれを行うことができますが、ワイルドカードのインポートを伴うため、推奨されるプラクティスに反します。次のファイルを考慮してください。
app/
__init__.py
foo/
a.py
b.py
c.py
include.py <- put the includes here.
__init__.py
今、 a.py
などで、次のようにします:
from include import *
上記のように、ワイルドカードのインポートは推奨されないため、推奨されません。
はい、でもやらない。真剣に、しないでください。しかし、まだそれを行う方法を知りたい場合は、次のようになります:
import __init__
re = __init__.re
logging = __init__.logging
os = __init__.os
面倒で無意味なだけでなく、パッケージが __ init __。py
を実際にそのように使用することを想定していないため、それをしないように言います。パッケージの初期化コードです。