【初心者向け】Pythonのimportって何? パッケージ編

python_logo

どうも、こんにちは!

Pythonってすごく簡単にプログラムを書けるから普段は意識しないところでエラーが起こるとパニックになるんですよね・・・

あれ・・・、いつもはこの書き方でだいたいオッケーなのに・・・
何がいけないの!?っていうのは、私もよくやっちゃうんですよね 笑

そこで、今回はパッケージのインポートについて説明したいと思います!

モジュールのインポートについては以下の記事で説明してますよ!

目次

  1. packageって何?
  2. importの役割
  3. importの書き方
  4. importの注意点

それではみていきましょー!

packageって何?

複数のモジュールをまとめたのがパッケージです。

ディレクトリとファイルの関係は分かりますね。まさにあれの関係に近いです。

パッケージはモジュールを持つこともできますし、さらにパッケージを持つこともできます。

まったく同じってわけではありませんが、かなり似た関係ですので、そういうイメージとして覚えていて問題はないです。

ちなみに・・・

Pythonのバージョンが3.2以前なら、ディレクトリ内に__init__.pyが必要でした。
Pythonのバージョンが3.3以降なら、__init__.pyがなくてもパッケージとして見なされます!

importの役割

これはモジュールの場合と変わりがありません。

このパッケージ使わせてもらうで!っていう宣言をしています。

プログラムを書いていると段々と一つのファイルでは収まりきらなくなります。

そろそろ、管理しきれないなーと思った時にファイルの整理をするのですが、その時がパッケージを作る基準になるかと思います。

ちなみに裏ではそのパッケージを必死にPython君が探しています。

パッケージを探すPython君の苦労についてはまた後日・・・・!

importの書き方

パッケージはさらにパッケージやモジュールを持つことができます。 したがって、モジュールとの書き方の違いはまさにこの点です。

これからの説明は以下のディレクトリ構造を考えていますよ!


.
├── caller.py
└── meta
    ├── __init__.py
    ├── spam.py
    └── sub
        ├── egg.py
        └── __init__.py

それではみていきましょう!

import Package

パッケージ自体のインポート


import meta

はい、これだけです。

metaパッケージ直下の__init__.pyにオブジェクトを記述しておけば、以下のようにアクセスができます・・!


meta.showInit()

これ以上この処理に踏み込むのは危険です。
深淵を覗くとき、深淵もこちらをまた覗いているのだ・・・

冗談はさておき、この処理はまた別の記事で取り上げたいと思います。

初めてPythonを使う方は気にしなくていいです。

それよりもPythonに慣れましょう!

サブパッケージのインポート


import meta.sub

パッケージの下のパッケージをサブパッケージと呼びます

パッケージ以下のパッケージやモジュールにアクセスする場合は.(ドット)をつけます。

モジュールのインポート

パッケージにあるモジュールもインポートできます


import meta.sub.egg

モジュールを使うときは以下のようなコードになります。


meta.sub.egg.func2()

このインポート方法については1つの欠点があります。

そう、簡単なことなのでお分かりだと思います。

パッケージ名が長くなったり、パッケージの中にパッケージのような階層が多くあった場合を考えてみましょう。

そうです!長すぎるとアクセスがめんどくさい!!!
たったそれだけですが、コードを書いていくとほんとうに面倒なのです。

from A_Package import B_Object

長すぎるアクセスを短縮して書けるのが単純なインポート文との違いになります。

サブパッケージのインポート


from meta import sub

呼び出し方はこんな感じです!


sub.egg.func2()

モジュールのインポート

さらにモジュールをインポートしましょう!


from meta.sub import egg

以下で呼び出します!


egg.func2()

かなり短くなってきましたね。

オブジェクトのインポート

モジュールのようにオブジェクトもインポートできます。


from meta.sub.egg from func2


func2()

ね?楽々によびだせるでしょ?

プログラミングの手間が少しだけらくらくになります。

さて、確認のコードは以下になります。
気になる方はどうぞ実行してみてください!

importの注意点

import packageの形式ではモジュールの中身を指定できない

はい、これは私がよくやってしまうエラーです。

モジュールの中身を直接アクセスしたいと思ったらfromによる指定を使いましょう

from package import *

これは以下の記事でも取り上げています。

色々理由はあるのですが、やめておいた方が無難です。

まとめ

いかがだったでしょうか?

基本的なimportについてはモジュール編と合わせれば、大丈夫だと思います。

ただ、importは知れば知るほど深いのでさらに別の記事で取り上げたいと思います!

それでは、みなさんのよりよいPythonライフが送れることを祈ってますね!