パッケージを作るには、__init__.py
をディレクトリに作るってあったのですが
置いても置かなくても動作が変わらないような気がしました。
__init__.py
はなくてもディレクトリでパッケージとして認識はしてくれるということで良いのでしょうか?
(初期化処理が必要なくても、慣用的に置いたほうが良いのでしょうが・・・)
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
Python 3.3 から、__init__.py
ファイルを必要としない暗黙的な名前空間パッケージがサポートされるようになりました。
そのため、Python 3.3+ の環境では、__init__.py
ファイルがない場合でもパッケージとして認識します。
What’s New In Python 3.3 — Python 3.7.0a2 ドキュメント
PEP 420: 暗黙的な名前空間パッケージ
__init__.py
マーカーファイルを必要としないパッケージディレクトリと、複数のモジュールパスをネイティブでサポートします(PEP 420 に記載された様々なサードパーティでの名前空間のアプローチに影響されています)
5. インポートシステム — Python 3.6.3 ドキュメント
5.2.1. 通常のパッケージ
Python では、 通常のパッケージ と 名前空間パッケージ の 2 種類のパッケージが定義されています。通常のパッケージは Python 3.2 以前から存在する伝統的なパッケージです。典型的な通常のパッケージは __init__.py
ファイルを含むディレクトリとして実装されます。
5. インポートシステム — Python 3.6.3 ドキュメント
5.2.2. 名前空間パッケージ
名前空間パッケージは様々な ポーション を寄せ集めたもので、それぞれのポーションはサブパッケージを親パッケージに提供します。
(中略)
名前空間パッケージには parent/__init__.py
ファイルはありません。
Google翻訳(PEP 420 -- Implicit Namespace Packages | Python.org)
名前空間パッケージと正規パッケージの違い
名前空間パッケージと通常のパッケージは非常に似ています。違いは次のとおりです。
名前空間パッケージの一部は、すべて同じディレクトリ構造から来る必要はなく、同じローダーから来る必要もありません。通常のパッケージは自己完結型です。すべてのパーツは同じディレクトリ階層にあります。
名前空間パッケージには__file__
属性はありません。
名前空間パッケージの__path__
属性は、親パスが変更されると自動的に更新される、文字列の読み取り専用の反復可能な属性です。
名前空間パッケージには__init__.py
モジュールはありません。
名前空間パッケージの__loader__
属性には、異なるタイプのオブジェクトがあります。
投稿2017/10/28 04:07
総合スコア324
0
下記に、役割がわかりやすく記述されています。
「init.pyの役割」
http://samurait.hatenablog.com/entry/__init__.py%E3%81%AE%E5%BD%B9%E5%89%B2
メリットは、
init.pyファイルがある事で異なるディレクトリにあるpythonスクリプトを簡単にインポート出来るようになります.
投稿2017/10/27 19:21
編集2017/10/27 20:06総合スコア1106
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/28 07:36
退会済みユーザー
2017/10/29 05:29