Pythonでプログラムを書いていると、コードが長くなりすぎて「ファイルを分割したい」と思う瞬間が必ず訪れます。
機能を別ファイル(モジュール)に切り出して、必要な時だけ呼び出すことができれば、コードの見通しが良くなり、再利用性も高まります。
「別フォルダ(階層)にあるクラスを使いたい」
「別のPythonスクリプトを実行して、その結果を受け取りたい」
この記事では、Pythonにおける別ファイルの呼び出し(インポート)について、基本となる import 文の使い方から、関数・クラス・変数の参照方法、そしてパスが異なる場合の対処法まで、サンプルコード付きで徹底解説します。
![]() 執筆者:マヒロ |
|
- OS:Windows 11 / macOS Sequoia
- IDE:Visual Studio / VS Code / IntelliJ IDEA
- その他:Chrome DevTools / 各言語最新安定版
※本メディアでは、上記環境にてコードの動作と情報の正確性を検証済みです。
同じフォルダにある別ファイルを呼び出す(import)
まずは最も基本的な、同じディレクトリ(フォルダ)内にあるPythonファイルを読み込む方法から見ていきましょう。
ファイル構成
ここでは、呼び出される側の my_module.py と、呼び出す側の main.py が同じ階層にあると仮定します。
project/
├── my_module.py (呼び出されるファイル)
└── main.py (実行するファイル)
my_module.py
def say_hello(name):
return f"Hello, {name}!"
class Calculator:
def add(self, a, b):
return a + b
message = "これはモジュールの変数です"
import 文を使った呼び出し
main.py から my_module.py を利用するには、拡張子(.py)を除いたファイル名を import します。
main.py
import my_module
# 関数の呼び出し
print(my_module.say_hello("Python"))
# クラスの利用
calc = my_module.Calculator()
print(f"足し算の結果: {calc.add(10, 20)}")
# 変数の参照
print(my_module.message)
実行結果
Hello, Python!
足し算の結果: 30
これはモジュールの変数です
import my_module と記述することで、my_module.py の中身が読み込まれます。
関数やクラスを使う際は、モジュール名.関数名 のようにドットで繋いでアクセスします。
これにより、別ファイルに同じ名前の関数があっても衝突を防ぐことができます。
from … import … で関数名を直接使う
「毎回 my_module. と書くのが面倒」という場合は、from を使って特定の機能だけを読み込むことができます。
main.py
from my_module import say_hello, Calculator
# モジュール名なしで直接呼び出せる
print(say_hello("World"))
calc = Calculator()
print(calc.add(5, 5))
from モジュール名 import 関数名 とすることで、現在のファイル内で定義したかのように直接関数やクラスを使えるようになります。
ただし、名前が衝突するリスクがあるため、汎用的な名前(count や data など)をインポートする際は注意が必要です。
別のフォルダ(階層)にあるファイルを呼び出す
プロジェクトが大きくなると、ファイルをフォルダごとに整理したくなります。
しかし、Pythonはデフォルトでは「実行ファイルと同じ場所」か「標準ライブラリの場所」しか見に行かないため、単に import folder.module と書いてもエラーになることがあります。
フォルダをパッケージとして扱う(init.py)
フォルダの中に __init__.py というファイル(空でOK)を置くことで、Pythonはそのフォルダを「パッケージ」として認識します。
※Python 3.3以降では __init__.py がなくてもインポート可能ですが、明示的にパッケージであることを示すために設置するのがマナーです。
project/
├── utils/ (サブフォルダ)
│ ├── __init__.py
│ └── math_tool.py
└── main.py
main.py
# フォルダ名.ファイル名 でインポート
import utils.math_tool
# または from を使う
from utils.math_tool import some_function
このように、ドット区切りで階層を指定することで、サブフォルダ内のファイルを読み込むことができます。
親ディレクトリや離れた場所のファイルを読み込む(sys.path)
「src フォルダのスクリプトから、common フォルダのモジュールを読み込みたい」といった場合、標準のインポートでは解決できないことがあります。
その場合は、sys.path を使ってPythonの検索パスを追加します。
import sys
import os
# 親ディレクトリのパスを取得して追加
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
# これで親ディレクトリにあるモジュールもインポート可能になる
import common_module
sys.path は、Pythonがモジュールを探しに行くパスのリストです。
ここに append でパスを追加することで、任意の場所にあるファイルをインポート対象に含めることができます。
ただし、パスの管理が複雑になるため、基本的にはプロジェクトのルート(根っこ)から実行するように設計するのが望ましいです。
別ファイルを「スクリプト」として実行する(subprocess)
「関数を呼び出すのではなく、別のPythonファイルを実行して、その結果だけを受け取りたい」というケースもあります。
この場合は import ではなく、subprocess モジュールを使用します。
subprocess.run で別ファイルを実行
import subprocess
# other_script.py を実行し、引数として "arg1" を渡す
result = subprocess.run(
["python", "other_script.py", "arg1"],
capture_output=True, # 出力を取得する
text=True # 文字列として扱う
)
# 実行結果(標準出力)を表示
print("実行結果:", result.stdout)
subprocess.run を使うと、コマンドラインで python other_script.py arg1 と打つのと同じ処理をプログラム内から行えます。
capture_output=True を指定することで、そのスクリプトが print() で出力した内容を変数 result.stdout として受け取ることができます。
完全に独立した処理を連携させたい場合に有効な手段です。
Pythonのスキルを活かして年収を上げる方法
以上、Pythonで別ファイルの関数やクラスを呼び出す方法について解説してきました。
Pythonエンジニアの需要は非常に高いため、転職によって数十万円の年収アップはザラで、100万円以上年収が上がることも珍しくありません。
なお、転職によって年収を上げたい場合は、エンジニア専門の転職エージェントサービスを利用するのが最適です。
転職エージェントも副業エージェントも、登録・利用は完全無料なので、どんな求人や副業案件があるのか気になる方は、気軽に利用してみるとよいでしょう。
| 年収アップにこだわりたい方 (平均アップ額138万円の実績) | テックゴー |
| 未経験・経験者問わず幅広く探したい方 | ユニゾンキャリア |
| 業界に精通した担当者に相談したい方 | キッカケエージェント |
| ゲーム業界への転職を志望する方 | ファミキャリ |
| エンジニア未経験からキャリアを築く方 | イーチキャリア |



