Python入門
第19回.import文(パッケージ・モジュールのインポート)

Pythonの初心者向け入門解説、人気のプログラミング言語Python
最終更新日:2020-10-10

第19回.import文(パッケージ・モジュールのインポート)


Python import モジュール パッケージ インポート

Pythonで使う関数には、
・組み込み関数
・標準ライブラリ
・外部ライブラリ
・自作モジュール
等々、いろいろな形態があります。
これらのうち、組み込み関数以外はimport(インポート)して使う必要があります。


ここで使っている用語が分かりづらいので、まずは簡単に用語説明した後に、
import文の文法と使い方についてみていきます。


目次

Pythonの用語

importの説明に先立って、使われる用語について簡単に記載します。
厳密な定義できなく、あくまで理解する上での簡易的な説明です。

組み込み関数

Python言語に最初から組み込まれていて、いつでも利用できる関数

標準ライブラリ

Pythonとともに配付されているライブラリ。
importが必要

外部ライブラリ

別途インストールが必要な拡張ライブラリ
pipでインストールします。


モジュール

Pythonのプログラムは複数のファイルに分けることができます。
ファイルの拡張子は「.py」です。
このファイルをモジュールと呼びます。
ファイル名がモジュール名、つまり名前空間になります。
公式ドキュメント - 6. モジュール

パッケージ

複数のモジュールをディレクトリ(フォルダ)に入れて整理し、ひとまとまりにしたものがパッケージです。
ディレクトリ名がパッケージ名、つまり名前空間になります。
公式ドキュメント - 6.4. パッケージ

ライブラリ

関数・モジュール・パッケージの総称、または、パッケージを複数集めたもの。
厳密な定義ははっきりしないようです。

名前空間(namespace)

変数や関数の参照において名前の衝突がおきないようにする概念です。
名前の集合が区切られた空間に入ります。
そして名前空間は、ディレクトリのような階層になっています。
同一の名前でも、名前空間が違えば全く別のものになります。
Pythonでは、モジュール名やパッケージ名が名前空間になります。

ライブラリ名/パッケージ名.モジュール名.関数()

import文の構文

Pythonでは、組み込み関数以外はモジュールの読み込みが必要になります。
モジュールの読み込みに使うのがimport文です。
公式ドキュメント - 7.11. import 文

import文の構文

実行メインのモジュールと同一ディレクトリのモジュール
import モジュール
モジュール.関数()
import モジュール as 別名
別名.関数()
from モジュール import 関数
関数()
from モジュール import 関数 as 別名
別名()
from モジュール import *
関数()
実行メインのモジュールの下層ディレクトリのモジュール
import パッケージ.モジュール
パッケージ.モジュール.関数()
import パッケージ.モジュール as 別名
別名.関数()
from パッケージ.モジュール import 関数
関数()
from パッケージ.モジュール import 関数 as 別名
別名()
from パッケージ.モジュール import *
関数()
複数のモジュールをimportする場合は、,カンマ区切りで列挙出来ます。
import モジュール1, モジュール2

別名を指定した場合は、名前空間には必ず別名を指定する必要があります。

実行メインのモジュールより上の階層のディレクトリはimport出来ません。

Pythonのimportはかなり複雑ですが、基本的な使い方の範囲内であれば難しいものではなく、
名前空間の指定に注意すれば問題ないと思います。

import * について
import * はモジュールに対してのみ指定できます。
* を使った場合は、モジュール内の全てがローカルの名前空間に直接バインドされます。
名前の競合が起きやすく名前空間の仕組みが有効に使えなくなってしまうと思います。
ただし、そもそも私の環境(Visual StudioとIDLE)ではエラーとなって実行できませんでした。

「unexpected EOF while parsing」

Visual Studioでの警告表示

自作モジュールのimport文に警告が付きます。

Python import モジュール パッケージ インポート

最初に記述した直後は警告が表示されていても、大抵はVisual Studioを再起動すると消えるようです。
ただし、上記のような日本語名の場合はそれでも消えませんでした。
ですが、実行すれば問題なく実行できます。
これはIDEの問題でありPythonの問題ではありません。
作業ディレクトリの設定等、何らかの対処で回避できるはずですが、ここは追及せずに進みます。


標準ライブラリのインポート

Pythonとともに配付されているライブラリです。
公式ドキュメント - Python 標準ライブラリ

上のリンク先を見ていただければ分かりますが、Pythonには豊富なライブラリが用意されています。
いきなりこれらを覚えようとしてもさすがに無理だと思います。
必要になった時に調べながら使っていけばよいと思います。
以下に目についたものをいくつかピックアップしました。

※リンクは公式ドキュメントにリンクしています。
ライブラリ 説明
string 一般的な文字列操作
json JSON エンコーダおよびデコーダ
pprint データ出力の整然化
re 正規表現操作
copy 浅いコピーおよび深いコピー操作
datetime 基本的な日付型および時間型
time 時刻に関するさまざまな関数
calendar 一般的なカレンダーに関する関数群
enum 列挙型のサポート
math 数学関数
random 擬似乱数を生成する
glob Unix 形式のパス名のパターン展開
pathlib オブジェクト指向のファイルシステム
csv CSV ファイルの読み書き
os 雑多なオペレーティングシステムインタフェース
io ストリームを扱うコアツール
sys システムパラメータと関数

標準ライブラリをインポート

import math, datetime
print(math.fabs(-5)) #絶対値
print(datetime.date(2020, 9, 24)) #日付の作成
Python import モジュール パッケージ インポート

呼び出す時の名前空間に注意してください。
ライブラリ名.関数()

標準ライブラリに別名を指定してインポート

import math as m
import datetime as d
print(m.fabs(-5)) #絶対値
print(d.date(2020, 9, 24)) #日付の作成
呼び出す時の名前空間には別名を使う必要があります。

標準ライブラリの特定の関数だけをインポート

from math import fabs as f #別名指定
from datetime import date
print(f(-5)) #絶対値
print(date(2020, 9, 24)) #日付の作成
関数名または別名がローカルの名前空間にバインドされます。
したがって、関数名または別名だけで呼び出すことができます。

自作モジュールのインポート

例として以下の構成のモジュールをインポートしています。
メインとなるモジュール
┗ import_mod.py
  ┗ fnc1 ・・・ 関数
  ┗ fnc2 ・・・ 関数
┗ \import_dir ・・・ ディレクトリ
  ┗ import_dir_mod.py
    ┗ fnc1 ・・・ 関数
    ┗ fnc2 ・・・ 関数

どちらのモジュールにも以下の関数を入れた場合のimportのコードになります。
import inspect
def fnc1(s="fnc1"):
    print(f"{__name__}:{s}")
def fnc2(s="fnc2"):
    print(f"{__name__}:{s}")
if __name__ == "__main__":
    fnc1()
    fnc2()
このモジュールがメインで実行されたとき以外はprint()が実行されないようにしています。
__name__には、
メインで実行した場合は、"__main__"が入り、
他から呼ばれたときは、モジュール名が入ります。

パッケージを自作する場合
パッケージを初期化するモジュールとして、
__init__.py
このモジュールを入れたりしますが、今回のサンプルではその必要性もなく、
あくまで、直下のディレクトリにモジュールを入れた場合という事で理解しておいてください。

自作モジュールをインポート

import import_mod
import_mod.fnc1()
import_mod.fnc2("fnc2")
Python import モジュール パッケージ インポート

呼び出す時の名前空間に注意してください。
モジュール名.関数()

自作モジュールに別名を指定してインポート

import import_mod as mod
mod.fnc1()
mod.fnc2("fnc2")
呼び出す時の名前空間には別名を使う必要があります。

自作モジュールの特定の関数だけをインポート

from import_mod import fnc1
from import_mod import fnc2 as f2
fnc1()
f2("fnc2")
関数名または別名がローカルの名前空間にバインドされます。
したがって、関数名または別名だけで呼び出すことができます。

直下のディレクトリのモジュールをインポート

import import_dir.import_dir_mod
import_dir.import_dir_mod.fnc1()
import_dir.import_dir_mod.fnc2("fnc2")
from import_dir import import_dir_mod
import_dir_mod.fnc1()
import_dir_mod.fnc2("fnc2")
Python import モジュール パッケージ インポート

上記2つの違いに注意して下ください。
呼び出す時の名前空間が違ってきます。
importは、
ディレクトリ名.モジュール名.関数()
from...importは、
モジュール名.関数()

直下のディレクトリのモジュールに別名を指定してインポート

import import_dir.import_dir_mod as mod
mod.fnc1()
mod.fnc2("fnc2")
from import_dir import import_dir_mod as mod
mod.fnc1()
mod.fnc2("fnc2")
どちらも別名を指定しているので別名で呼び出します。

直下のディレクトリのモジュールの特定の関数だけをインポート

from import_dir.import_dir_mod import fnc1
from import_dir.import_dir_mod import fnc2 as f2
fnc1()
f2("fnc2")
関数名または別名がローカルの名前空間にバインドされます。
したがって、関数名または別名だけで呼び出すことができます。




同じテーマ「Python入門」の記事

第16回.Pythonの引数は参照渡しだが・・・
第17回.リスト内包表記
第18回.例外処理(try文)とexception一覧
第19回.import文(パッケージ・モジュールのインポート)
第20回.フォルダとファイルの一覧を取得(os,glob,pathlib)
第21回.CSV読み込みとopen()関数とwith文
第22回.CSV読み書き(csvモジュール)
第23回.pipコマンド(外部ライブラリのインストール)
第24回.エクセルを操作する(openpyxl)
第25回.エクセルを操作する(pywin32:win32com)
第26回.WEBスクレイピング(selenium)


新着記事NEW ・・・新着記事一覧を見る

WEBスクレイピング(selenium)|Python入門(10月11日)
エクセルを操作する(pywin32:win32com)|Python入門(10月5日)
エクセルを操作する(openpyxl)|Python入門(10月3日)
pipコマンド(外部ライブラリのインストール)|Python入門(10月1日)
CSV読み書き(csvモジュール)|Python入門(9月29日)
「Excel 4.0 マクロ」の使い方|VBA技術解説(9月28日)
CSV読み込みとopen()関数とwith文|Python入門(9月28日)
フォルダとファイルの一覧を取得(os,glob,pathlib)|Python入門(9月26日)
import文(パッケージ・モジュールのインポート)|Python入門(9月24日)
例外処理(try文)とexception一覧|Python入門(9月23日)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.マクロって何?VBAって何?|VBA入門
6.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
7.繰り返し処理(For Next)|VBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.とにかく書いてみよう(Sub,End Sub)|VBA入門
10.マクロはどこに書くの(VBEの起動)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ