【python】他のファイルの関数を呼び出す方法

2020年5月17日

ファイルごとに機能をまとめたい時、ファイルサイズが大きくなりすぎるのを防ぐために複数のファイルに跨ってコーディングしたいと気があると思います。
pythonの他ファイル内の関数を呼び出す方法を紹介します。

下記のフォルダ構成を前提として説明します。

root
  ├─Sample1.py
  └─main
       ├─ main.py  ← ここで実行
       ├─ Sample2.py
       └─ test1
             └─Sample3.py

main.pyを実際に呼び出して親ディレクトリ・同階層・下階層のファイル内関数を実際に呼び出してみましょう

他のファイルを呼ぶときはインポートを行います。
下記は同階層のファイルをインポート時の記述方法です。
後述のsys.path.append()にてパスを登録した時も同様です。

import 【インポート先のファイル】

他のディレクトリを呼び出す場合の方法

from 【ディレクトリパス】import 【インポート先のファイル】

親ディレクトリのファイル内の関数を呼び出す。

main.pyから親ディレクトリのSample1.pyを呼び出しましょう。

def sample1():
    print( "sample1を実行" )
import sys
sys.path.append('..')

import Sample1
Sample1.sample1()  #sample1を実行

main.py
1-2行目:python実行時のディレクトリより上の階層を直接インポートできない為、sys.path.append()よりパスを登録する。
4行目:親ディレクトリのSample1をインポートする
5行目:親ディレクトリのSample1を実行

親ディレクトリのファイル内の関数を呼び出す場合のNGケース

他サイトを見ると下記方法で親ディレクトリを直接参照している所もありますが、できない場合もあるようです。

from .. import Sample1   #NGケース有り

実際に上記のインポート方法を試してみましょう。

try:
    from .. import Sample1
    Sample1.sample1()
except:
    import traceback
    traceback.print_exc() #ValueError: attempted relative import beyond top-level package

エラーとして
ValueError: attempted relative import beyond top-level package
が吐き出されます。
実行したmain.pyより上のディレクトリをインポートすることは出来ないと怒られる結果となります。

同階層のファイルをインポートする。

main.pyから同階層のSample2.pyの関数を呼び出しましょう。

def sample2():
    print( "sample2を実行" )
import Sample2

Sample2.sample2()   #sample2を実行

main.py
1行目:同階層のSample2.pyをインポート
3行目: Sample2の関数を呼び出す。

下階層のファイルをインポートする。

main.pyからtest1/Sample2.pyのファイルをインポートしましょう。

def sample3():
    print( "sample3を実行" )
from test1 import Sample3

Sample3.sample3()   #sample3を実行

main.py
1行目:fromでディレクトリをtest1に指定、 importでSample2.pyを取り込む
3行目:Sample2.pyの関数を実行。

ソースコードはこちらから

このページで紹介している記事のソースコードの販売を行っています。
python基本を押さえたソースコードを収録しています。
購入頂いたソースコードは商用利用OKになります。

ソースコードの販売はこちら