importとfrom〜importについてもうすこし

モジュールのインポートについては以前学びましたがいまいち理解が追いついていなかったのでもっかいおさらい。


importで読み込んだものがなんなのか、typeで調べてみます。

helloworld関数を持つtest.pyを用意します。

# -- test.py --
def helloworld():
    print("Hello World!")
# -- main.py --
import test

print(type(test))
$ py main.py
<class 'module'>

moduleですね。

次にfooというディレクトリを置いてそれをimportしてみます。

import foo

print(type(foo))
$ py main.py
<class 'module'>

これもmoduleですね。importに指定できるのはファイルやディレクトリのみでそれらはmoduleとして扱われます。

importに指定できるのはこのmoduleのみです。それ以外は例外となります。

import test.helloworld
$ py main.py
Traceback (most recent call last):
  File "main.py", line 4, in <module>
    import test.helloworld
ModuleNotFoundError: No module named 'test.helloworld'; 'test' is not a package

helloworldは関数なので例外になる感じですね。


次はfrom〜importですが、コレも基本的にはimportと同じです。

違う点はfromに指定できるのがmoduleでimportには関数やmodule等何でも指定できるといったかんじですか。

from test import helloworld

helloworld()
$ py main.py
Hello World!


まとめとして

  • importの場合、moduleのみ指定できる
  • from〜importの場合、fromにはmoduleのみ指定、importには関数やmodule等何でも指定できる


ってかんじですかね。これだけ覚えておけば今後迷うことはないかなと。