Python のモジュールとパッケージの違いは何ですか?
参照:「パッケージ」と「モジュール」の違いは何ですか?(他の言語の場合)
ベストアンサー1
- Pythonファイルはどれもモジュール名前は拡張子を除いたファイルの基本名になります
.py
。 - あパッケージは Python モジュールのコレクションです。モジュールは単一の Python ファイルですが、パッケージは追加のファイルを含む Python モジュールのディレクトリです。これにより、パッケージは、たまたま Python スクリプトの束を含むディレクトリと区別されます。対応するディレクトリに独自のファイル
__init__.py
が含まれている限り、パッケージは任意の深さにネストできます。__init__.py
モジュールとパッケージの区別は、ファイル システム レベルのみで保持されるようです。モジュールまたはパッケージをインポートすると、Python によって作成される対応するオブジェクトは常に 型になりますmodule
。ただし、パッケージをインポートすると、そのパッケージ__init__.py
のファイル内の変数/関数/クラスのみが直接表示され、サブパッケージやモジュールは表示されないことに注意してください。
例
例として、xml
Python 標準ライブラリのパッケージを考えてみましょう。そのxml
ディレクトリには__init__.py
ファイルと 4 つのサブディレクトリが含まれ、サブディレクトリにはファイルと、その他にファイルがetree
含まれています。__init__.py
ElementTree.py
パッケージ/モジュールを対話的にインポートしようとすると何が起こるかを確認します。
>>> import xml
>>> type(xml)
<type 'module'>
>>> xml.etree.ElementTree
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'etree'
>>>
>>>
>>> import xml.etree
>>> type(xml.etree)
<type 'module'>
>>> xml.etree.ElementTree
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'ElementTree'
>>>
>>>
>>> import xml.etree.ElementTree
>>> type(xml.etree.ElementTree)
<type 'module'>
>>> xml.etree.ElementTree.parse
<function parse at 0x00B135B0>
注記
Pythonには内蔵などのsys
C で書かれたモジュールがありますが、質問ではそれらを考慮するつもりはなかったと思います。