Pythonのパッケージやモジュールのimportをしっかり理解する

パッケージやモジュールをimportする方法を詳しく解説 Python

Pythonでパッケージやモジュールをimportする際には色々な表記があるので分かりにくい場合があります。

例えば、よく見かけるものでも以下のように種類があります。

 
import モジュール名

from パッケージ名 import モジュール名

import パッケージ名.モジュール名

from モジュール名 imoport 関数名

import モジュール名 as 〇〇
 

今回はそれぞれのimportのやり方について詳しくまとめてみました。

importできるものはパッケージ、モジュール、関数、変数、クラス

まず第一に覚えておきたいことですが、Pythonでimportできるものは

パッケージモジュール、そして、モジュールの中の関数、変数、クラスになります。

 

パッケージは__init__.pyのファイルが置いてあるディレクトリ

 

モジュールは.pyのファイル、そして関数、変数、クラスはモジュールの中に書かれています。

 

モジュール、パッケージ

例えば、よく使うpandasですが、こちらはパッケージ。つまりディレクトリです。

pandasはパッケージ

また、osモジュールですがこちらは.pyファイルになっており、モジュールです。

osファイルはモジュール

まずモジュールかパッケージか確認する

いつも何気なく使っているimportですが、importしようとしているものがパッケージか、モジュールか関数やメソッドかによってimportの仕方が異なってくる場合があるので、把握しておくことが大事です。

扱っているものがモジュールかパッケージか確認するにはprintが使えます。

下記を見ると__init__.pyがあるのでpandasはパッケージと分かります。

(通常だとimport pandas as pd と書くのが普通なのですが、説明のため省略します。)

pandasはパッケージ

また、osをprintで見てみると、__init__.pyがなく、.pyファイルであることが確認できるので、モジュールになります。

osはモジュール

このように、__init__.pyがあればパッケージ、.pyとなっていればモジュールと判断します。

 

ちなみにpandas.read_csvをprintで見てみると、function(関数またはメソッド)となっています。

functionなので関数

つまり、pandas.read_csvは関数またはメソッドということです。

モジュールやパッケージのimport

一番シンプルな形のモジュールやパッケージのimportの書き方は

import モジュール名

や、

import パッケージ名

となります。

例えば、pandasのread_csv()関数を使う場合、pandasはパッケージなので、

import pandas

pandas.read_csv(data.csv)

と書けます。

同様に、mathモジュールのcos()関数を使いたい場合

import math

math.cos(100)

と書くことができます。

いきなり関数はimportできない

じゃあmathモジュールのcos()関数をimportしたい時に

import cos

とすることはOKなのか?というとこれはNGです。

エラーになります。

なぜなら、別の名前のモジュールの中にcos()関数が入っている場合もあるからです。

関数として見分けがつかないからですね。

このように、いきなり関数をimportすることはできないと覚えておいて下さい。

importする対象を指定する書き方

次にimportする対象を指定する書き方です。

メリットはコードの中での表記が楽になることです。

ただし、importできる対象が狭くなります。

from math import cos

上記でmathモジュールの中のcos関数のみをimportするという意味です。

こうすると下記のように表記が楽になります。

from math import cos

cos(100)

上記ではcos(100)とだけ書いてありますよね。math.cos()と書く必要がなくなるんです。

 

pandasでも見ていきましょう。

isnull()メソッドを指定してimportします。

isnullメソッド

上記のようにisnull()と書くだけで使えるようになります。

 

ちなみに、他のメソッド(下では、read_csv() )はエラーが出て使えません。

他のメソッドはエラーとなる

ここでエラーが出るのは、importしたのはpandasではなく、pandasの中のisnullというメソッドだけをimportしたからです。

 

こちらも同じ理由でエラーとなります。

importエラー

 

つまり、importする対象を指定してimportすることのデメリットは他のメソッドが全く使えないということです。

図で書くとこうなります。

指定してimportするデメリット

pandasのように使いたいメソッドが多い場合は基本的には import pandas でいいでしょう。

パッケージの中のモジュールをimportする場合

パッケージの中のモジュール(またはパッケージ)をimportするには、

from パッケージ import モジュール

もしくは、

import パッケージ.モジュール

と書きます。

2つ目の書き方の「.」はディレクトリーの階層を表す記号です。

例えば、下記はhttpというパッケージからclientというモジュールをimportしています。

import http.client

conect = http.client.HttpConnection(...)

importする対象を指定する書き方とは違ってコードの中で表記の省略はできません。

モジュールの中の関数をimportする場合、書き方は1種類

モジュールの中の関数やメソッドをimportする場合は

from モジュール import 関数(またはメソッド)

1種類となります。

import モジュール.関数

と書くとエラーになるので注意しましょう。

その理由は、「.」がディレクトリーの階層を表す記号だからです。

モジュールと関数の関係は、モジュールのコードの中に関数が書かれているだけで、ディレクトリのような階層構造がないためにエラーとなります。

例えば、下記のようにするとModuleNotFoundErrorとなります。

モジュール.関数はエラーになる

名前を〇〇としてimportする

次はpandasなどで頻繁に使う、名前を〇〇としてimportする方法です。

import モジュール(またはパッケージ) as 〇〇

上記で〇〇という名前でモジュールをimportするという意味になります。

 

下記はpandasをpdという名前でimportしています。

import as

こうするとコードの中でpandasと書く変わりにpdと書けばいいので表記が楽になります。

from モジュール(またはパッケージ) import * は非推奨

たまに見かけるのですが、

from モジュール(またはパッケージ) import *

と書くこともできます。

ワイルドカードimportと言います。

こう書くとモジュールの中にある全ての関数がimportできるのですが、非推奨なので使わないようにしましょう。

補足. パッケージやモジュールの中身を確認する

パッケージの中身の確認はdirを使えば分かります。

dirを使ってパッケージの中身を見る

例えばpandasでやってみると、上記でパッケージの中にたくさんのメソッドや変数、パッケージが入っているのを一覧で確認することができます。

printdir

を使えば、パッケージやモジュールの中がより把握しやすくなり便利です。

 

モジュールやパッケージ、メソッドの基本的なimportの解説はここまでになります。

コメント

タイトルとURLをコピーしました