こしあん
2025-01-17

GitHub ActionsでPythonプログラムの実行


10{icon} {views}


GitHub Actionsを使い、requirements.txtで依存パッケージをインストールしてからPythonスクリプトを実行するワークフロー設定例。 無料枠があるため手軽に試すことが可能で、ネットワークアクセスも含む動作確認ができる。

はじめに

  • GitHub ActionsでリポジトリにあるPythonスクリプトを動かしたい
  • requirements.txtで必要なライブラリをインストールして実行する例
  • よくやり方忘れるのでメモ

ディレクトリ構成

your-repository/
├── .github/
│   └── workflows/
│       └── run-python.yaml      # GitHub Actionsのワークフローファイル
├── sample_script.py             # 実行したいPythonスクリプト
├── requirements.txt             # 依存パッケージリスト(必要に応じて)
├── README.md                    # リポジトリの説明ファイル
└── その他のソースコードやファイル

GitHub Actionsのメイン(.github/workflows/run-python.yaml)

name: Run Python Script

on:
  # プルリクエストが作成されたとき、または更新されたときにトリガー
  pull_request:
    types: [opened, synchronize, reopened]
  # メインブランチにPushされたときも発火
  push:
    branches:
      - master

jobs:
  execute-python:
    runs-on: ubuntu-latest

    steps:
      # リポジトリのソースコードをチェックアウト
      - name: Checkout repository
        uses: actions/checkout@v4

      # 必要なPythonのバージョンをセットアップ
      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.12' # バージョンを指定

      # 必要に応じて依存関係をインストール
      - name: Install dependencies
        if: ${{ hashFiles('requirements.txt') != '' }}
        run: |
          pip install --upgrade pip
          pip install -r requirements.txt

      # Pythonスクリプトを実行
      - name: Run Python script
        run: |
          python sample_script.py
  • ファイルがあったら実行したいときは、hashFilesの値を評価すれば良いようだ

結果

Pushすると、ライブラリがインストールされ、コードが実行されている(requests.getの結果が表示されている)

メインコード

sample_scripts.py

example.comをrequestsで読んでくるだけ

import requests

def main():
    # 取得したい URL を指定します
    url = "https://example.com"

    try:
        # GET リクエストを送信してレスポンスを取得
        response = requests.get(url)

        # ステータスコードが 200 (成功)の場合
        if response.status_code == 200:
            # レスポンスの内容をテキスト形式で表示
            print(response.text)
        else:
            print(f"リクエストに失敗しました。ステータスコード: {response.status_code}")

    except requests.exceptions.RequestException as e:
        # ネットワークエラー等の例外処理
        print(f"リクエスト中にエラーが発生しました: {e}")


if __name__ == "__main__":
    main()

requrements.txt

requestsを入れてみた

requests

料金

GitHub Actions の課金について

無料枠結構でかいのでいろいろぐへぐへできそう。



Shikoan's ML Blogの中の人が運営しているサークル「じゅ~しぃ~すくりぷと」の本のご案内

技術書コーナー

北海道の駅巡りコーナー


Add a Comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です