
Pythonプログラムを外部から呼び出す方法
■ なぜ外部から呼び出すのか
今回はPythonプログラムを外部から呼び出す方法を紹介します。
プログラミングを学習し始めたばかりの頃は、書いたプログラム自体を「直接実行」するはずです。
しかし、今回紹介する内容は、「あるプログラムから、他のプログラムを呼び出す」という実行方法になります。
さて、なぜ私はこんな回りくどい技術を紹介するのでしょうか…。
通常、プログラミングが上達するにつれ、書き上げるコードの量はどんどん膨らんでいきます。
はじめのうちは気にならないと思いますが、「プログラミングが楽しい」と感じる頃には、もう管理しきれないほどのコードを抱え、そこでやっと「プログラムの整理術・管理術」の必要性を感じるはずです。
今回紹介する内容はずばり、その技術に他なりません。
皆さんが沢山のプログラムを書き、それを管理していくために必要な技術だからこそ、今回は少しまわりくどい技術を紹介しようと思います。
■ 「直接の実行」と「呼び出しによる実行」の違い
今回解説する「直接の実行」と「呼び出しによる実行」の違いを図説すると以下のような感じです。
▼ 直接の実行

▼ 呼び出し実行

■ Pythonプログラムの「まとめ方」
図説したとおり、プログラムは処理を分けてまとめておくと管理が楽になります。
では実際、Pythonプログラムはどのように分け、まとめればいいのでしょうか。
まず、Pythonのプログラムは「***.py」という1つのテキストファイル内に処理内容をまとめ、それを「モジュール」と呼びます▼
モジュール = 1つのPythonファイル(「***.py」)
1つのモジュールには思いついたプログラムをなんでも書き込めばいいというわけではなく、「1つのモジュールには、まとまった1つの処理・機能」を整理して書き込むのが基本です▼
1つのモジュール = まとまった1連の処理・機能
たとえば、以下のような作業は、別々のモジュールとして分けて管理するべきだと考えるのが一般的でしょう▼
・トヨタの株価データを取得する
・東京都の降水確率データをデータベースへ格納する
それに対し、以下のような作業は、同一のモジュール内へまとめた方が管理しやすいはずです▼
・トヨタの株価データを取得する
・トヨタの株価データをデータベースへ格納する
プログラムの整理術・管理術は非常に奥が深く、「オブジェクト指向」や「デザインパターン」と冠する専門の技術書も存在していますが、初心者のうちはこの「モジュール化」という概念さえ知っておけばひとまず大丈夫です。
■ 「モジュール」を外部から呼び出す
繰り返しになりますが、1つのまとまった処理・機能を、1つのPythonファイルへまとめたものを「モジュール」と呼びます。
その「モジュール」という仕組みを十分活用するには、「外部から呼び出す方法」を学ぶ必要があります。
例えば、「2つのサイトをスクレイピングする方法」を考える場合、以下のように作業内容を分け、プログラムを設計すると、修正や管理(スケジューリング等)が非常にしやすくなります(再掲)▼

「絶対にこうしなければいけない」というルールではありませんが、
初心者でも実践できる簡単なプログラム管理法ですので、ぜひ覚えておいてください。
まとめるとこんな感じですね▼
・子スクリプト:プログラムを処理・機能毎にまとめる
・親スクリプト:子スクリプトの実行回数・時間のスケジューリングを行う
■ 呼び出す方法(環境設定)
実際に、外部から他のPythonプログラムを呼び出す方法を紹介します。
環境設定については、最も作りやすいGoogle Colaboratory(以下Colab)環境で解説します。
Colab環境の作り方については以前の記事で解説しているので、そちらを参考にしてみてください。
また、上記リンクの「追加設定1」も行い、ドライブをマウントしておいてください。
フォルダ構造は、「MyDrive/pystudy/call_module/」となるよう作成します。
そこに「main.ipynb」というColabノートを作成し、さらに「sub.py」というPythonプログラムを作成(アップロード)します。
すると以下の通りの構造になります▼
MyDrive
|-- pystudy
|-- call_module
|-- main.ipynb
|-- sub.py
「sub.py」プログラムは、ローカルPC上で以下の通り作成してください▼
def say_hello():
print("hello")
以上のプログラムを「sub.py」という名前で保存しておきます。
そして、GoogleDriveのブラウザ画面から以下の通り実行すれば、GoogleDriveへ「sub.py」プログラムを追加することが可能です▼
右クリック > ファイルをアップロード
これが今回呼び出すターゲットになります。
■ 呼び出す方法(文法)
さて、Colabノートから作成した「sub.py」プログラムを呼び出してみましょう。
他のプログラムを呼び出すPython文法は、非常に簡単です。
呼び出し元となるColabノート(「main.ipynb」)に、以下のプログラムをコピペしてください▼
import sys
import pprint
import importlib
# パスを通す
MODULE_PATH = "/content/drive/My Drive/pystudy/call_module"
sys.path.append(MODULE_PATH)
# パスが通っているか確認する
pprint.pprint(sys.path)
# 外部プログラムを呼び出す
import sub # モジュール名
importlib.reload(sub) # Colabではモジュール内容を書き換えた場合にリロードが必要
sub.say_hello() # say_hello関数を呼び出す
次に、念のためランタイムの再起動を行っておきます。
Colabノート(「main.ipynb」)を開いた状態で、以下の通り実行します▼
ランタイム > ランタイムを再起動
再起動後にプログラムを実行すれば、以下のような出力がされるはずです。

いかがでしょうか。
実際に手を動かしてみると、プログラムを外部から呼び出すことが簡単なことだと実感できたはずです。
たったこれだけのことで、皆さんが管理できるプログラムの量はけた違いに増えるので、ぜひ実用できるようにしておきましょう!
いいなと思ったら応援しよう!
