コードを追加すること__init__.py
-
02-07-2019 - |
質問
っては、どのモデルシステムdjangoの作品と思うんです。
知っていることを作成します空 __init__.py
ファイルを指定すると、現在のディレクトリがパッケージです。そのときに一部変数 __init__.py
その輸入*ない不具合を修正しました。
がdjangoを追加し、バンチのかな---。インポート諸表を定義し、バンチの授業 __init__.py
.なぜですか?しているのではないだだけの汚?ある理由を必要としたこのコード __init__.py
?
解決
すべての輸入 __init__.py
はないと使用できない場合があ輸入のパッケージ(ディレクトリ)が含まれます。
例:
./dir/__init__.py
:
import something
./test.py
:
import dir
# can now use dir.something
編集:忘れても、コード __init__.py
に初めて輸入しているモジュールからのディレクトリです。なので通常は置、パッケージレベルのトの再計算コードです。
EDIT2:dgrant指摘される可能性を混乱私の例です。に __init__.py
import something
インポートすることができずモジュールの必要はありませんからソフトウェアによるものです。例えば、今まで代替することはできないと import datetime
, そのトップレベル test.py
このスニペットを作:
import dir
print dir.datetime.datetime.now()
や
import dir.some_module_in_dir
print dir.datetime.datetime.now()
下線はすべての名前を与え __init__.py
, また輸入モジュール、関数やクラス、自動的に利用可能パッケージの名前空間まで輸入のパッケージ又はモジュールのソフトウェアによるものです。
他のヒント
で個人の嗜好に、真のレイアウトのpythonモジュールです。
例えば、モジュールと呼ばれ erikutils
.二つの型があることができるモジュールを与えられ、というファイルと erikutils.py ご sys.path
やすいというディレクトリ erikutils ご sys.path
空 __init__.py
ファイルることを確認できます。してみましょう信じてチームのモジュールと呼ばれ fileutils
, procutils
, parseutils
び出すためのものではありませんとするサブモジュールの下で erikutils
.できます。pyというファイル fileutils.py, procutils.py, は、 parseutils.py:
erikutils
__init__.py
fileutils.py
procutils.py
parseutils.py
これによって機能するだけでなるの fileutils
, procutils
, や parseutils
モジュールです。とてみましょう気になれない新しいモジュールと呼ばれ miscutils
.というを呼び出すことができるのはこの機能はこのように:
erikutils.foo()
erikutils.bar()
よって
erikutils.miscutils.foo()
erikutils.miscutils.bar()
での erikutils
モジュールがディレクトリ、ファイルを指定することができま機能の __init__.py
ファイルです。
にdjangoの例を考えることができるで django.db.models.fields
.すべてのdjango-フィールドクラスが定義されています __init__.py
ファイルの django/db/モデル分野 ディレクトリです。思いこんでいに詰め込みする仮想 django/db/models/fields.py モデルのように分割でにいくつかのsubmodules(related.py, files.py, 例えばやって作られた-フィールド定義のモジュール自体が __init__.py
).
を使用 __init__.py
ファイルでパッケージの内部構造からは見ることができないのです。の場合、内部構造の変化(例えばいつの脂肪モジュールの二つ)だけを調整する __init__.py
ファイルがないのコードに依存するパッケージです。することもできます。部品のパッケージ目に見えないため、例えばていない場合、一般の利用.
注意利用できるの del
コマンドで典型的な __init__.py
あるていれば次のようになるはずです:
from somemodule import some_function1, some_function2, SomeObject
del somemodule
在する場合には、その結果生じる分割 somemodule
の新しい __init__.py
う:
from somemodule1 import some_function1, some_function2
from somemodule2 import SomeObject
del somemodule1
del somemodule2
外部からのパッケージも見てます。