Python

最終更新日: 2023.02.16 (公開: 2023.02.16)

Pythonのimportはモジュールに必須!使い方や相対importを解説

Pythonのimportはモジュールに必須!使い方や相対importを解説

Pythonの「import」は、さまざまな機能を搭載したモジュールやパッケージを利用し、より便利なプログラミングを行うための構文です。

一見するとごく単純な機能のように思えますが、実は奥が深いものです。さらには使い方に注意が必要な機能もあります。とくに、自身でモジュールやパッケージを作成する場合は、importの使い方をより深く理解しておくことが重要です。

そこで本記事では、Pythonのimportの基本的な使い方に加えて、実践的なテクニックについても解説します。importについてわからないことがある人は、ぜひ参考にしてみてください。

なお、本記事のソースコードの実行時に「SyntaxError」というエラーが出るときは、「# coding: UTF-8」の部分を「# coding: Shift_JIS」に書き換えてください。

Pythonの「import」とは?モジュールを使用するための構文

Pythonの正規表現とは

Pythonの「import」とは、モジュールやパッケージに搭載されている機能を利用するための構文です。

Pythonでは、「print()」や「open()」など、基本的な関数(メソッド)はそのまま使えます。しかし、「sin()」や「cos()」のような数学関連の関数などは、単に呼び出すだけでは使えません。これらのメソッドは、外部のモジュールやパッケージで中身が定義されているからです。

このような、外部ファイルにある機能を利用するために必要なのがimport構文です。import構文を使用することで、モジュールやライブラリを取り込み、プログラム中で利用できるようになります。いわば「Pythonの機能を拡張するための機能」だと考えると、わかりやすくなるでしょう。

「モジュール」「パッケージ」「ライブラリ」の違いとは

importで重要なのが、「モジュール」「パッケージ」「ライブラリ」の違いです。

「モジュール」は、ソースコードを記述する「pyファイル」のことで、クラスや関数のまとまりのようなものです。そのモジュールを複数まとめたフォルダを「パッケージ」と呼びます。Pythonでは、「ライブラリ」という用語の厳密な定義はありませんが、基本的にライブラリはパッケージのことを指すことが多いです。

たとえば、科学技術計算や機械学習などで活用される「numpy」は、パッケージ形式で配布されています。こうした形式の違いで、インポートの方法が異なる部分もあるので注意が必要です。

Pythonのパッケージをimportする方法

Pythonのパッケージをimportする方法

Pythonのパッケージをimportすることで、パッケージに搭載されている機能が使えるようになります。しかし、importの方法には以下の4種類があり、それぞれ構文や効果が異なるので注意が必要です。

  • 単独のモジュールをimportする
  • 複数のモジュールのimportする
  • 特定のオブジェクトをimportする
  • 新しい名前をつけてimportする

単独のモジュールをimportする

Pythonでモジュールをimportするときは、以下の構文のように「import」のあとに、ファイルの拡張子を除いたモジュール名を指定します。

import sys

「sys」は、Pythonのシステム関連の処理をまとめたモジュールです。実際に、sysモジュールをインポートして、Pythonのバージョン情報を表示してみましょう。

 

//サンプルプログラム
# coding: UTF-8

# 「sysモジュール」をインポートする
import sys

# Pythonのバージョン情報を表示する
print(sys.version)

 

//実行結果

Python-import

なお、インポートしたオブジェクトを使用するときは、クラスやメソッド名の前に「モジュール名.」を追加する必要があります。モジュール名を指定しなければ、エラーが出るので注意が必要です。

複数のモジュールのimportする

複数のモジュールを同時にimportしたい場合は、以下のように「,」で区切って並べることで、ソースコードを簡潔に記載できます。

import モジュール1, モジュール2, モジュール3

この機能を利用して、「sys」に加えて「randomモジュール」もimportしてみましょう。randomは、さまざまな種類の乱数を発生させるためのモジュールです。

 

//サンプルプログラム
# coding: UTF-8

# 「sysモジュール」と「randomモジュール」をインポートする
import sys, random

# Pythonのバージョン情報を表示する
print(sys.version)

# ランダムな整数値を0~255の範囲で表示する
print(random.randint(0, 256))

 

//実行結果

Python-import

ただし、このように「,」で区切って並べる書き方は、可読性の低下やミスの原因になるため推奨されていません。そのため、基本的には以下のように、1つずつimportするほうが無難です。

# 「sysモジュール」をインポートする
import sys
# 「randomモジュール」をインポートする
import random

特定のオブジェクトやメソッドをimportする

モジュール全体ではなく、特定のオブジェクトやメソッドだけをimportすることもできます。その場合は、以下の構文で記載しましょう。

from モジュール名 import オブジェクト名

このように記載すると、指定したオブジェクトだけimportできるので、容量節約や実行速度につながるケースがあります。また、通常のインポート時は「モジュール名.オブジェクト名」で呼び出す必要がありますが、fromを使用した場合はオブジェクト名のみで大丈夫です。むしろ、モジュール名を記載するとエラーになるので注意しなければいけません。詳細は以下のサンプルコードのとおりです。

//サンプルプログラム
# coding: UTF-8

# mathモジュールの「e」をインポートする
from math import e

# 自然対数値を表示する
print(e)

# mathモジュールのその他のメソッドやオブジェクトは使えない
print(math.sin(1))

 

//実行結果

Python-import

このように、「from math import e」の場合は単に「e」と記載するだけで、mathモジュールにある自然対数値が使えます。ただし、その他の部分はインポートされていないので、「math.sin()メソッド」などは使えません。

新しい名前をつけてimportする

モジュールをimportするときは、以下のように「as」を使うと、別名を付けたうえでオブジェクトにアクセスできます。

import モジュール名 as 別名
from モジュール名 import オブジェクト名 as 別名

通常の「import」と「from」を使う場合のどちらも、上記の「as」構文が使えます。詳細は以下のサンプルコードのとおりです。

 

//サンプルプログラム
# coding: UTF-8

# mathモジュールを「m」という別名でインポートする
import math as m

# 「math.sqrt(2)」を「m.sqrt(2)」と記載できる
print(m.sqrt(2))

# mathを「m」という名称でインポートしているため、「math.sqrt(2)」と記載するとエラーになる
print(math.sqrt(2))

 

//実行結果

Python-import

上記の例では、mathモジュールを「m」という別名でインポートしています。元の名前の「math」を使うと、エラーが出るので注意が必要です。

numpyなどのパッケージを使用するとき、asがよく使われることがあります。ただし、モジュールやオブジェクトの別名が、変数名などと衝突するとエラーが出ます。そのため、よほど名前が長いものをインポートするとき以外は、asを使う必要性は低いでしょう。

パッケージ(ライブラリ)の作成とインポートの方法

パッケージ(ライブラリ)の作成とインポートの方法

パッケージの作成とインポート方法について、以下の4つのポイントに分けて解説します。

  • パッケージ(ライブラリ)の作り方
  • 「__init__.py」の役割|モジュールの構成を示す
  • パッケージ名を省略できるようにしたい場合
  • 深い階層にあるモジュールを含めるとき

パッケージ(ライブラリ)の作り方

Pythonのパッケージ(ライブラリ)は、自分で自由に作れます。まずはPythonのプロジェクトフォルダ、つまり実行するメインモジュールがある場所に、以下のように「Package」というフォルダを作りましょう。前述したように、パッケージは複数のモジュールをまとめたフォルダです。

Python-import

次に、テキストエディタ(メモ帳など)を開いて、「__init__.py」「ModuleA.py」「ModuleB.py」という3つのファイルを、「UTF-8エンコード」で作成・保存します。

Python-import

続いて、各ファイルの内容を以下のように編集しましょう。

//__init__.py
from Package import ModuleA
from Package import ModuleB

//ModuleA.py
# coding: UTF-8

def funcA():
print(“ModuleAのfuncA()です!”)

//ModuleB.py
# coding: UTF-8

def funcB():
print(“ModuleBのfuncB()です!”)

そのうえで、PythonのIDEを開いて以下のソースコードを実行すると、パッケージ内に存在する各モジュールのメソッドを呼び出せます。

 

//サンプルプログラム
# coding: UTF-8

# 「Package」パッケージをインポートする
import Package

# ModuleAのfuncA()を呼び出す
Package.ModuleA.funcA()

# ModuleBのfuncB()を呼び出す
Package.ModuleB.funcB()

 

//実行結果

Python-import

モジュールの場合と同じように、「import パッケージ名」と記載すると、パッケージをimportできます。パッケージ内のクラスやメソッドにアクセスしたい場合は、以下のような構文で記載する必要があります。

パッケージ名.モジュール名.クラスやメソッド名

ただし、このように使えるようにするためには、「__init__.py」というファイルを正確に記載する必要があります。

「__init__.py」の役割|モジュールの構成を示す

先ほどのサンプルコードは、「__init__.py」ファイルが無ければ機能しません。なぜなら、このファイルがモジュールの構成を示すからです。「__init__.py」ファイルがなくてもプログラムは動作しますが、その場合は以下のソースコードのように、1つずつモジュールをimportする必要があります。

 

//サンプルプログラム
# coding: UTF-8

# Packageの「ModuleAモジュール」をインポートする
from Package import ModuleA

# Packageの「ModuleBモジュール」をインポートする
from Package import ModuleB

# ModuleAのfuncA()を呼び出す
ModuleA.funcA()

# ModuleBのfuncB()を呼び出す
ModuleB.funcB()

 

//実行結果

Python-import

上記のプログラムのimport文は、先ほどの「__init__.py」ファイルの中身と同じです。これは、「Package」パッケージにある「ModuleA」と「ModuleB」をimportすることを指します。つまり、「__init__.py」ファイルでは、あらかじめ各モジュールのimport文を記載しておくということです。

パッケージ名を省略できるようにしたい場合

前述した方法では、各モジュールのメソッドを呼び出すときに、パッケージ名を指定しないといけません。パッケージ名を省略したい場合は、import文を以下のように変更しましょう。

from パッケージ名 import *

この構文を「ワイルドカードimport」と呼びます。ワイルドカードimportを活用すると、次のサンプルコードのように、モジュール名を直接指定できるようになるので便利です。ワイルドカードimportの使い方は以下のとおりです。ソースコード以外のファイルは、先ほどと同じ内容で実行してください。

 

//サンプルプログラム
# coding: UTF-8

# 「Package」パッケージをインポートする
from Package import *

# ModuleAのfuncA()を呼び出す
ModuleA.funcA()

# ModuleBのfuncB()を呼び出す
ModuleB.funcB()

 

//実行結果

Python-import

深い階層にあるモジュールを含めるとき

「__init__.py」ファイルより深い階層にあるモジュールをパッケージに含めるときは、以下のように「.」でフォルダ名を指定する必要があります。

from パッケージ名.フォルダ名 import モジュール名

深い階層のパッケージを利用する例を紹介します。まず、先ほど作成した「Packageフォルダ」に、「Moduleフォルダ」を追加しましょう。

Moduleフォルダ

そのうえで、Moduleフォルダ内部で「ModuleC.py」をUTF-8エンコードで作成します。「__init__.py」と「ModuleC.py」の2つのファイルを以下のように編集し、ソースコードを実行しましょう。

//__init__.py
from Package import ModuleA
from Package import ModuleB
from Package.Module import ModuleC

//ModuleC.py
# coding: UTF-8

def funcC():
  print("ModuleCのfuncC()です!")

//サンプルプログラム
# coding: UTF-8

# 「Package」パッケージをインポートする
from Package import *

# ModuleAのfuncA()を呼び出す
ModuleA.funcA()

# ModuleBのfuncB()を呼び出す
ModuleB.funcB()

# ModuleCのfuncC()を呼び出す
ModuleC.funcC()

 

//実行結果

Python-import

インポート時に発生するエラーは3種類

インポート時に発生するエラーは3種類

Pythonでモジュールやパッケージをimportするときは、以下の3種類のエラーが発生する可能性があります。各エラーの意味や対処法を確認しておきましょう。

  • ModuleNotFoundError|import時のスペルミスが原因
  • NameError|モジュール・パッケージ指定時のスペルミスが原因
  • AttributeError|メソッド・クラス呼び出しのスペルミスなどが原因

ModuleNotFoundError|import時のスペルミスが原因

「ModuleNotFoundError」は、パッケージやモジュールが見つからないことを意味するエラーです。存在しないものを指定した際はもちろん、スペルミスや大文字小文字の間違いでもエラーが出ます。詳細は以下のサンプルコードのとおりです。

 

//サンプルプログラム
# coding: UTF-8

# 「numpy」モジュールをインポートする
import numpi # スペルミスで「numpi」になっている!

 

//実行結果

Python-import

なお、パッケージやモジュールの名称は、大文字と小文字が区別されます。たとえば、「Package」を「package」のように書くと、エラーが出るので注意が必要です。

NameError|モジュール・パッケージ指定時のスペルミスが原因

モジュールやパッケージを正しくimportできても、肝心の呼び出し時にモジュールやパッケージの名称を間違えると「NameError」が出ます。前述したように、大文字と小文字は区別されるので注意が必要です。詳細を以下のサンプルコードで確認しましょう。

 

//サンプルプログラム
# coding: UTF-8

# 「random」モジュールをインポートする
import random

# random.random()を呼び出す
randum.random() # スペルミスで「randum」になっている!

 

//実行結果

Python-import

AttributeError|メソッド・クラス呼び出しのスペルミスなどが原因

モジュール名・パッケージ名にあるメソッドやクラスを呼び出すときに、スペルミスをすると「AttributeError」が出ます。詳細は以下のサンプルコードのとおりです。

 

//サンプルプログラム
# coding: UTF-8

# 「random」モジュールをインポートする
import random

# ランダムな浮動小数点値を表示する
print(random.randum()) # スペルミスで「randum」になっている!

 

//実行結果

Python-import

また、モジュールやパッケージの名称と、変数名が重複しているときもAttributeErrorになります。「as」で別名を付けているときは、AttributeErrorがとくに発生しやすいので注意が必要です。

同じパッケージ内のモジュールを「相対import」する方法

同じパッケージ内のモジュールを「相対import」する方法

Pythonの「相対import」とは、同じパッケージにあるモジュールをインポートすることを指します。「相対パスを使ったimport」という意味ではないので注意が必要です。一方で、これまで紹介したimportの方法は「絶対import」と呼びます。

相対importは、「モジュールから他モジュールをインポート」したいときに便利です。ここからは、同じパッケージ内のモジュールを「相対import」する方法について、以下の4つの

  • 同じ階層のモジュールを相対importする方法
  • 下位階層のモジュールを相対importする方法
  • 上位階層のモジュールを相対importする方法
  • パッケージ自体より上位階層のモジュールは相対importできない

同じ階層のモジュールを相対importする方法

まずは、メインモジュール(Pythonで実行するモジュール)と同じディレクトリに、「Package」という名前でパッケージ(フォルダ)を作成してください。そのうえで、「ModuleA.py」と「ModuleB.py」の2つのモジュールを追加しましょう。中身は以下のとおりです。

 

//ModuleA.py
# coding: UTF-8

# 同じディレクトリの「ModuleB」モジュールを相対importする
from . import ModuleB # 「from . import モジュール名」で相対import可能

def funcA():
  print("「ModuleA」の「funcA()」です!")

  # ModuleBモジュールのfuncB()を呼び出す
  ModuleB.funcB()

//ModuleB.py
# coding: UTF-8

def funcB():
  print("「ModuleB」の「funcB()」です!")

 

「ModuleA.py」の「from . import」という部分が、相対importの構文です。「.」をひとつ記載することで、「同階層のモジュール」を示します。この点を踏まえて、メインモジュールに以下のようなソースコードを記載して実行しましょう。

//サンプルプログラム
# coding: UTF-8

# 「Module.ModuleA」パッケージをインポートする
import Module.ModuleA

# Module.ModuleAのfuncA()を呼び出す
Module.ModuleA.funcA()

 

//実行結果

Python-import

このように、パッケージ内のモジュールから、同じパッケージに属する他モジュールをimportする構文が「相対import」です。

下位階層のモジュールを相対importする方法

同じ階層の場合は「.」のみでしたが、下層のフォルダにあるモジュールを相対impotする場合は、「.フォルダ名」と記載します。まずは、先ほど作った「Moduleフォルダ」内部に「Innerフォルダ」を作り、この中に「ModuleB.py」を移動させましょう。そのうえで、「ModuleA.py」を以下のように変更して、先ほどと同じメインモジュールを実行してください。

//ModuleA.py
# coding: UTF-8

# 下位ディレクトリの「ModuleB」モジュールを相対importする
from .Inner import ModuleB # 「from .フォルダ名 import モジュール名」で相対import可能

def funcA():
  print("「ModuleA」の「funcA()」です!")

  # ModuleBモジュールのfuncB()を呼び出す
  ModuleB.funcB()

 

//実行結果

Python-import

上位階層のモジュールを相対importする方法

上位階層にあるモジュールを相対importしたい場合は、「..」とドットを2つ並べましょう。サンプルコードを実行するために、まず「ModuleA.py」を「Innerフォルダ」に移動し、「ModuleB.py」は「Moduleフォルダ」に移してください。そのうえで、「ModuleA.py」を以下のように書き換えてから、サンプルコードを実行してみましょう。

//ModuleA.py
# coding: UTF-8

# 上位ディレクトリの「ModuleB」モジュールを相対importする
from .. import ModuleB # 「from .. import モジュール名」で相対import可能

def funcA():
  print("「ModuleA」の「funcA()」です!")

  # ModuleBモジュールのfuncB()を呼び出す
  ModuleB.funcB()

//サンプルプログラム
# coding: UTF-8

# 「Module.Inner.ModuleA」パッケージをインポートする
import Module.Inner.ModuleA

# Module.Inner.ModuleAのfuncA()を呼び出す
Module.Inner.ModuleA.funcA()

//実行結果

Python-import

深い階層にある「ModuleA」をimportするために、メインモジュールのimport文が「import Module.Inner.ModuleA」となっています。ModuleA.pyでは、上位階層のModuleB.pyをimportするために、「from .. import ModuleB」と記載していることがポイント。なお、「ModuleB.py」が上位階層のフォルダに入っている場合は、「ModuleA」のimport文を「from ..フォルダ名 import」とすればOKです。

パッケージ自体より上位階層のモジュールは相対importできない

パッケージ自体より上位階層にあるモジュールは、相対importができません。たとえば、「ModuleB.py」が「Moduleフォルダ」の上位、つまりメインモジュールと同じ階層にある場合は、「ModuleB.py」を相対importできません。実際に、以下のサンプルコードを試してみましょう。

//ModuleA.py
# coding: UTF-8

# 上位ディレクトリの「ModuleB」モジュールを相対importする
from .. import ModuleB # 「from .. import モジュール名」で相対import可能

def funcA():
  print("「ModuleA」の「funcA()」です!")

  # ModuleBモジュールのfuncB()を呼び出す
  ModuleB.funcB()

//サンプルプログラム
# coding: UTF-8

# 「Module.ModuleA」パッケージをインポートする
import Module.ModuleA

# Module.ModuleAのfuncA()を呼び出す
Module.ModuleA.funcA()

//実行結果

Python-import

このように、「ValueError: attempted relative import beyond top-level package」というエラーが出ます。「トップレベルのパッケージ以上の階層への相対importを試みた」という意味です。

つまり、パッケージの一部ではないメインモジュールでは、相対importは使えないということです。そのため、メインモジュールはパッケージ群よりも上位の階層に置くようにしましょう。

また、相対importは必ずパッケージ内部のモジュールに対して行わないといけません。そのため、メインモジュール内で相対importの構文を使うことはできません。相対importは、あくまでパッケージ限定の機能です。

Pythonの代表的なモジュール

Pythonの代表的なモジュール

Pythonの代表的なモジュールには、以下のようなものがあります。

モジュール名 分野 概要
re 文字列操作 正規表現操作
math 数学関連 数学関数
random 数学関連 擬似乱数の生成
copy データ 浅いコピーと深いコピーの操作
csv ファイル CSVファイルの読み書き
os OS ファイルやディレクトリなどの操作
os.path OS ファイルやディレクトリなどのパスの操作が可能。上記の「osモジュール」内部に存在する
tkinter GUI Tcl/Tk の Python インターフェイス
sys ランタイム システムパラメータと関数

これらのモジュールをソースコード内で利用するときは、前述したように「import モジュール名」の構文でインポートしましょう。

Pythonのimportを活用してモジュールを使いこなそう

Pythonのimportを活用してモジュールを使いこなそう

Pythonのimportは、モジュールやパッケージの機能を利用するときに必要です。import文は、インポートする対象や目的によって、構文が異なります。

自身でパッケージを作成する場合は、フォルダの階層構造・「__init__.py」ファイルの書き方・相対importの構文などに注意が必要です。今回紹介した知識・テクニックを参考にして、Pythonのimportを活用してみましょう。

アクセスランキング 人気のある記事をピックアップ!

    コードカキタイがオススメする記事!

    1. 子供におすすめのプログラミングスクール10選!学習メリットや教室選びのコツも紹介

      2024.01.26

      子供におすすめのプログラミングスクール10選!学習メリットや教室選びのコツも紹介

      #プログラミングスクール

    2. 【完全版】大学生におすすめのプログラミングスクール13選!選ぶコツも詳しく解説

      2022.01.06

      【完全版】大学生におすすめのプログラミングスクール13選!選ぶコツも詳しく解説

      #プログラミングスクール

    3. 【未経験でも転職可】30代におすすめプログラミングスクール8選!

      2024.01.26

      【未経験でも転職可】30代におすすめプログラミングスクール8選!

      #プログラミングスクール

    4. 初心者必見!独学のJava学習方法とおすすめ本、アプリを詳しく解説

      2024.01.26

      初心者必見!独学のJava学習方法とおすすめ本、アプリを詳しく解説

      #JAVA

    5. 忙しい社会人におすすめプログラミングスクール15選!失敗しない選び方も詳しく解説

      2024.01.26

      忙しい社会人におすすめプログラミングスクール15選!失敗しない選び方も詳しく解説

      #プログラミングスクール

    1. 【無料あり】大阪のおすすめプログラミングスクール14選!スクール選びのコツも紹介

      2022.01.06

      【無料あり】大阪のおすすめプログラミングスクール14選!スクール選びのコツも紹介

      #プログラミングスクール

    2. 【目的別】東京のおすすめプログラミングスクール20選!スクール選びのコツも徹底解説

      2024.01.26

      【目的別】東京のおすすめプログラミングスクール20選!スクール選びのコツも徹底解説

      #プログラミングスクール

    3. 【無料あり】福岡のおすすめプログラミングスクール13選!選び方も詳しく解説

      2024.01.26

      【無料あり】福岡のおすすめプログラミングスクール13選!選び方も詳しく解説

      #プログラミングスクール

    4. 【徹底比較】名古屋のおすすめプログラミングスクール13選!選び方も詳しく解説

      2024.01.26

      【徹底比較】名古屋のおすすめプログラミングスクール13選!選び方も詳しく解説

      #プログラミングスクール

    5. 【徹底比較】おすすめのプログラミングスクール18選!失敗しない選び方も徹底解説

      2024.01.26

      【徹底比較】おすすめのプログラミングスクール18選!失敗しない選び方も徹底解説

      #プログラミングスクール