用語比較
importとfrom〜importの違い|名前空間に入る名前・as・*をPython3エンジニア認定基礎試験で判断する
import fiboとfrom fibo import fibは、どちらもモジュールの機能を使えるようにする書き方です。公式チュートリアルは、import fiboはfiboで定義された関数の名前を現在の名前空間に直接追加せず、「単にモジュール名 fibo だけを名前空間に追加します」と説明しています。関数は fibo.fib(1000) のようにモジュール名を付けて呼び出します。
一方、from fibo import fib, fib2はモジュール内の名前を現在の名前空間に直接取り込みます。このとき取り込まれるのは指定した名前だけで、モジュール名fiboは定義されません。fib(500) とそのまま呼べますが、fibo.fib のようには書けません。
このページは、Python 3 エンジニア認定基礎試験の主教材である公式チュートリアル第6章「モジュール」の記述だけを使い、名前空間にどの名前が追加されるかで2つの書き方を見分けられるように整理しています。asによる別名、from 〜 import *、パッケージの__all__と相対importも同じ軸で扱います。
この記事の目次
この記事の根拠と出典
本文の主要なセクションでは、公式一次資料と照合した内容と編集部の整理を、見出しの下のラベルで区別しています。 試験日、料金、申込条件、試験方式など変動する情報は、公式情報を最終確認してください。 当サイトの一次情報確認日: 2026-09-18。
結論
import モジュール名
モジュール名だけを現在の名前空間に追加する。中の関数や変数は「モジュール名.名前」で参照する。
from モジュール名 import 名前
モジュール内の指定した名前を現在の名前空間に直接取り込む。モジュール名そのものは定義されない。
違いを表で確認
| 比較軸 | import モジュール名 | from モジュール名 import 名前 |
|---|---|---|
| 現在の名前空間に追加される名前 | モジュール名(fibo) | 指定した名前(fib, fib2) |
| 関数の呼び出し方 | fibo.fib(1000) | fib(500) |
| モジュール名fiboの扱い | 定義される | 定義されない |
| asによる別名 | import fibo as fib でモジュールをfibという名前で扱える | from fibo import fib as fibonacci でも同じ効果が得られる |
| すべての名前を取り込む書き方 | 該当なし | from fibo import * はアンダースコア(_)で始まるもの以外のすべての名前を取り込む |
どこで迷っているかを切り分ける
importの後にモジュール内の関数名をそのまま呼べると思っている初学者
import fibo が名前空間に追加するのはモジュール名fiboだけです。fib(1000) ではなく fibo.fib(1000) と書きます。
from fibo import fib の後で fibo.fib と書いてしまう人
from 〜 import はモジュール名をローカルな名前空間に取り入れないため、この書き方ではfiboは定義されません。取り込んだ名前fibをそのまま使います。
from 〜 import * を便利な書き方として覚えている再受験者
公式チュートリアルは、* による import は未知の名前が読み込まれ定義済みの名前を上書きする可能性があるため、殆どの場面で使われないと説明しています。対話セッションでキータイプの量を減らすために使うのは構わないともしています。
問題文から答えを選ぶ手順
- 1
import文の形を確認する
import モジュール名 の形ならモジュール名だけが追加されます。from モジュール名 import 名前 の形なら、指定した名前が直接追加されます。
- 2
呼び出し側の書き方と照らし合わせる
fibo.fib(1000) と書けるのはモジュール名fiboが定義されている場合、fib(500) と書けるのは名前fibが取り込まれている場合です。
- 3
asがあれば別名に読み替える
import fibo as fib ならモジュールがfibという名前で、from fibo import fib as fibonacci なら関数がfibonacciという名前で使えます。
- 4
* の場合は取り込まれる名前を確認する
モジュールに対する from fibo import * は、アンダースコアで始まる名前を除いて取り込みます。パッケージに対する from package import * は、__init__.pyに定義された__all__のリストが使われます。
試験での見分け方
- 1import fibo は、モジュール名fiboだけを現在の名前空間に追加する。
- 2from fibo import fib は、名前fibを直接取り込み、fiboは定義しない。
- 3asを付けると、as の後ろの名前でモジュールや関数を扱える。from付きでも同じ効果になる。
- 4from fibo import * は、アンダースコアで始まるもの以外のすべての名前を取り込む。
- 5パッケージの__init__.pyに__all__があれば、from package import * はそのリストのモジュール名を取り込む。
誤答しやすい選択肢
import fibo の後で fib(1000) と呼び出す
修正: import fibo で追加されるのはモジュール名だけです。fibo.fib(1000) のようにモジュール名を付けて呼び出します。
from fibo import fib の後で fibo.fib と書く
修正: from 〜 import ではモジュール名fiboは定義されません。取り込んだ fib をそのまま使います。
from 〜 import * がアンダースコアで始まる名前まで取り込むと考える
修正: from fibo import * はアンダースコア(_)で始まるものを除いてすべての名前をインポートします。
__all__が無くても from package import * でサブモジュールがすべて取り込まれると考える
修正: 公式チュートリアルは、__all__が定義されていなければ、from package import * はサブモジュールを現在の名前空間へimportせず、パッケージで定義されている名前をimportするだけだと説明しています。
確認問題
Q1import fibo を実行した後、fiboのfib関数を呼び出す正しい書き方はどれ?
答え: fibo.fib(1000)
import fibo はモジュール名fiboだけを名前空間に追加するため、関数にはモジュール名を使ってアクセスします。
Q2from fibo import fib, fib2 を実行した後、名前fiboは定義されている?
答え: 定義されていない
from 〜 import はimportの対象となるモジュール名をローカルな名前空間に取り入れません。定義されるのはfibとfib2です。
Q3from fibo import fib as fibonacci を実行した後、fibの関数を呼び出す名前はどれ?
答え: fibonacci
as の後ろの名前で扱えるようになります。公式チュートリアルは、import fibo as fib と同じくfrom付きでも同じ効果が得られると説明しています。
到達チェック
- import fibo で名前空間に追加される名前を説明できる
- from fibo import fib の後でfiboが定義されない理由を説明できる
- asによる別名をimportとfrom〜importの両方で書ける
- from fibo import * で取り込まれない名前を挙げられる
- パッケージの__all__とfrom package import *の関係を説明できる
関連ページで確認する
よくある質問
Qimportとfrom〜importはどちらを使えばいい?
モジュール名を付けて呼び出す書き方にしたいならimport、指定した名前だけをそのまま使いたいならfrom〜importを使います。どちらで書いたかによって、呼び出し側で使える名前が変わります。
Qfrom fibo import fib の後で fibo.fib() と書ける?
書けません。from 〜 import はモジュール名をローカルな名前空間に取り入れないため、fiboは定義されません。
Qfrom 〜 import * は使ってよい?
公式チュートリアルは、定義済みの名前を上書きする可能性があるため殆どの場面で使われないとしています。対話セッションでキータイプの量を減らすために使うのは構わないとしています。
Qfrom . import echo のような書き方は何?
明示的な相対importです。公式チュートリアルは、先頭のドットで現在のパッケージや親パッケージを指定すると説明し、メインモジュールとして使うモジュールでは絶対importを使うべきだとしています。
執筆: ミナト編集部(運営者情報を見る)