閉じる

Pythonスクリプトファイル入門|.pyの作り方と実行方法・エラー対処

Pythonは対話的に1行ずつ実行できることが魅力ですが、本格的なプログラムや自動化処理を行うには.pyファイル(スクリプトファイル)として保存して実行する方法が不可欠です。

本記事では、.pyファイルとは何かという基礎から、WindowsやmacOSでの作成・実行手順、よくあるエラーの読み方と対処までを、図解とサンプルコードを交えながら丁寧に解説します。

Python初心者の方でも、自分でスクリプトを書いて動かせるようになることを目指します。

Pythonスクリプトファイル(.py)とは

Pythonスクリプトファイルの基本と拡張子.pyの意味

Pythonのプログラムをファイルとして保存したものをPythonスクリプトファイルと呼びます。

拡張子.pyが付いているテキストファイルであり、Pythonの文法に従って書かれた命令が上から順番に実行されます。

.pyファイルは中身がただのテキストです。

Wordなどの文書ファイルとは違い、特殊な形式ではなく、メモ帳やVS Codeなどのテキストエディタで中身を確認できます。

表にして整理すると、.pyファイルの位置づけが分かりやすくなります。

項目内容
ファイルの種類テキストファイル
拡張子.py
役割Pythonが読み取って実行する命令の集合
中身Pythonの文法で書かれたコード
作成ツールメモ帳、VS Code、PyCharm などテキストエディタ

拡張子.pyは「これはPythonコードですよ」という印です。

OSやエディタがこの拡張子を見て「Pythonとして扱おう」と判断します。

スクリプトとインタラクティブ実行の違い

Pythonには大きく分けて2つの実行スタイルがあります。

1つ目はインタラクティブ実行です。

ターミナル(コマンドプロンプト)でpythonと入力すると、>>>というプロンプトが表示され、その場で1行ずつコードを入力してすぐに結果を確認できます。

もう1つがスクリプト実行です。

コードをあらかじめ.cst-code>.pyファイルとして保存し、そのファイルを丸ごと実行します。

それぞれの特徴を簡単に比較します。

実行スタイル向いている用途特徴
インタラクティブ実行ちょっとした計算、文法の確認、動作テスト1行ずつすぐに試せるが、後から再実行がしにくい
スクリプト実行(.py)自動化、ツール開発、データ処理などの本格的な処理ファイルに保存して何度でも実行でき、他人と共有しやすい

学習の初期段階ではインタラクティブ実行が便利ですが、ある程度まとまった処理を作るときは.pyファイルとしてスクリプトを書く方が圧倒的に扱いやすくなります。

.pyファイルの作り方と保存方法

テキストエディタでのPythonファイル作成手順

Pythonスクリプトファイルは、専用ソフトがなくてもテキストエディタさえあれば作成できます

ここでは、OS標準の簡単なエディタを使う流れを文章で整理します。

まず、テキストエディタ(例: Windowsならメモ帳、macOSならテキストエディット)を起動します。

新規ファイルを開き、次のような簡単なコードを入力します。

Python
# 初めてのPythonスクリプト
# 画面にメッセージを表示するだけのシンプルな例です

print("Hello Python")  # 文字列を表示する関数

次に、このファイルを必ず拡張子.pyで保存します。

Windowsでメモ帳を使う場合は、保存ダイアログで"ファイルの種類""すべてのファイル"にし、ファイル名をhello.pyと入力して保存します。

ここでhello.py.txtのような二重拡張子にならないように注意します。

エクスプローラーの設定によっては拡張子が見えない場合があるため、不安な場合はファイルのプロパティ(情報)を確認するとよいです。

VS CodeでのPythonスクリプト新規作成

VS Code(Virtual Studio Code)を使うと、Pythonスクリプトの作成がより便利になります。

一般的な流れを整理します。

1つ目のステップとして、VS Codeを起動し、任意のフォルダ(作業用フォルダ)をフォルダーを開くで開きます。

Pythonファイルはこのフォルダ内に保存されます。

次に、左側のエクスプローラーで新しいファイルアイコンをクリックし、ファイル名としてhello.pyと入力してEnterを押すと、新しいPythonファイルが作成されます。

エディタに次のようなコードを書いてみます。

Python
# VS Codeで作成した最初のPythonスクリプト

def main():
    # main関数の中に処理を書く
    print("VS Code からの Hello Python")

# このファイルが直接実行されたときだけ main() を呼び出す慣用表現
if __name__ == "__main__":
    main()

VS Codeは.pyという拡張子を見て自動的にPythonモードになります。

キーワードの色分けや、インデントの補助などをしてくれるため、メモ帳などよりもミスを減らしやすいです。

.pyファイルをUTF-8で保存するポイント

Python 3ではUTF-8が標準の文字コードとして扱われるため、基本的にはUTF-8で保存しておけば問題ありません。

日本語コメントや日本語の文字列をコード内に含める場合、ファイルがUTF-8以外の文字コードで保存されると、実行時にSyntaxErrorや文字化けが発生することがあります。

VS Codeでは、ステータスバーの右下に現在の文字コード(例: UTF-8)が表示されており、クリックすることでエンコードの変更ができます。

ここを常にUTF-8にしておくことでトラブルを避けられます。

Windowsのメモ帳でも、保存ダイアログでエンコードUTF-8に変更してから保存すると安全です。

ファイル名の付け方と注意点

Pythonスクリプトのファイル名は、後から自分や他人が見たときに何のスクリプトか分かりやすい名前を付けることが大切です。

同時に、PythonやOSの制約に気を付ける必要があります。

推奨されるルールは次のようなイメージです。

  • 英小文字と数字、アンダースコア_を使う
  • スペースや記号(ハイフン-、感嘆符など)は避ける
  • ファイル名の最初は数字で始めない

例えばhello_world.pydata_analysis.pyなどは良い例です。

特に避けるべきなのは「標準ライブラリと同じ名前」です。

  • random.py
  • json.py
  • os.py
  • python.py

などと付けてしまうと、自分のファイルが本来の標準モジュールより優先されて読み込まれてしまい、意味不明なエラーを生む原因になります。

Pythonスクリプトの実行方法

コマンドラインでのPythonファイル実行方法

Pythonスクリプトは、基本的にコマンドライン(ターミナルやコマンドプロンプト)から実行します。

あらかじめhello.pyを保存したフォルダに移動しておき、次のように入力します。

Shell
python hello.py

環境によってはpython3を使う場合もあります。

この違いは後ほど説明します。

ここで、先ほど作成したhello.pyの内容が次のようなものであれば、

Python
# hello.py
print("Hello Python")

ターミナルには次のような出力が表示されます。

実行結果
Hello Python

このように、.pyファイルは「python コマンドに渡して実行する」のが基本になります。

pythonコマンドとpython3コマンドの違い

環境によっては、Pythonを実行するコマンドがpythonだったりpython3だったりします。

これは、Python 2系と3系が共存していた時代の名残です。

現在はPython 2は基本的に非推奨であり、Python 3を使うことが前提となっています。

  • LinuxやmacOSなどのUnix系OSでは、
    • python がPython 2
    • python3 がPython 3
      を指すケースがありました。最近のディストリビューションではpythonがPython 3になっていることも増えています。
  • Windowsでは、pythonがPython 3を指すことが多く、python3は存在しない場合もあります。

自分の環境でどのPythonが動くかを確認するには、ターミナルで次のように入力します。

Shell
python --version

または

Shell
python3 --version

出力結果の例は次のようになります。

実行結果
Python 3.11.6

自分の環境でPython 3を起動できるコマンドを把握しておき、.pyファイルを実行するときには常にそのコマンドを使うようにします。

VS CodeからPythonスクリプトを実行する方法

VS Codeでは、ターミナルを自分で開かなくても、エディタから直接スクリプトを実行する機能があります。

Python拡張機能が入っている場合、エディタ上部に▶ 実行Python ファイルの実行ボタンが表示されます。

これをクリックすると、VS Codeが内部でターミナルを開き、適切なpythonコマンドでファイルを実行してくれます。

例えば先ほどのhello.pyを開いた状態でこのボタンを押すと、下部のターミナルに次のような表示が現れます。

実行結果
> python "c:\work\hello.py"
Hello Python

このように、コマンドラインの操作に慣れていない場合でも、VS Codeを使えば比較的簡単にスクリプトを実行できます

実行時のカレントディレクトリとパスの考え方

Pythonスクリプト実行時に重要なのがカレントディレクトリ(現在の作業フォルダ)の考え方です。

ターミナルでpython hello.pyと実行すると、Pythonはターミナルの現在位置をカレントディレクトリとして扱います

例えば次のようなフォルダ構成を考えます。

このとき、hello.pyからdata/input.txtを開きたい場合、ターミナルでどのフォルダにいるかによって、指定の仕方が変わります。

カレントディレクトリがprojectの場合は、次のようなコードでファイルを開けます。

Python
# scripts/hello.py から data/input.txt を読み込む例

# Pathlibを使うとパスを安全に扱える
from pathlib import Path

def main():
    # カレントディレクトリからの相対パスで指定
    data_file = Path("data") / "input.txt"

    # テキストファイルを読み込んで中身を表示
    with data_file.open(encoding="utf-8") as f:
        text = f.read()
    print("入力ファイルの中身:")
    print(text)

if __name__ == "__main__":
    main()

このスクリプトを実行するには、ターミナルでprojectフォルダに移動してから、次のように入力します。

Shell
cd project
python scripts/hello.py
実行結果
入力ファイルの中身:
(ここにinput.txtの内容が表示される)

「スクリプトの位置」と「ターミナルのカレントディレクトリ」は別物である点が、初心者が混乱しやすいポイントです。

ファイルパスエラーが起きたときは、まず自分がどのフォルダにいるかを確認してみてください。

Pythonスクリプト実行時のエラー対処

構文エラー(SyntaxError)の原因と直し方

SyntaxError(構文エラー)は、Pythonの文法に反している書き方をしたときに発生するエラーです。

Pythonはコードを上から読みながら「文法的におかしい場所」を見つけると、その地点で実行を止めてエラーメッセージを出します。

例えば次のようなコードを考えます。

Python
# 構文エラーを含む例

value = 10

if value > 5   # コロン( : )を付け忘れている
    print("value is greater than 5")

このコードを実行すると、次のようなエラーになります。

実行結果
  File "syntax_error_example.py", line 4
    if value > 5   # コロン( : )を付け忘れている
       ^^^^^^^^^
SyntaxError: expected ':'

エラーメッセージには、

  • ファイル名と行番号
  • 問題のある行
  • 矢印^^^^で示された位置
  • SyntaxError: expected ':' という説明

が含まれています。

SyntaxErrorは「Pythonの文法書きを間違えたサイン」なので、エラーメッセージが指している行と、その前後をよく確認します。

特に次のようなミスが多く見られます。

  • ifforwhiledefの後ろにコロン:を付け忘れる
  • カッコ()[]{}の閉じ忘れ
  • 文字列リテラルの"'の閉じ忘れ

次のように修正すれば、エラーは解消されます。

Python
# 修正後の正しいコード

value = 10

if value > 5:  # コロンを付けて文法を正しくする
    print("value is greater than 5")
実行結果
value is greater than 5

エラーメッセージをよく読み、どの行のどのあたりがおかしいのかを推測しながら修正していくことが大切です。

インデントエラー(IndentationError)の確認ポイント

Pythonではインデント(字下げ)の深さがコードの構造を表します

このため、インデントのズレがあるとIndentationErrorが発生します。

例えば次のようなコードを見てみます。

Python
# インデントエラーの例

value = 10

if value > 5:
    print("greater than 5")
      print("this line has wrong indent")  # インデントが深すぎる
実行結果
  File "indent_error_example.py", line 6
      print("this line has wrong indent")  # インデントが深すぎる
      ^
IndentationError: unexpected indent

ここではunexpected indent(予期しないインデント)と表示されています。

インデントエラーを直すときに確認すべきポイントは次の通りです。

  • 同じブロックの行は同じインデント幅にそろえる
  • タブ文字と半角スペースを混在させない
  • VS Codeなどでは「タブをスペースに変換する」設定を有効にする

上記の例を修正すると、次のようになります。

Python
# インデントをそろえた正しい例

value = 10

if value > 5:
    print("greater than 5")
    print("this line has correct indent")  # 4スペースでそろえる
実行結果
greater than 5
this line has correct indent

Pythonではインデントは「見た目」ではなく「文法」だと意識すると、インデントエラーに対処しやすくなります。

モジュールが見つからないエラー(ModuleNotFoundError)対処法

ModuleNotFoundErrorは、importで指定したモジュールが見つからないときに発生します。

次のようなコードを例にします。

Python
# 存在しないモジュールをインポートしようとする例

import my_cool_library  # まだインストールしていないライブラリ

print("This will not be executed")

実行すると次のようなエラーになります。

実行結果
Traceback (most recent call last):
  File "module_error_example.py", line 3, in <module>
    import my_cool_library  # まだインストールしていないライブラリ
ModuleNotFoundError: No module named 'my_cool_library'

対処法は、どの種類のモジュールかによって異なります。

1つ目は標準ライブラリの場合です。

mathosjsonなど、Pythonに最初から含まれているモジュールは、基本的にインストール不要です。

もしModuleNotFoundErrorが出る場合は、ファイル名が標準ライブラリと被っている可能性などを疑います。

2つ目は外部ライブラリの場合です。

requestspandasなど、別途インストールが必要なライブラリは、pipコマンドでインストールします。

Shell
pip install requests

あるいは環境によっては:

Shell
pip3 install requests

インストール後に、改めてimport requestsと書いたスクリプトを実行します。

3つ目は自作モジュールの場合です。

import utilsと書いたのにutils.pyが見つからないケースでは、ファイルの場所とカレントディレクトリの関係を確認します。

同じフォルダにあるか、PYTHONPATHに含まれるパスに置かれているかをチェックします。

エラーメッセージ中のNo module named 'xxx'の「xxx」が、Pythonが見つけられないモジュール名です。

まずはスペルミスがないか、次にインストール状況やファイルの位置を確認してください。

ファイルパス関連のエラー(OSError)と解決方法

ファイルを開く処理を書いたときに発生しやすいのがOSErrorFileNotFoundErrorなどのパス関連エラーです。

次のようなコードを考えます。

Python
# 存在しないファイルを開こうとする例

def main():
    # data/input.txt が存在しない状態で実行するとエラーになります
    with open("data/input.txt", encoding="utf-8") as f:
        text = f.read()
    print(text)

if __name__ == "__main__":
    main()

実行すると、次のようなエラーになります。

実行結果
Traceback (most recent call last):
  File "file_error_example.py", line 3, in <module>
    main()
  File "file_error_example.py", line 7, in main
    with open("data/input.txt", encoding="utf-8") as f:
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: 'data/input.txt'

このエラーを解決するには、次の点を順番に確認します。

1つ目はファイルの存在確認です。

本当にその名前のファイルが、想定している場所にあるかをエクスプローラーやFinderで確認します。

2つ目はカレントディレクトリの確認です。

ターミナルでpwd(Unix系)やcd(何も付けずに実行するとカレントフォルダ表示)を入力し、自分がどのフォルダからスクリプトを実行しているかを把握します。

3つ目は相対パスか絶対パスかの見直しです。

相対パスでの指定が分かりにくい場合は、絶対パスを使って一度動かしてみるのも有効です。

Python では pathlib を使うことで、パスの扱いを分かりやすくできます。

Python
from pathlib import Path

def main():
    # スクリプトファイルの場所を基準に data/input.txt を指定する例
    script_dir = Path(__file__).parent  # このスクリプトがあるフォルダ
    data_file = script_dir / "data" / "input.txt"

    if not data_file.exists():
        print(f"{data_file} が見つかりません")
        return

    with data_file.open(encoding="utf-8") as f:
        text = f.read()
    print("ファイルの中身:")
    print(text)

if __name__ == "__main__":
    main()

このようにスクリプト自身の場所からファイルパスを組み立てることで、カレントディレクトリに依存しないコードを書くこともできます。

トレースバック(traceback)の読み方とデバッグの基本

Pythonでエラーが発生すると、トレースバック(traceback)と呼ばれるスタックトレースが表示されます。

これは、どのファイルのどの関数を通ってエラーまで到達したかを示す「足跡」のような情報です。

次のコードを例にします。

Python
# エラーをわざと発生させてトレースバックを見る例

def divide(a, b):
    # 0で割ると ZeroDivisionError が発生します
    return a / b

def main():
    x = 10
    y = 0  # ゼロで割ろうとしている
    result = divide(x, y)
    print("結果:", result)

if __name__ == "__main__":
    main()

このコードを実行すると次のようなトレースバックが表示されます。

実行結果
Traceback (most recent call last):
  File "traceback_example.py", line 12, in <module>
    main()
  File "traceback_example.py", line 8, in main
    result = divide(x, y)
             ^^^^^^^^^^^^
  File "traceback_example.py", line 4, in divide
    return a / b
           ~~^~~
ZeroDivisionError: division by zero

トレースバックを読むときの基本は、一番下の行から読むことです。

ここには「エラーの種類」と「簡単な説明」が書かれています。

この例ではZeroDivisionError: division by zeroとなっており、「0で割ったためにエラーになった」と分かります。

次に、その直上から上に向かって、

  • どのファイルの
  • 何行目の
  • どの関数内で

エラーが発生したかをたどります。

この例では、

  • divide関数の4行目でエラー
  • それをmain関数の8行目から呼び出している
  • mainは12行目のif __name__ == "__main__":の下から呼ばれている

という流れが分かります。

デバッグの基本的な流れとしては、

  1. トレースバックの一番下で、エラーの種類と簡単な原因を理解する
  2. その少し上の「自分の書いたコード」の行を特定する
  3. そこで使われている変数の値や、前後の処理を確認する

という手順を踏むとよいです。

場合によっては、次のようにprintを挿入して、変数の中身を確認しながら原因を探ります。

Python
def divide(a, b):
    print(f"divide() に渡された値: a={a}, b={b}")  # デバッグ用の表示
    return a / b

「エラーメッセージは敵ではなくヒント」だと考え、トレースバックを落ち着いて読むことで、Pythonスクリプトのトラブルシューティング能力が着実に向上します。

まとめ

本記事では、Pythonスクリプトファイル(.py)の基本から、テキストエディタやVS Codeによる作成方法、コマンドラインおよびVS Codeからの実行手順、さらにSyntaxErrorやIndentationError、ModuleNotFoundError、ファイルパス関連エラーの原因と対処法、トレースバックの読み方までを一通り解説しました。

まずはシンプルなhello.pyから始め、UTF-8で保存し、カレントディレクトリを意識しながら実行してみてください。

エラーに遭遇したときには、本文のポイントを思い出しながら1つずつ確認していくことで、.pyファイルを自在に扱えるようになっていきます。

クラウドSSLサイトシールは安心の証です。

URLをコピーしました!