0Pricing
Python Academy · レッスン

パッケージと __init__.py

適切なディレクトリ構成でモジュールをパッケージに整理します。

「パッケージと __init__.py」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。

パッケージとは

パッケージとは、__init__.py ファイルと 1 つ以上のモジュールを含むディレクトリです。Python は、このようなディレクトリをインポート元として扱います。

mypackage/
    __init__.py
    utils.py
    math_helpers.py

__init__.py ファイル

__init__.py は、パッケージがインポートされたときに実行されます。空にすることも、選択した名前を呼び出し元に公開することもできます。

# mypackage/__init__.py
from .utils import helper
from .math_helpers import add

パッケージからのインポート

ドット記法を使って、サブモジュールや __init__.py で定義された名前をインポートします。

import mypackage
from mypackage import helper
from mypackage.math_helpers import add
print(add(2, 3))

サブパッケージ

パッケージは入れ子にできます。独自の __init__.py を持つサブディレクトリは、サブパッケージになります。

mypackage/
    __init__.py
    network/
        __init__.py
        http.py

相対インポート

パッケージ内では、先頭にドットを付けた相対インポートを使うと、パッケージ名を直接指定せずに同じ階層のモジュールを参照できます。

# mypackage/network/http.py
from ..utils import helper   # two levels up

絶対インポートと相対インポート

絶対インポートは曖昧さがなく、推奨されます。相対インポートは、長い名前を避けたい大規模なパッケージ内で便利です。

# Absolute
from mypackage.utils import helper

# Relative (inside mypackage)
from .utils import helper

__init__.py の __all__

__all__ を定義すると、from package import * でエクスポートする名前を制御できます。

# mypackage/__init__.py
__all__ = ['helper', 'add']
from .utils import helper
from .math_helpers import add

名前空間パッケージ(PEP 420)

Python 3.3 以降は、__init__.py を持たないディレクトリである名前空間パッケージをサポートしています。パッケージを複数のディレクトリに分割する場合に便利です。

# No __init__.py needed
# Just have the directory and import normally
import myns.module

パッケージの __init__ 初期化

__init__.py を使って、パッケージレベルの定数を設定したり、ロギングを構成したり、サイズの大きいサブモジュールを遅延ロードしたりできます。

# mypackage/__init__.py
import logging
logging.getLogger(__name__).addHandler(logging.NullHandler())
VERSION = '1.0.0'

パッケージの配布

pyproject.toml または setup.py を追加すると、pip でパッケージをインストールできるようになります。

# pyproject.toml excerpt
[project]
name = "mypackage"
version = "1.0.0"

# Install locally
# pip install -e .

パッケージ属性の調査

__file__、__path__、__name__ を使うと、実行時にパッケージのメタデータを調べられます。

import mypackage
print(mypackage.__file__)   # path to __init__.py
print(mypackage.__path__)   # list of directory paths
print(mypackage.__name__)   # 'mypackage'

理解度チェック

ディレクトリを Python パッケージにするファイルはどれですか。

まとめ

パッケージは、__init__.py を使ってモジュールをディレクトリに整理します。明確さを重視する場合は絶対インポートを、パッケージ内では相対インポートを使用し、__all__ で公開 API を制御します。

よくある質問

「パッケージと __init__.py」レッスンは無料ですか?

はい。「パッケージと __init__.py」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。

「パッケージと __init__.py」で何を学びますか?

適切なディレクトリ構成でモジュールをパッケージに整理します。 ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Python Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「パッケージと __init__.py」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このPython Academyレッスンでコードを書いて実行できますか?

はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. モジュールの作成とインポート
  2. Python 標準ライブラリ
  3. パッケージと __init__.py
  4. pip によるパッケージのインストール
← Python Academyに戻る