Python のモジュールとパッケージの違いは何ですか? 質問する

Python のモジュールとパッケージの違いは何ですか? 質問する

Python のモジュールとパッケージの違いは何ですか?

参照:「パッケージ」と「モジュール」の違いは何ですか?(他の言語の場合)

ベストアンサー1

  • Pythonファイルはどれもモジュール名前は拡張子を除いたファイルの基本名になります.py
  • パッケージは Python モジュールのコレクションです。モジュールは単一の Python ファイルですが、パッケージは追加のファイルを含む Python モジュールのディレクトリです。これにより、パッケージは、たまたま Python スクリプトの束を含むディレクトリと区別されます。対応するディレクトリに独自のファイル__init__.pyが含まれている限り、パッケージは任意の深さにネストできます。__init__.py

モジュールパッケージの区別は、ファイル システム レベルのみで保持されるようです。モジュールまたはパッケージをインポートすると、Python によって作成される対応するオブジェクトは常に 型になりますmodule。ただし、パッケージをインポートすると、そのパッケージ__init__.pyのファイル内の変数/関数/クラスのみが直接表示され、サブパッケージモジュールは表示されないことに注意してください。


例として、xmlPython 標準ライブラリのパッケージを考えてみましょう。そのxmlディレクトリには__init__.pyファイルと 4 つのサブディレクトリが含まれ、サブディレクトリにはファイルと、その他にファイルがetree含まれています。__init__.pyElementTree.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には内蔵などのsysC で書かれたモジュールがありますが、質問ではそれらを考慮するつもりはなかったと思います。

おすすめ記事