Pythonのimportでfrom指定
Pythonのimportは、別のPythonコードファイル(モジュール)を取り込んだり、外部ライブラリを利用するときに使います。
「from」を使うと、モジュール名を省略して、その中のメソッドを使うことができます。
Pythonのimportでfromを使う
Pythonのimportのfrom指定は、モジュールの特定の関数やクラス、定数、変数をインポートする構文です。
from import指定を使用すると、モジュールのすべての機能をインポートするのではなく、必要な機能のみをインポートできるため、モジュールのコードが複雑な場合でも、意図しない動作を引き起こすリスクを軽減することができます。
以下はサンプルコードです。
# モジュールをインポートし、関数を指定 from math import pi # 関数を使用する print(pi)
このコードは、以下の出力を生成します。
3.141592653589793
Pythonのimportの基礎
Pythonのimportは、別のファイル(モジュール)に記述されたPythonコードを取り込む機能です。
importを使用すると、以下のようなことができます。
- 他のモジュールの関数やクラスを使用する
- 他のモジュールの定数や変数を使用する
- 他のモジュールのユーティリティ機能を利用する
サンプルコード
# モジュールをインポートする
import math
# モジュールの関数を使用する
print(math.pi)
# モジュールの定数を使用する
print(math.e)
# モジュールのユーティリティ機能を利用する
print(math.sqrt(2))
このコードは、以下の出力を生成します。
3.141592653589793
2.718281828459045
1.4142135623730951
注意点
importを使用する際には、以下の点に注意する必要があります。
- モジュールをインポートする際には、モジュール名を指定します。
- モジュールをインポートすると、そのモジュールの関数やクラス、定数、変数が使用できるようになります。
- モジュールをインポートすると、そのモジュールのコードが実行されます。
from import * は、モジュールのすべての関数やクラス、定数、変数をインポートする構文です。
from import * を使用すると、モジュールのすべての機能を簡単に利用することができますが、モジュールのコードが複雑な場合は、意図しない動作を引き起こす可能性があるため、注意が必要です。
モジュールのパス
Pythonでは、モジュールをインポートする際に、モジュールのパスを指定する必要があります。
モジュールのパスは、次のいずれかの方法で指定できます。
- モジュールを置いたディレクトリを、Pythonの実行環境のカレントディレクトリにする
- モジュールのパスを、import文で指定する
モジュールのエイリアス
モジュールをインポートする際に、モジュール名にエイリアスを指定することができます。
エイリアスを指定すると、モジュール名を短くしたり、重複を避けることができます。
# モジュールをエイリアスでインポートする
import math as m
# エイリアスを使用してモジュールの関数を使用する
print(m.pi)
このコードは、以下の出力を生成します。
3.141592653589793
pythonのfromの絶対パスと相対パス
Pythonのfrom import指定では、モジュールのパスを指定する際に、絶対パスと相対パスのどちらかを使用できます。
絶対パス
絶対パスは、ファイルシステムのルートディレクトリから始まるパスです。
例えば、以下のコードは、カレントディレクトリから1階層上のmy_moduleディレクトリにあるmy_module.pyモジュールをインポートします。
from /my_module import my_function
このコードは、以下の出力を生成します。
function_from_my_module
相対パス
相対パスは、カレントディレクトリから始まるパスです。
例えば、以下のコードは、カレントディレクトリにあるmy_module.pyモジュールをインポートします。
from . import my_function
このコードも、以下の出力を生成します。
function_from_my_module
絶対パスと相対パスの違い
絶対パスと相対パスの違いは、ファイルシステム上の位置をどのように指定するかです。
絶対パスは、ファイルシステムのルートディレクトリから始まるパスであるため、Pythonの実行環境のカレントディレクトリに関係なく、同じファイルをインポートすることができます。
一方、相対パスは、カレントディレクトリから始まるパスであるため、Pythonの実行環境のカレントディレクトリによって、インポートするファイルが異なります。
どちらを使用するか
絶対パスは、ファイルシステム上の位置を明確に指定したい場合に使用します。
一方、相対パスは、カレントディレクトリを変更しても、同じファイルをインポートしたい場合に使用します。
例えば、モジュールをパッケージとして管理する場合は、絶対パスを使用すると、パッケージの場所を変更しても、同じモジュールをインポートすることができます。
一方、モジュールをプロジェクト内の特定のディレクトリに配置する場合は、相対パスを使用すると、プロジェクトのディレクトリ構造を変更しても、同じモジュールをインポートすることができます。
pythonのfromのエラーの原因と対策
Pythonのfromのエラーには、以下のようなものがあります。
- モジュールが存在しない
from import指定で指定したモジュールが存在しない場合、このエラーが発生します。
例えば、以下のコードは、存在しないモジュールをインポートしようとしているため、このエラーが発生します。
from not_exist_module import my_function
ModuleNotFoundError: No module named 'not_exist_module'
この場合は単純にモジュールのインストールで解決するケースが多いです。
- モジュール内のオブジェクトが存在しない
from import指定で指定したモジュール内のオブジェクトが存在しない場合、このエラーが発生します。
例えば、以下のコードは、存在しない関数をインポートしようとしているため、このエラーが発生します。
from math import pi, e, not_exist_function
以下のエラーメッセージを生成します。
ImportError: cannot import name 'not_exist_function' from 'math'
- エイリアスが重複している
from import指定で指定したエイリアスが重複している場合、このエラーが発生します。
例えば、以下のコードは、同じエイリアスを2つのモジュールで使用しようとしているため、このエラーが発生します。
from math import pi as mypi from my_module import pi as mypy
このコードは、以下のエラーメッセージを生成します。
NameError: name 'mypi' is already defined
- モジュールが存在することを確認しましょう。
- モジュール内のオブジェクトが存在することを確認しましょう。
- エイリアスが重複しないようにしましょう。
また、Pythonの標準ライブラリには、モジュールをインポートする際にエラーが発生した場合に、そのエラーをキャッチして処理するための機能が用意されています。
例えば、以下のコードは、モジュールをインポートする際にエラーが発生した場合に、そのエラーメッセージを出力します。
try: from not_exist_module import my_function except ImportError as e: print(e)
このコードは、以下の出力を生成します。
ModuleNotFoundError: No module named 'not_exist_module'