1. ホーム 
  2. 備忘録 
  3. Python

Import文とAS

__init__ファイル

モジュールやパッケージのインポートについて説明する前に、先にパッケージ作成時のルールとして __init__ファイル のことを説明しておく

パッケージを作る際はディレクトリを作り、中に __init__ ファイルをおくことで Python 上でこのディレクトリをパッケージとして認識してくれるようになる

詳細についてはパッケージ化のページにて説明するので、ひとまずルールとして覚えておくこと

インポートの画像

インポートとは

インポートとは既存のモジュールを Python 内で使用できるように読み込ませることである

import [モジュール名] と続けることで指定のモジュールを読み込むことができる

lesson.py

# モジュールのインポート
import lesson_package.utils

r = lesson_package.utils.say_twice('hello')
print(r)  # hello!hello!

lesson_package/utils.py

def say_twice(word):
    return (word + '!') * 2

また、from文をつかうことでモジュール名だけで関数を使えるようにしたり、関数だけをインポートしたりすることができる

しかし関数だけをインポートする方法は、コードを見たときにどのファイルから来た関数か、インポート箇所を見るまでわからないため非推奨である

lesson.py

# from を使ってモジュール名だけで呼び出す場合
from lesson_package import utils

r = utils.say_twice('hello')
print(r)  # hello!hello!

lesson.py

# from を使って関数名だけで呼び出す場合(非推奨)
from lesson_package.utils import say_twice

r = say_twice('hello')
print(r)  # hello!hello!

AS文

AS文 を使うことでインポートしたモジュールや関数に別名をつけて取り扱うことができる

しかし、こちらも場合によって可読性が落ちてしまうため、あまり推奨しない(現在は入力補間なども優秀なので略称をつけなくても手間ではない)

lesson.py

# as を使ってモジュール名に別名をつける
from lesson_package import utils as m

# as を使って関数名に別名をつける
from lesson_package.utils import say_twice as f


r = m.say_twice('Rename Module')
print(r)  # Rename Module!Rename Module!

r = f('Rename Function')
print(r)  # Rename Function!Rename Function!

絶対パスと相対パス

インポートする際の対象のパスは .. を使うことで一個前の階層に戻ったり、相対パスで書くことも可能だが、追跡が困難になるため非推奨である


インポートエラー

インポート時にインポート先のパスにファイルが存在しなかったり、形式が誤っていたりするとインポートエラーが発生する

このエラーをハンドリングして制御する方法として、例外処理のところで学んだ try-except文 が使える

例えばバージョンによってファイルパスが変わる場合など、try-except文 によって制御できると便利なので覚えておくこと

lesson.py

# バージョンによってファイルパスが変わる場合など
try:
    from lesson_package import utils
except ImportError:
    from lesson_package.tools import utils

r = utils.say_twice('word')