Pythonでパッケージやモジュールをimportする際には色々な表記があるので分かりにくい場合があります。
例えば、よく見かけるものでも以下のように種類があります。
import モジュール名 from パッケージ名 import モジュール名 import パッケージ名.モジュール名 from モジュール名 imoport 関数名 import モジュール名 as 〇〇
今回はそれぞれのimportのやり方について詳しくまとめてみました。
importできるものはパッケージ、モジュール、関数、変数、クラス
まず第一に覚えておきたいことですが、Pythonでimportできるものは
パッケージ、モジュール、そして、モジュールの中の関数、変数、クラスになります。
パッケージは__init__.pyのファイルが置いてあるディレクトリ
モジュールは.pyのファイル、そして関数、変数、クラスはモジュールの中に書かれています。
例えば、よく使うpandasですが、こちらはパッケージ。つまりディレクトリです。
また、osモジュールですがこちらは.pyファイルになっており、モジュールです。
まずモジュールかパッケージか確認する
いつも何気なく使っているimportですが、importしようとしているものがパッケージか、モジュールか関数やメソッドかによってimportの仕方が異なってくる場合があるので、把握しておくことが大事です。
扱っているものがモジュールかパッケージか確認するにはprintが使えます。
下記を見ると__init__.pyがあるのでpandasはパッケージと分かります。
(通常だとimport pandas as pd と書くのが普通なのですが、説明のため省略します。)
また、osをprintで見てみると、__init__.pyがなく、.pyファイルであることが確認できるので、モジュールになります。
このように、__init__.pyがあればパッケージ、.pyとなっていればモジュールと判断します。
ちなみにpandas.read_csvをprintで見てみると、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()と書くだけで使えるようになります。
ちなみに、他のメソッド(下では、read_csv() )はエラーが出て使えません。
ここでエラーが出るのは、importしたのはpandasではなく、pandasの中のisnullというメソッドだけを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しています。
こうするとコードの中でpandasと書く変わりにpdと書けばいいので表記が楽になります。
from モジュール(またはパッケージ) import * は非推奨
たまに見かけるのですが、
from モジュール(またはパッケージ) import *
と書くこともできます。
ワイルドカードimportと言います。
こう書くとモジュールの中にある全ての関数がimportできるのですが、非推奨なので使わないようにしましょう。
補足. パッケージやモジュールの中身を確認する
パッケージの中身の確認はdirを使えば分かります。
例えばpandasでやってみると、上記でパッケージの中にたくさんのメソッドや変数、パッケージが入っているのを一覧で確認することができます。
print
やdir
を使えば、パッケージやモジュールの中がより把握しやすくなり便利です。
モジュールやパッケージ、メソッドの基本的なimportの解説はここまでになります。
コメント