Pythonのモジュールとライブラリの違いは何ですか?


87

私はJavaのバックグラウンドを持っており、Pythonは初めてです。先に進む前に、Pythonの用語を正しく理解していることを確認したいと思います。

モジュールについての私の理解は次のとおりです。読みやすくするために、多くのスクリプトでインポートできるスクリプト。Javaの場合と同じように、クラスがあり、そのクラスは他の多くのクラスからインポートできます。

ライブラリについての私の理解は次のとおりです。ライブラリには、その使用によって分離された多くのモジュールが含まれています。

私の質問は次のとおりです。ライブラリはパッケージのようなもので、たとえばと呼ばれるパッケージがありますfood

  • Chocolate.py
  • sweets.py
  • biscuts.py

foodパッケージに含まれていますか?

または、ライブラリはパッケージを使用するので、別のパッケージがある場合drink

  • milk.py
  • Juice.py

パッケージに含まれています。library2つのパッケージが含まれていますか?

また、アプリケーションプログラミングインターフェイス(API)には通常、階層の最上位にあるライブラリのセットが含まれています。

  1. API
  2. 図書館
  3. パッケージ
  4. モジュール
  5. 脚本

では、APIは2〜5個すべてで構成されますか?


3
Pythonは「パッケージ」という用語を使用しますが、「ライブラリ」という用語はあまり使用しません(標準ライブラリは別として)。
John Zwinck 2013年

回答:


79

Pythonチュートリアルから-モジュール

  • モジュール

    モジュールは、Pythonの定義とステートメントを含むファイルです。ファイル名は、サフィックスが.py付加されたモジュール名です。

  • パッケージ

    パッケージは、「点線のモジュール名」を使用してPythonのモジュール名前空間を構造化する方法です。

importステートメントのドキュメントを読むと、次のような詳細がわかります。

Pythonにはモジュールオブジェクトのタイプが1つしかなく、モジュールがPython、C、またはその他で実装されているかどうかに関係なく、すべてのモジュールがこのタイプです。モジュールを整理し、命名階層を提供するために、Pythonにはパッケージの概念があります。

パッケージはファイルシステム上のディレクトリ、モジュールはディレクトリ内のファイルと考えることができますが、パッケージやモジュールはファイルシステムから発信される必要がないため、この類推を文字通りに受け止めないでください。このドキュメントでは、この便利なディレクトリとファイルの例えを使用します。ファイルシステムディレクトリと同様に、パッケージは階層的に編成されており、パッケージ自体に通常のモジュールだけでなくサブパッケージも含まれている場合があります。

すべてのパッケージがモジュールであるが、すべてのモジュールがパッケージであるとは限らないことに注意することが重要です。言い換えれば、パッケージは単なる特別な種類のモジュールです。具体的には、__path__属性を含むモジュールはすべて パッケージと見なされます。

したがって、この用語moduleは特定のエンティティを指します。これは、インスタンスがmodulePythonプログラムで使用するオブジェクトであるクラスです。また、類推によって、これらのインスタンスが「作成された」ファイルシステム内のファイルを参照するためにも使用されます。

スクリプトという用語は、実行を目的とするモジュールを指すために使用されます。これは「プログラム」または「アプリケーション」と同じ意味ですが、通常、単純で小さなプログラム(つまり、最大で数百行の単一ファイル)を記述するために使用されます。スクリプトの作成には数分または数時間かかります。

用語のライブラリは、単純に、多くのアプリケーションで使用可能であることを目指して設計されたコードの束の総称です。特定のアプリケーションで使用できるいくつかの一般的な機能を提供します。

モジュール/パッケージ/何か他のものが「公開」されるとき、人々はしばしばそれをライブラリと呼びます。多くの場合、ライブラリには1つのパッケージまたは複数の関連パッケージが含まれていますが、単一のモジュールである場合もあります。

ライブラリは通常、特定の機能を提供しません。つまり、「ライブラリを実行」することはできません。

APIは、コンテキストに応じて異なる意味を持つことができます。例えば:

  • DBAPIバッファプロトコルなどのプロトコルを定義できます。
  • それは、アプリケーションと対話する方法を定義することができます(例えばPython/C API
  • ライブラリ/パッケージに関連する場合、その機能(関数/クラス/定数のセットなど)のためにそのライブラリによって提供されるインターフェイスにすぎません。

いずれにせよ、APIはPythonコードではありません。それは多かれ少なかれ正式な説明です。


40

パッケージモジュールだけが、Pythonに固有の明確な意味を持っています。

  1. APIは、コードの集まりではありません、それ自体が-それは、相互に通信する方法の様々な部分(通常はライブラリ)より、「プロトコル」仕様のようなものです。Pythonにはいくつかの注目すべき「標準」APIがあります。例:DB API

  2. 私の意見では、ライブラリアプリケーションではないものです-Pythonでは、ライブラリはモジュールです-通常はサブモジュールがあります。ライブラリのスコープは非常に可変です。たとえば、Python標準ライブラリは広大です(サブモジュールがかなりあります)が、PyPiには多くの単一目的のライブラリがあります(たとえば、py <2.7のバックポート)。collections.OrderedDict

  3. パッケージには、共通の名前空間の下でのpythonモジュールのコレクションです。実際には、特別な__init__.pyモジュール(ファイル)のあるディレクトリに複数のPythonモジュールを配置することで作成されます。

  4. モジュールがされることを意図してPythonコードの単一のファイルでインポートしました。実際には、かなりの数のモジュールがスクリプトとして実行されたことを検出し、その場合に特別なことを行うため、これは少し単純化されています。

  5. スクリプトがされることを意図されたPythonコードの単一のファイルで実行「メイン」プログラムとして。

  6. 複数のファイルにまたがるコードのセットがある場合は、スクリプトではなくアプリケーションを使用している可能性があります


1

ライブラリ:モジュールのコレクションです。

(ライブラリには、組み込みモジュール(Cで記述)+ Pythonで記述されたモジュールのいずれかが含まれています)。

モジュール:より複雑な構造を構築するために使用できる、標準化されたパーツまたは独立したユニットのセットのそれぞれ。

非公式な言葉で話すと、モジュールは特定の目的に使用され、他のプログラムでそのまま使用できるコード行のセットであり、チームとしてのDRY(D on't R epeat Y ourself)を回避し、主な要件。ソース

APIは、他のアプリケーションが直接アクセスせずにライブラリと対話するためのインターフェイスです。

パッケージは基本的にファイルのあるディレクトリです。

スクリプトとは、1つのファイル内の一連のコマンドを意味します。


0

私は、初心者が使用する用語を使用せずにこれに答えようとし、用語の最も「公式な」および/または最も理解された、または統一された使用とともに、それらが異なる方法で使用された理由または方法を説明します。

紛らわしいかもしれませんし、一生懸命考えて混乱したので、あまり考えないでください。とにかく、コンテキストは非常に重要です。

ライブラリ-ほとんどの場合、一般的なライブラリまたは同様の形式と使用法で作成された別のコレクションを指します。General Libraryは、「標準」で人気があり広く使用されているモジュールの合計です。魔女は、今のところ、またはショートカットを使用して、物事を可能または高速化する単一ファイルツールと考えることができます。一般ライブラリは、ほとんどの人がPythonをインストールするときに有効にするオプションです。この名前は「PythonGeneralLibrary」であるため、同様の構造やアイデアでよく使用されます。魔女は単にモジュールの束を持っていることであり、おそらくパッケージをグループ化して、通常はリストに入れます。リストは通常​​それらをダウンロードすることです。一般的に、それは同様の関心を持つ単なる関連ファイルです。それを説明する最も簡単な方法です。

モジュール-モジュールはファイルを参照します。ファイルには「スクリプト」が含まれており、ファイルの名前はモジュールの名前であり、Pythonファイルは.pyで終わります。ファイルに含まれているのは、関数や文字列などを使用して、一緒に実行されたコードだけです。おそらく最も頻繁に見られるメインモジュールは、他のファイル/モジュールから情報を取得できる特別なモジュールであるため、人気があります。ファイルとモジュールの名前が同じで、.pyを削除するだけなので、混乱します。本当にそれは、何かをより簡単に、または可能にするために誰かが書いたショートカットとして使用できるコードにすぎません。

パッケージ-これは一般的に時々使用される用語ですが、コンテキストによって違いが生じます。私の経験からの最も一般的な使用法は、一緒にグループ化された複数のモジュール(またはファイル)です。それらがグループ化される理由は、いくつかの理由が考えられます。それは、コンテキストが重要な場合です。これらは私がパッケージという用語に気づいた方法です中古。それらは、ダウンロード、作成、および/または保存されたモジュールのグループです。これはすべて真である場合もあれば、1つだけである場合もありますが、実際には、他のファイルを参照するファイルであり、正しい構造または形式である必要があり、合計はパッケージ自体であり、インストールされているか、含まれている可能性があります。 Python一般ライブラリ。パッケージにはモジュール(.pyファイル)を含めることができます。これらは相互に依存しており、正しく機能しない場合や、まったく機能しない場合があるためです。パッケージのすべての部分(モジュール/ファイル)には常に共通の目標があり、すべての部分の合計はパッケージ自体です。

パッケージ名はすべてのピースを接続するために使用されるモジュールの名前であるため、Pythonパッケージではほとんどの場合モジュールです。したがって、パッケージはモジュールであるため入力できます。また、特定の機能のみを実行するためパッケージではない他のモジュールを呼び出すこともできます。タスクには他のファイルが含まれません。パッケージには目標があり、各モジュールは連携してその最終目標を達成します。

ほとんどの混乱は、単純なファイルファイル名またはファイルのプレフィックスから生じ、モジュール名として使用され、次にパッケージ名として使用されます。

モジュールとパッケージをインストールできることを忘れないでください。ライブラリは通常、モジュールとパッケージのグループを一覧表示またはフォーマットするための総称です。Pythonの一般的なライブラリによく似ています。階層は機能せず、APIは実際には属していません。そうすれば、スクリプト、モジュール、パッケージを含むあらゆるウェアに存在する可能性があります。worlライブラリはそのような一般的な単語であり、多くのことに簡単に適用でき、APIを可能にします。その上または下に座ります。一部のモジュールは他のコードに基づいている可能性があり、それが純粋なPython関連の議論に関連すると私が思う唯一の時です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.