PythonAnywhereは、サーバーを用意せずにブラウザだけでPythonのコードを書き、実行し、Webアプリとして公開できるホスティングサービスです。公式サイトは https://www.pythonanywhere.com/ で、ログインは右上の「Log in」から行います。2026年1月に料金体系が改定され、有料の入口は月10ドルのDeveloperプランに一本化されました。無料のBeginnerアカウントも残っていますが、外部通信・CPU時間・Webアプリの期限に制限があります。この記事では、現行の料金と無料枠の制限、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する。FastAPIなどのASGIアプリは実験的機能(beta)の扱い。
PythonAnywhereでできることと運営元
PythonAnywhereは、Python専用のPaaS(アプリの実行環境をまとめて提供するクラウドサービス)です。ブラウザからBashやPythonのコンソールを開き、ファイルを編集し、Webタブの設定だけでWebアプリを公開できます。WebサーバーやOSの保守は運営側が受け持つため、利用者は主にコード・依存関係・WSGI設定を管理し、アプリに応じてデータベースや静的ファイル、ドメインも設定します。PaaS全般の仕組みはPaaSとは?IaaS・SaaSとの違いと開発を速める仕組み・制約から採用判断まで解説で整理しています。
主な機能は、Webアプリのホスティング、決まった時刻に処理を動かす定期実行タスク(Scheduled tasks)、常駐プロセスを動かし続けるAlways-onタスク、MySQLデータベース、Jupyterノートブックです。定期実行タスクとMySQLは、US版では2026年1月15日以降、EU版では1月8日以降に作った無料アカウントでは使えません。Always-onタスクは有料プランの機能です。
運営は英国のPythonAnywhere LLPで、2022年6月にPython配布で知られるAnacondaが買収しました。買収発表の時点で利用者は40万人、ホストしているWebサイトは5万件超とされています。
公式サイトとログイン画面(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年1月の改定
公式の料金ページ(2026年9月確認)に載っているプランは次の3つです。
| 項目 | Beginner(無料) | Developer | Custom |
|---|---|---|---|
| 月額 | 0ドル | 10ドル | 10〜500ドル |
| Webアプリ数 | 1 | 1 | 最大20 |
| 独自ドメイン | 不可 | 可 | 可 |
| Webワーカー(1アプリあたり) | 1 | 3 | 選択制 |
| CPU時間(1日) | 100秒 | 5,000秒 | 最大100,000秒 |
| ストレージ | 512MB | 5GB | 選択制 |
| コンソール | 2個まで | 無制限 | 無制限 |
| 定期実行タスク | なし | 20(毎時・毎日) | 20(毎時・毎日) |
| Always-onタスク | なし | 1 | 選択制 |
| 外部通信 | 許可リストのみ | 制限なし | 制限なし |
| SSH・MySQL | なし | あり | あり |
有料プランは月払いでいつでも解約でき、30日間の返金保証が付きます。年払いにすると1年あたり2か月分が無料になり、10か月分の支払いで済みます。料金ページはDeveloperの処理能力の目安を「1日15万ヒット程度の一般的なサイト」としていますが、これはリクエストごとの処理の重さで変わる目安です。
2026年1月の料金・無料枠改定と既存契約の扱い
公式ブログの料金改定の告知によると、料金体系の見直しは2013年以来です。無料枠の変更は無料アカウントの変更告知にまとまっています。改定の中身は次のとおりです。
- 旧Hacker(月5ドル)と旧Web Developer(月12ドル)を統合し、Developer(月10ドル)を新設した。適用開始はEU版が1月8日、US版が1月15日。
- 既存の有料契約者は、解約やプラン変更をしない限り従来の料金と機能のまま使える(旧Web Developerなら月12ドルのまま)。
- 無料アカウントのサポートは、運営による直接対応からフォーラムなどのコミュニティ対応に移った。
- 新規の無料ユーザーは、定期実行タスクとMySQLがDeveloper以上の機能になった。
- 使われていない無料のWebアプリの期限が、3か月から1か月に短くなった。
定期実行タスクの公式ヘルプは、無料で使えるのを「2026-01-15(EU版は2026-01-08)より前に作られた無料アカウント」に限っています。それより前に作った無料アカウントでは、MySQLと1日1回の定期実行タスクが引き続き使えます。古い解説記事の「無料でも1日1回の定期実行ができる」という説明は、新しく作ったアカウントには当てはまりません。
無料プラン(Beginner)で詰まりやすい4つの制限
無料枠は学習や試作には足りますが、次の4点を知らずに作り込むと、公開してから動かないことに気付くことになります。
外部通信の許可リスト制限
無料アカウントのコードからの外部通信は、プロキシ proxy.server:3128 を経由し、許可リスト(allowlist)に載ったサイトにしか届きません。2026年9月時点の公開リストには6,000件を超えるドメインが並び、api.openai.com・api.anthropic.com・api.line.me・api.telegram.org・discord.com などは含まれています。リストにないサイトへつなぐと「403 Forbidden」か「[Errno 111] Connection refused」になります。後者は、ライブラリがプロキシに対応していない場合や、対応していてもプロキシ設定が必要な場合に発生します。
追加申請は受け付けていますが、対象は公式に文書化された公開APIを持つサイトに限られます。一般のWebページをスクレイピングする用途は、無料枠では基本的に成り立ちません。有料プランに上げれば制限は外れますが、その後に既存のコンソールを閉じて開き直し、Webアプリとタスクを再起動する必要があります。
CPU時間は1日100秒
CPU時間の枠は、コンソールと定期実行・Always-onタスクで実際に計算した時間に掛かり、Webアプリのリクエスト処理には掛かりません。使い切っても処理は止まらず、「tarpit」と呼ばれる低優先度の状態で動き続けます。重い集計や機械学習の学習をコンソールで回すと、数分で100秒を使い切ります。
無料Webアプリの1か月期限と延長操作
無料のWebアプリは、使われない状態が続くと1か月で期限切れになります(2025年までは3か月)。期限はWebタブから延長でき、切れた後もWebタブから再度有効にできます。デモやポートフォリオを置いたまま放置すると止まるので、月に1回はWebタブで延長するか、常に公開しておきたいならDeveloperに上げます。
ストレージ512MBとコンソール2個
ストレージは512MBで、Djangoや数値計算系のライブラリを仮想環境に入れるとすぐに圧迫されます。コンソールは同時に2個まで、SSHは使えません。独自ドメインも使えず、公開URLは ユーザー名.pythonanywhere.com に固定されます。
アカウント登録から最初のWebアプリ公開までの流れ
- 公式サイトの「Pricing & signup」を開き、無料なら「Create a Beginner account」を選ぶ。
- ユーザー名・メールアドレス・パスワードを登録する。ユーザー名はそのまま公開URLのサブドメインになる。
- ログイン後のダッシュボードから「Consoles」でBashを開き、コードを
git cloneで取り込む。1ファイル100MiB未満ならFilesページからのアップロードもでき、ZIPで上げてBashでunzipする方法もある。 - 「Web」タブで「Add a new web app」を押し、フレームワークとPythonのバージョンを選んで作成する。既存のコードを載せる場合は「Manual configuration」を選ぶ。
- WSGIファイルと仮想環境を設定し、Webタブの「Reload」で反映する。
コードの受け渡しは、公式ヘルプもGitHubなどのリポジトリ経由を最も推奨しています。手元で修正して git push し、PythonAnywhereのBashで git pull してReloadする流れにしておくと、どのバージョンが公開中かを追えます。
Flaskアプリを公開する手順
既存のFlaskアプリは、仮想環境を作ってからManual configurationでWebアプリを作ります(手順は公式ヘルプのFlaskのページに準拠)。Flaskの導入自体はpip install flaskの手順|仮想環境の作成からエラー対処までで詳しく扱っています。まずBashコンソールで仮想環境を作ります(公式ヘルプの例はPython 3.13)。
mkvirtualenv --python=/usr/bin/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() です。PythonAnywhereはWSGIファイル経由でアプリを読み込むため、読み込み時に app.run() が実行されるとアプリが落ち、502や504のエラーになります。app.run() は必ず if __name__ == '__main__': の中に置いてください。
Djangoアプリを公開する手順と静的ファイル
既存のDjangoプロジェクトも流れは同じですが、Web app作成時に「Django」ではなく「Manual configuration」を選びます。「Django」の選択肢は新規プロジェクト専用です(既存Djangoプロジェクトの公開手順)。
git clone https://github.com/myusername/myproject.git
cd myproject
mkvirtualenv --python=/usr/bin/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の違い|内蔵範囲・非同期・案件規模から選ぶ判断基準が先です。
FastAPIなどASGIアプリの対応状況
FastAPI・FastHTML・Djangoの非同期機能といったASGIアプリの公開は、2026年9月時点でも公式ヘルプが「experimental feature(beta)」と明記している機能です(ASGIサイトの公開手順)。WebタブのUIではなく、コマンドラインツール pa で作成します。事前にAccountページの「API Token」タブで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は動作が不安定なため使わないよう勧告されています。FastAPIを業務で常時公開するなら、現時点ではASGIを正式にサポートするほかのPaaSを選ぶほうが安全です。
使えるPythonのバージョンとシステムイメージ
使えるPythonのバージョンは、アカウントに割り当てられた「システムイメージ」で決まります。公式ヘルプに載っている現行の2つは次のとおりです。
| システムイメージ | 使えるPython |
|---|---|
| haggis | 2.7・3.6(パッケージ未導入)、3.7〜3.10 |
| innit | 3.7・3.8(パッケージ未導入)、3.9〜3.13 |
最新のイメージはUbuntu 22.04ベースのinnitで、Python 3.14は2026年9月時点の一覧にありません。3.13より新しい言語機能を使うコードは動かせないので、手元の開発環境もバージョンをそろえておきます。複数バージョンの切り替えは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つでも当てはまるなら、別のサービスを選ぶべきです。
- 複数のWebアプリを月10ドルのDeveloperプランだけで公開したい:上限は1個なので、この予算・プラン条件では要件を満たせない。
- FastAPIなどのASGIアプリを本番で常時公開したい:ASGIはbetaで、静的ファイルのマッピングも使えない。
- Python 3.14の機能が前提:最新のシステムイメージinnitでも選べるPythonは3.13まで。
- 無料のまま外部サイトのデータを集めたい:許可リストの外には通信できない。
コンテナやほかの言語も含めて動かしたい場合は、Railwayのデプロイ手順とrailway.ts移行|料金の実額とリージョンの制約やHerokuとは?製品構成・料金プラン・使い方と2026年の提供方針を解説と料金・制約を比べてください。
よくある質問
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ドルです。年払いにすると2か月分が無料になります。2026年1月より前から有料契約している人は、解約やプラン変更をしない限り旧料金のまま使えます。
PythonAnywhereにログインできないときは?
US版(www.pythonanywhere.com)とEU版(eu.pythonanywhere.com)のどちらで登録したかを確認し、登録したほうのサイトの「Log in」から入ってください。無料アカウントは運営に直接問い合わせできず、フォーラムなどのコミュニティでのサポートになります。
外部のAPIにつながらず403エラーが出るのはなぜですか?
無料アカウントの外部通信は、プロキシ経由で許可リストのサイトにしかつながらないためです。pythonanywhere.com/whitelist/ で接続先が載っているかを確認し、載っていなければ追加申請(公式の公開APIに限る)をするか、有料プランに上げます。
PythonAnywhereでFastAPIは動きますか?
動かせますが、ASGIアプリの公開は2026年9月時点でbeta扱いです。Webタブではなくコマンドラインツールの pa website create で作成し、静的ファイルのマッピングは使えません。常時公開の本番サービスには向きません。