パッケージを作るには、__init__.py
をディレクトリに作るってあったのですが
置いても置かなくても動作が変わらないような気がしました。
__init__.py
はなくてもディレクトリでパッケージとして認識はしてくれるということで良いのでしょうか?
(初期化処理が必要なくても、慣用的に置いたほうが良いのでしょうが・・・)
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
下記のような質問は推奨されていません。
- 質問になっていない投稿
- スパムや攻撃的な表現を用いた投稿
適切な質問に修正を依頼しましょう。
回答2件
2
ベストアンサー
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
1
下記に、役割がわかりやすく記述されています。
「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
下記のような回答は推奨されていません。
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
回答へのコメント
関連した質問
Q&A
解決済
【Laradock】workspaceとプロジェクトの`python3 --version`が違う
回答2
クリップ0
更新
2022/11/06
Q&A
解決済
Rstudioで起動時に必ず出るWarning (normalizePathとは?)
回答2
クリップ0
更新
2021/11/01
Q&A
解決済
pandasのインポートでエラーが出る
回答1
クリップ0
更新
2023/03/16
意見交換
クローズ
htdocsの上位ディレクトリにファイルを置く理由
回答8
クリップ1
更新
2023/03/12
Q&A
解決済
EC2,Apache,Django環境の「ModuleNotFoundError: No module named 'プロジェクト名_hoge'」エラーが出ていて困っています。
回答1
クリップ0
更新
2023/03/12
Q&A
解決済
PythonでPDFをダウンロードしたい
回答1
クリップ1
更新
2023/03/28
Q&A
解決済
ts6059のエラーが直りません
回答1
クリップ0
更新
2023/03/23
Q&A
受付中
Java: パッケージとMainファイルが同じファイルに存在してる場合のMainファイルの実行
回答1
クリップ0
更新
2023/03/21
同じタグがついた質問を見る
Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2017/10/28 07:36
2017/10/29 05:29