PythonAnywhereは、サーバーを用意せずにブラウザだけでPythonのコードを書き、実行し、Webアプリとして公開できるホスティングサービスです。公式サイトは https://www.pythonanywhere.com/ で、ログインは右上の「Log in」から行います。2026年1月に料金体系が改定され、有料の入口は月10ドルのDeveloperプランに一本化されました。無料のBeginnerアカウントも残っていますが、外部通信・CPU時間・Webアプリの期限に制限があります。この記事では、現行の料金と無料枠の制限、最初の1ページを出す手順からFlask・Djangoの公開、エラーが出たときのログの見方までを、公式の料金表とヘルプに沿って整理します。
まとめ:PythonAnywhereの料金と使い方の要点
- ブラウザ上のコンソールとエディタでPythonを動かし、Webタブから
ユーザー名.pythonanywhere.comにWebアプリを公開できる。 - プランは無料のBeginner、月10ドルのDeveloper、月10〜500ドルのCustomの3種類。2026年1月に旧Hacker(月5ドル)と旧Web Developer(月12ドル)がDeveloperに統合された。
- 無料枠は外部通信が許可リストのサイトに限られ、CPUは1日100秒、無料Webアプリはアクセスの有無にかかわらず、期限の延長操作をしないと1か月で期限切れになる。US版は2026年1月15日以降、EU版は1月8日以降に作った無料アカウントでは定期実行タスクとMySQLも使えない。
- Developerプランで公開できるWebアプリは1個まで。複数のアプリを公開するならCustomプランになる。
- Flask・Djangoは「Manual configuration」でWebアプリを作り、WSGIファイルを編集してReloadする。動かないときはWebタブからerror logとserver logを開く。FastAPIなどのASGIアプリは実験的機能(beta)の扱い。
PythonAnywhereでできることと運営元
PythonAnywhereは、Python専用のPaaS(アプリの実行環境をまとめて提供するクラウドサービス)です。ブラウザからBashやPythonのコンソールを開き、ファイルを編集し、Webタブの設定だけでWebアプリを公開できます。WebサーバーやOSの保守は運営側が受け持ち、利用者はコード・依存関係・WSGI設定を管理します。PaaS全般の仕組みはPaaSとは?IaaS・SaaSとの違いと開発を速める仕組み・制約から採用判断まで解説で整理しています。
主な機能は、Webアプリのホスティング、決まった時刻に処理を動かす定期実行タスク(Scheduled tasks)、常駐プロセスを動かし続けるAlways-onタスク、MySQL・PostgreSQLのデータベース、Jupyterノートブックです。Always-onタスクとPostgreSQLは有料プランの機能で、定期実行タスクとMySQLも、2026年1月以降に作った無料アカウントでは使えません。
運営は英国のPythonAnywhere LLPで、2022年6月にAnacondaが買収しました。
公式サイトとログイン画面(US版とEU版)
PythonAnywhereには、www.pythonanywhere.com のUS版と、eu.pythonanywhere.com のEU版の2つのシステムがあり、アカウントは別々です。EU版はAWSのフランクフルト(eu-central-1)で動いており、料金はUS版がドル建て、EU版がユーロ建てです(Developerは月10ドルと月10ユーロ)。ログインするときは、登録したほうのサイトの「Log in」を使います。US版のアカウントをEU版へ移したい場合は、運営への連絡で移行を依頼します。
料金プラン3種類と2026年の改定
公式の料金ページ(2026年10月確認)に載っているプランは次の3つです。
| 項目 | Beginner(無料) | Developer | Custom |
|---|---|---|---|
| 月額 | 0ドル | 10ドル | 10〜500ドル |
| Webアプリ数 | 1 | 1 | 選択制(最大20) |
| 独自ドメイン | 不可 | 可 | 可 |
| Webワーカー(1アプリあたり) | 1 | 3 | 選択制 |
| CPU時間(1日) | 100秒 | 5,000秒 | 選択制 |
| ストレージ | 512MB | 5GB | 選択制 |
| 帯域 | Low | Medium | 価格に応じる |
| コンソール | 2個まで | 無制限 | 無制限 |
| 定期実行タスク | なし | 20(毎時・毎日) | 20(毎時・毎日) |
| Always-onタスク | なし | 1 | 選択制 |
| 外部通信 | 許可リストのみ | 制限なし | 制限なし |
| SSH・MySQL | なし | あり | あり |
| PostgreSQL | なし | 追加オプション | 追加オプション |
有料プランは月払いでいつでも解約でき、30日間の返金保証が付きます。PostgreSQLは、Accountページの「Customize your plan」でPostgresをオンにし、ディスク容量を選んだカスタムプランに切り替えると使えるようになります。
2026年1月の料金・無料枠改定と既存契約の扱い
公式ブログの料金改定の告知によると、料金体系の見直しは2013年以来です。無料枠の変更は無料アカウントの変更告知にまとまっています。
- 旧Hacker(月5ドル)と旧Web Developer(月12ドル)を統合し、Developer(月10ドル)を新設した。適用開始はEU版が1月8日、US版が1月15日。
- 既存の有料契約者は、解約やプラン変更をしない限り従来の料金と機能のまま使える(旧Web Developerなら月12ドルのまま)。
- 無料アカウントのサポートは、運営による直接対応からフォーラムなどのコミュニティ対応に移った。
- 新規の無料ユーザーは、定期実行タスクとMySQLがDeveloper以上の機能になった。
- 無料Webアプリの延長操作で設定される期限が、3か月から1か月に短くなった。
改定日より前に作った無料アカウントでは、MySQLと1日1回の定期実行タスクが引き続き使えます。古い解説記事の「無料でもMySQLや定期実行が使える」は、新しいアカウントには当てはまりません。
2026年9月告知の年払い・PostgreSQL 15・MySQL容量の扱い
2026年9月4日の告知で、EU版は6月23日、US版は7月28日に入った更新の内容が公表されました。要点は3つです。
- 年払い:アカウントを新規作成するときと、無料から有料へ上げるときに選べる。12か月分を10か月分の料金で払い、自動更新はされない(期限前に通知が届き、続けるかを自分で選ぶ)。
- PostgreSQL 15:新しく作るPostgreSQLの既定の版になった。Databasesページで、止まったサーバーを運営に連絡せず再起動できる。
- MySQLの容量超過:アカウントのストレージ上限を超えると、メールで予告されたうえで書き込みが止まる。読み取りはでき、使用量を上限未満に減らせば24時間以内に書き込みが戻る。
無料プラン(Beginner)で詰まりやすい4つの制限
無料枠は学習や試作には足りますが、次の4点を知らずに作り込むと、公開後に動かないことに気付きます。
外部通信の許可リスト制限
無料アカウントのコードからの外部通信は、プロキシ proxy.server:3128 を経由し、許可リスト(allowlist)に載ったサイトにしか届きません。2026年10月時点の公開リストには6,000件を超えるドメインが並び、api.openai.com・api.anthropic.com・api.line.me・api.telegram.org・discord.com・api.notion.com などは含まれています。リストにないサイトへつなぐと「403 Forbidden」か「[Errno 111] Connection refused」になります。後者は、ライブラリがプロキシに対応していない場合や、プロキシの設定が必要な場合に起きます。
追加申請は受け付けていますが、対象は公式に文書化された公開APIを持つサイトに限られます。許可リスト外のWebページをスクレイピングする用途には、無料枠は使えません。対象サイトと通信方式が許可条件に合うかを先に確認してください。有料プランに上げれば制限は外れますが、その後に既存のコンソールを開き直し、Webアプリとタスクを再起動する必要があります。
CPU時間は1日100秒
CPU時間の枠は、コンソールと定期実行・Always-onタスクで実際に計算した時間に掛かり、Webアプリのリクエスト処理には掛かりません。枠を使い切った後は「tarpit」と呼ばれる低優先度の状態で実行されます。ただしAlways-onタスクは、枠の消費時と翌日の枠の更新時に停止・再起動されます。重い集計や機械学習の学習をコンソールで回すと、数分で100秒を使い切ります。
無料Webアプリの1か月期限と延長操作
無料のWebアプリには1か月の有効期限があり、アクセスがあっても期限の延長操作が必要です(2026年1月の改定前は3か月)。期限が近づくとメールで通知され、Webタブから延長できます。切れてもファイルや設定は消えず、Webタブから再度有効にできます。デモやポートフォリオを置いたまま放置すると止まるので、月に1回はWebタブで延長するか、常に公開しておきたいならDeveloperに上げます。
ストレージ512MBとコンソール2個
ストレージは512MBで、Djangoや数値計算系のライブラリを仮想環境に入れるとすぐに圧迫されます。コンソールは同時に2個まで、SSHと独自ドメインは使えません。公開URLはUS版では ユーザー名.pythonanywhere.com、EU版では ユーザー名.eu.pythonanywhere.com です。
アカウント登録から最初のページ公開までの使い方
- 公式サイトの「Pricing & signup」を開き、無料なら「Create a Beginner account」を選ぶ。
- ユーザー名・メールアドレス・パスワードを登録し、届いたメールのリンクで確認する。ユーザー名はそのまま公開URLのサブドメインになる。
- ダッシュボードの「Web」タブで「Add a new web app」を押し、フレームワークとPythonのバージョンを選ぶ。
- Webタブの「Reload」で反映し、「Configuration for」の横のURLを開いて表示を確かめる。
Quickstartで最初のFlaskページを出す手順
とにかく1ページを公開したいなら、手順3でFlaskを選ぶQuickstartが最短です。公式の初心者向けチュートリアルのとおり、既定の設定ではホームディレクトリに mysite フォルダが作られ、その中の flask_app.py にHello world相当のコードが置かれます。Filesページでこのファイルを開いて自分のコードに書き換え、Saveしてから「Reload」を押せば反映されます。同名ファイルは上書きされます。Quickstartはサーバーに入っている版のFlaskを使うので、版を固定したいアプリは次章のManual configurationで作ります。
GitHubからのコード取得とトークン認証
手元のコードは、Bashコンソールで git clone して取り込むのが公式ヘルプの推奨です。1ファイル100MiB未満ならFilesページからのアップロードもでき、ZIPで上げて unzip する方法もあります。非公開リポジトリをHTTPSでcloneすると認証を求められますが、GitHubは2021年8月13日からGit操作でのアカウントのパスワードを受け付けていないため、パスワード欄には個人用アクセストークン(Personal access token)を入れます。以後は手元で git push、PythonAnywhereのBashで git pull してReloadする流れにしておくと、どの版が公開中かを追えます。
Flaskアプリを公開する手順
既存のFlaskアプリは、仮想環境を作ってからManual configurationでWebアプリを作ります(手順は公式ヘルプのFlaskのページに準拠)。Flaskの導入自体はpip install flaskの手順|仮想環境の作成からエラー対処までで詳しく扱っています。まずBashコンソールで仮想環境を作ります(Python 3.13の例)。innitで /usr/bin/python3.13 のようなシンボリックリンクを指定すると仮想環境が壊れ、パッケージを入れられなくなると仮想環境の解説ページにあるため、版名だけで指定します。
mkvirtualenv --python=python3.13 my-virtualenv
pip install flask
# requirements.txt がある場合
pip install -r requirements.txt
プロンプトが (my-virtualenv)$ に変われば有効化されています。次回以降は workon my-virtualenv で戻れます。続いてWebタブで「Add a new web app」から「Manual configuration」を選び、仮想環境と同じPythonバージョンを指定します。作成後、Virtualenv欄に my-virtualenv と入力すると /home/ユーザー名/.virtualenvs/my-virtualenv に補完されます。
最後に、Webタブ上部のリンクからWSGIファイルを開き、Flaskの節を次のように書き換えます。アプリ本体が /home/ユーザー名/mysite/flask_app.py で、変数名が app の場合の例です。
import sys
path = '/home/yourusername/mysite'
if path not in sys.path:
sys.path.insert(0, path)
from flask_app import app as application
保存してReloadすれば公開されます。app.run() は必ず if __name__ == '__main__': の中に置いてください。PythonAnywhereはuWSGIでアプリを動かすため、読み込み時に app.run() が実行されると開発用サーバーが処理を塞ぎ、504(ときに502)のエラーになります。
Djangoアプリを公開する手順と静的ファイル
既存のDjangoプロジェクトも流れは同じですが、Web app作成時に「Django」ではなく「Manual configuration」を選びます。「Django」の選択肢は新規プロジェクト専用です(既存Djangoプロジェクトの公開手順)。
git clone https://github.com/myusername/myproject.git
cd myproject
mkvirtualenv --python=python3.10 mysite-virtualenv
pip install -r requirements.txt
例の myusername と myproject は、自分のGitHubアカウントとリポジトリ名に置き換えます。Webタブで「Manual configuration」を選ぶときは仮想環境と同じPython 3.10を指定し、Virtualenv欄には mysite-virtualenv を入力します。
取り違えやすいのが編集するWSGIファイルです。プロジェクト内の wsgi.py はPythonAnywhereでは読まれず、編集するのはWebタブのリンク先にある /var/www/yourusername_pythonanywhere_com_wsgi.py です。Djangoの節以外を消し、次の形にします。path は manage.py のあるディレクトリ、mysite.settings の mysite は settings.py を含むパッケージ名に合わせます。
import os
import sys
path = '/home/myusername/myproject'
if path not in sys.path:
sys.path.insert(0, path)
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
Reloadしたら、Bashで manage.py のあるディレクトリに移って ./manage.py migrate を実行します。DEBUG = False で公開する場合は、settings.py の ALLOWED_HOSTS に ユーザー名.pythonanywhere.com を入れないとリクエストが拒否されます。
このままではCSSやJavaScriptが読み込まれません。静的ファイルは次の3手順で配信します。
settings.pyのSTATIC_ROOTに、静的ファイルを集める絶対パスを指定する(例/home/myusername/myproject/static)。python3.10 manage.py collectstaticを実行する。静的ファイルを更新するたびに実行し直す。- WebタブのStatic files欄で、URL
/static/と手順1のディレクトリを対応付けてReloadする。
gunicornとnginxで自前のサーバーに載せる構成との違いはDjangoのデプロイ手順:gunicorn+nginx構成と本番設定・配置先の選び方で比べられます。FlaskとDjangoのどちらで作るか迷っている段階ならDjangoとFlaskの違い|内蔵範囲・非同期・案件規模から選ぶ判断基準が先です。
データベースの選択肢:SQLite・MySQL・PostgreSQL
SQLiteは追加契約なしで使え、学習や試作に利用できます。ただしPythonAnywhere公式は、ファイルシステムの性能や複数プロセスからのアクセスの問題から、本番Webアプリでの利用を推奨していません。本番ではMySQLかPostgreSQLを検討してください。MySQLは2026年1月以降に作った無料アカウントでは使えず、Developer以上で使えます。容量はアカウントのストレージ(Developerなら5GB)に含まれ、超えると前述のとおり書き込みが止まります。
PostgreSQLは有料プランへの追加オプションです。公式ヘルプの手順では、プランでPostgresをオンにしたあとDatabasesタブでサーバーを作成し、スーパーユーザーとは別にアプリ用のデータベースとユーザーを作ります。DjangoからPostgreSQLにつなぐ DATABASES の書き方はDjangoとPostgreSQLの接続設定|DATABASES定義と接続プール・固有フィールドの判断にまとめています。
エラーが出たときのログの見方と502・504の切り分け
公開したページがエラーになったら、まずWebタブの「Log files」のリンクからログを開きます。実体は次の3ファイルで、最新の記録は末尾にあります。
| ログ | パス | 主に見るもの |
|---|---|---|
| error log | /var/log/ユーザー名.pythonanywhere.com.error.log |
例外のトレースバック |
| server log | /var/log/ユーザー名.pythonanywhere.com.server.log |
uWSGIの起動・タイムアウト |
| access log | /var/log/ユーザー名.pythonanywhere.com.access.log |
リクエストと応答コード |
症状ごとの原因は、502・504の対処ページとReload失敗の対処ページから次のように絞れます。
- 500(Internal Server Error):アプリのコードで例外が出ている。error logの末尾のトレースバックを読む。
- 502・504でerror logに何も出ない:WSGIファイルの構文エラーやimportエラーで読み込みに失敗している可能性がある。Flaskなら
app.run()の置き場所も疑う。 - Reload直後だけ502:読み込みが終わる前にアクセスしている。Reloadボタンの回転表示が止まってから開く。
- 「error reloading web app」と出る:一時的な障害やアプリのエラーのほか、Reload終了時の確認アクセスが20秒以内に返らないことが原因として考えられる。起動時の重い処理を減らす。
- server logに「harakiri」:1リクエストが5分の上限を超えてワーカーが止められた。重い計算はタスクへ切り出す。
git pullとReloadの一括実行とAPIからのReload
更新のたびのReloadは、公式のコマンドラインツール pa で省けます。PyPIの pythonanywhere パッケージ(2026年10月時点の最新は0.19.3でPython 3.10以上)に含まれ、pa webapp reload は --domain を省くと ユーザー名.pythonanywhere.com を対象にします(0.19.3の pa webapp reload --help の表示による)。Accountページの「API Token」タブでトークンを発行し、その後に新しいBashコンソールを開くと、PythonAnywhere上のコンソールでは環境変数 API_TOKEN に自動で入ります。
pip install --upgrade pythonanywhere
cd ~/mysite && git pull && pa webapp reload
外部のCIなどからReloadするときは、REST API(beta)の POST /api/v0/user/{username}/webapps/{domain_name}/reload/ を、Authorization: Token <トークン> ヘッダー付きで呼びます。ホストはUS版が www.pythonanywhere.com、EU版が eu.pythonanywhere.com で、各エンドポイントは原則として1分40回までです。ただし、コンソールのsend_inputエンドポイントは1分120回までです。SSH経由で外部から git pull を実行する構成には、有料プランが必要です。
FastAPI・StreamlitなどASGIアプリの対応状況
FastAPI・FastHTML・Djangoの非同期機能といったASGIアプリの公開は、2026年10月時点でも公式ヘルプが「experimental feature(beta)」と明記している機能です(ASGIサイトの公開手順)。WebタブのUIではなく、pa website create で作成します。事前にAPIトークンを発行してから新しいBashコンソールを開き、fastapi と uvicorn[standard] を入れた仮想環境 my_venv と、app = FastAPI() を定義した ~/my_fastapi/main.py を用意しておきます。
pip install --upgrade pythonanywhere
pa website create --domain YOURUSERNAME.pythonanywhere.com --command '/home/YOURUSERNAME/.virtualenvs/my_venv/bin/uvicorn --app-dir /home/YOURUSERNAME/my_fastapi --uds ${DOMAIN_SOCKET} main:app'
ヘルプが挙げる制限は、静的ファイルのマッピングが使えない、管理用のWeb UIがごく限られる、コマンドの構文やAPIが変わりうる、長期的な料金が未定、の4点で、ASGIサーバーのDaphneは使わないよう勧告されています。Streamlitの公開も同じ pa による実験的機能で、有料アカウントが前提です。FastAPIを業務で常時公開するなら、ASGIを正式にサポートする実行環境を選ぶほうが安全で、エッジで動かす選択肢はCloudflare Python Workersとは?FastAPIをエッジで動かす手順とパッケージ制約【2026年10月時点】で扱っています。
使えるPythonのバージョンとシステムイメージ
使えるPythonのバージョンは、アカウントに割り当てられた「システムイメージ」で決まります。公式ヘルプの対応表に載っている現行の2つは次のとおりです。
| システムイメージ | 使えるPython |
|---|---|
| haggis | 2.7・3.6(パッケージ未導入)、3.7〜3.10 |
| innit | 3.7・3.8(パッケージ未導入)、3.9〜3.13 |
最新のイメージinnitでも、2026年10月時点で選べるのは3.13までで、3.14は一覧にありません。手元の開発環境もバージョンをそろえておきます。複数バージョンの切り替えはpyenvでPythonのバージョンを切り替える手順|shimの仕組みとビルド失敗の対処が参考になります。
イメージはAccountページの「System image」タブで新しいものに変えられますが、登録時より古いイメージには戻せません。切り替えるとPythonのマイクロバージョン(3.10.5から3.10.12など)が変わり、既存の仮想環境が壊れることがあるため、事前に pip freeze で依存関係を控えてから作り直します。
PythonAnywhereを選ぶべき場面・避けるべき場面
向いているのは、Pythonの学習、授業や研修での共通環境、FlaskやDjangoの小さなサイト、定時に動かすスクリプト(有料)です。Developerプラン1つでWebアプリ1個とAlways-onタスク1個、定期実行タスク20個を持てるので、社内向けの小さなツールとBotの同居にも合います。
一方、次の条件に1つでも当てはまるなら、別のサービスを選ぶべきです。
- 月10ドルで複数のWebアプリを公開したい(Developerは1個まで)。
- FastAPIなどのASGIアプリを本番で常時公開したい(beta扱い)。
- Python 3.14の機能が前提(innitでも3.13まで)。
- 無料のまま任意の外部サイトからデータを集めたい(許可リスト外は不可)。
- 1リクエストで5分を超える処理がある(harakiriで止められる)。
コンテナやほかの言語も含めて動かしたい場合は、Railwayのデプロイ手順とrailway.ts移行|料金の実額とリージョンの制約やHerokuとは?デプロイ手順(Git・GitHub連携・Docker)と料金・2026年の提供方針と料金・制約を比べてください。試作をPythonAnywhereで済ませたあと、認証・権限・外部連携を備えた業務システムとして作り直す段階では、フルスクラッチ開発で要件から設計し直す選択肢もあります。
よくある質問
PythonAnywhereは無料で使えますか?
使えます。無料のBeginnerアカウントで、Webアプリ1個とコンソール2個を使えます。ただしCPUは1日100秒、ストレージは512MBで、外部通信は許可リストのサイトに限られ、Webアプリはアクセスの有無にかかわらず、期限の延長操作をしないと1か月で期限切れになります。US版では2026年1月15日以降、EU版では1月8日以降に作った無料アカウントでは、定期実行タスクとMySQLも使えません。
PythonAnywhereの料金はいくらですか?
有料の入口はDeveloperプランの月10ドル(EU版は月10ユーロ)で、要件に合わせて組むCustomプランは月10〜500ドルです。新規作成時か無料から上げるときに選べる年払いは、12か月分を10か月分の料金で払います。2026年1月より前から有料契約している人は、解約やプラン変更をしない限り旧料金のまま使えます。
PythonAnywhereにログインできないときは?
US版(www.pythonanywhere.com)とEU版(eu.pythonanywhere.com)はアカウントが別なので、どちらで登録したかを確認し、登録したほうのサイトの「Log in」から入ってください。無料アカウントは運営に直接問い合わせできず、フォーラムなどのコミュニティでのサポートになります。
外部のAPIにつながらず403エラーが出るのはなぜですか?
無料アカウントの外部通信は、プロキシ経由で許可リストのサイトにしかつながらないためです。pythonanywhere.com/whitelist/ で接続先が載っているかを確認し、載っていなければ追加申請(公式の公開APIに限る)をするか、有料プランに上げます。
PythonAnywhereでFastAPIは動きますか?
動かせますが、ASGIアプリの公開は2026年10月時点でbeta扱いです。Webタブではなくコマンドラインツールの pa website create で作成し、静的ファイルのマッピングは使えません。常時公開の本番サービスには向きません。