PythonAnywhere 免费部署指南:Django/Flask/静态网站及平台对比
介绍 PythonAnywhere 免费部署方案,支持 Django、Flask、静态网站及定时脚本。包含主流免费平台对比及 Django 详细部署步骤,涵盖环境配置、虚拟环境创建、WSGI 设置及常见问题解决。免费版限制外部网络请求和 CPU 时间,适合个人学习与小型项目展示。

介绍 PythonAnywhere 免费部署方案,支持 Django、Flask、静态网站及定时脚本。包含主流免费平台对比及 Django 详细部署步骤,涵盖环境配置、虚拟环境创建、WSGI 设置及常见问题解决。免费版限制外部网络请求和 CPU 时间,适合个人学习与小型项目展示。

对于初学者,本地 Python 项目上线常面临服务器配置复杂等问题。本文介绍 PythonAnywhere 平台,支持多种项目类型,无需懂服务器即可部署。
只要是轻量级 Python 相关项目,基本都能搭,关键是不用自己折腾服务器、不用花钱。
适合复杂项目(博客、管理系统、电商雏形),免费版支持完整功能,包括数据库(SQLite)、静态文件、后台管理。
比 Django 更简单,适合写小工具、API 接口、个人博客。部署步骤比 Django 还少,不用复杂配置。
极简部署步骤(以 Flask 为例):
① 本地写好 Flask 项目(含 app.py、requirements.txt),压缩成 ZIP;
② 上传到 PythonAnywhere,解压到 /home/[你的用户名]/[你的 Flask 项目名];
③ 创建虚拟环境并安装依赖:pip install flask gunicorn;
④ Web 配置选「Manual configuration」,WSGI 文件改一行:from app import app as application;
⑤ 重启 Web 应用,访问 https://[你的用户名].pythonanywhere.com 直接用。
适合需要异步处理的场景(比如简单的实时通知),部署逻辑和 Flask 类似,免费版能满足小流量需求。
如果你只想搭个静态博客(比如用 Jekyll、Hugo、Hexo 生成的静态页),或者纯 HTML/CSS/JS 写的个人主页,PythonAnywhere 免费版也能搞定,而且不用虚拟环境、不用依赖安装。
部署步骤:
① 本地生成静态文件(比如 Hexo 执行 hexo generate 得到 public 文件夹);
② 压缩 public 文件夹为 static-site.zip,上传到 PythonAnywhere;
③ 解压到 /home/[你的用户名]/static-site;
④ Web 配置选「Manual configuration」,然后在「Web」页面找到「Static files」,添加:
/(根路径),Directory 填 /home/[你的用户名]/static-site;
⑤ 重启 Web 应用,直接访问域名就能看到静态页。如果你有个 Python 脚本想长期运行(比如每天定时爬数据、生成报表),或者想把脚本改成 API 供别人调用,免费版也能实现。
① 上传脚本到 /home/[你的用户名]/scripts/[你的脚本名].py;
② 点击 PythonAnywhere 顶部「Consoles」→「Tasks」;
③ 选择「Scheduled task」,设置执行频率(每天、每周),命令填:
workon [你的虚拟环境名] && python /home/[你的用户名]/scripts/[你的脚本名].py;
④ 保存后,脚本会按时间自动运行,还能看执行日志。
① 写个简单 FastAPI 脚本 api.py:
from fastapi import FastAPI
app = FastAPI()
@app.get("/hello")
def read_root():
return {"msg": "Hello from PythonAnywhere!"}
② 部署步骤和 Flask 一致,WSGI 文件用 from api import app as application;
③ 访问 https://[你的用户名].pythonanywhere.com/hello,就能拿到 API 响应。
市面上免费部署平台不少,但对 Python 新手来说,PythonAnywhere 是「性价比之王」——对 Python 项目友好、步骤简单、免费无时间限制。下面直接对比主流平台,优缺点一目了然:
| 对比维度 | PythonAnywhere(免费版) | Heroku(免费版) | Vercel/Netlify(免费版) | Render(免费版) | DigitalOcean App Platform(免费版) |
|---|---|---|---|---|---|
| Python 支持 | ✅ 原生支持(Django/Flask 等) | ✅ 支持,但需配置 Procfile | ❌ 弱(仅支持静态 + Serverless,Python 后端麻烦) | ✅ 支持,配置比 Heroku 简单 | ✅ 支持,但免费版仅 30 天 |
| 部署复杂度 | 低(后台可视化配置,不用写配置文件) | 中(需写 Procfile,依赖管理麻烦) | 低(但仅适合静态 / 前端) | 中(需填路径,部分配置手动) | 中(界面稍复杂,新手需学习) |
| 免费额度 | 1 个 Web 应用,无时间限制 | 5 个应用,但 2022 年后免费版取消,仅免费试用 | 无限静态应用,Serverless 有额度限制 | 1 个 Web 服务,1GB 存储,无时间限制 | 30 天免费,之后收费 |
| 数据库支持 | ✅ SQLite(免费),MySQL 需付费 | ✅ 免费 MySQL(5MB,不稳定) | ❌ 不支持自建数据库 | ✅ 免费 PostgreSQL(1GB) | ✅ 免费 PostgreSQL(1GB) |
| 外部网络请求 | ❌ 免费版不支持(无法调用第三方 API) | ✅ 支持 | ✅ 支持(Serverless) | ✅ 支持 | ✅ 支持 |
| 新手友好度 | ⭐⭐⭐⭐⭐(文档全,步骤简单) | ⭐⭐⭐(需懂 Git、Procfile) | ⭐⭐⭐⭐(前端友好,后端弱) | ⭐⭐⭐(配置项多) | ⭐⭐(适合有基础的开发者) |
前面说了这么多场景,这里重点放 Django 部署的清晰步骤,所有个人信息都用「[ ]」模糊,你直接替换成自己的内容即可。
python manage.py runserver 能正常运行);requirements.txt(本地执行 pip freeze > requirements.txt);打开本地项目的 settings.py(路径:[你的项目根目录]/[你的项目主文件夹]/settings.py),在末尾添加以下配置,区分本地和服务器环境:
import os
from pathlib import Path
# 项目根目录(原有配置,不用改)
BASE_DIR = Path(__file__).resolve().parent.parent
# ===================== 服务器环境(PythonAnywhere)=====================
if 'PYTHONANYWHERE_DOMAIN' in os.environ:
# 1. 允许访问的域名(PythonAnywhere 分配的固定域名)
ALLOWED_HOSTS = ['[你的用户名].pythonanywhere.com']
# 2. 禁用 DEBUG 模式(避免泄露敏感信息)
DEBUG = False
# 3. 静态文件配置(核心!不然样式会丢)
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
# 服务器收集静态文件的目标目录
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'), # 本地自定义静态文件目录(手动创建)
]
# 4. 媒体文件配置(用户上传的图片、文件)
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
# 媒体文件存放路径
# 5. 数据库配置(免费版仅支持 SQLite,不用额外装)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
# ===================== 本地开发环境=====================
else:
ALLOWED_HOSTS = []
DEBUG = True
# 本地数据库配置(比如 MySQL,保持你原来的就行)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '[你的本地数据库名]',
'USER': '[你的本地数据库用户名]',
'PASSWORD': '[你的本地数据库密码]',
'HOST': 'localhost',
'PORT': '3306',
}
}
避坑提醒:
STATICFILES_DIRS 里只能放「你手动存静态文件的目录」(比如 static),绝对不能包含 STATIC_ROOT(会触发 staticfiles.E002 错误);把本地 Django 项目根目录(含 manage.py、requirements.txt)压缩成 ZIP 包,命名为 [你的项目名].zip。
/home/[你的用户名]/(你的用户根目录),点击「Upload a file」,选择本地的 [你的项目名].zip;ls [你的项目名],能看到 manage.py、requirements.txt 就对了。执行解压命令(替换 [你的项目名]):
cd ~
unzip [你的项目名].zip
虚拟环境能隔离项目依赖,避免冲突,步骤超简单:
([你的虚拟环境名]),表示已自动激活;后续手动激活(关闭控制台后):
workon [你的虚拟环境名]
在 Bash 控制台执行(Python 版本选 3.8+,和本地一致):
mkvirtualenv --python=/usr/bin/python3.10 [你的虚拟环境名] # 比如:django-venv
pip list,能看到 Django 就说明安装成功。安装依赖(用 requirements.txt 自动安装):
pip install -r requirements.txt
进入项目根目录:
cd /home/[你的用户名]/[你的项目名]
Python 3.10)→ 点击「Next」。在 Web 配置页面,修改 2 个关键路径:
Virtualenv(虚拟环境路径):
/home/[你的用户名]/.virtualenvs/[你的虚拟环境名]
(注:.virtualenvs 是隐藏文件夹,在文件管理器勾选「Show hidden files」才能看到)
Source code(项目根目录):
/home/[你的用户名]/[你的项目名]
/var/www/[你的用户名]_pythonanywhere_com_wsgi.py);清空原有内容,粘贴以下代码(替换 3 处信息):
import os
import sys
# 1. 项目根目录路径(替换成你的)
project_path = '/home/[你的用户名]/[你的项目名]'
if project_path not in sys.path:
sys.path.insert(0, project_path)
# 2. Django 配置模块(替换成你的项目主文件夹名)
os.environ['DJANGO_SETTINGS_MODULE'] = '[你的项目主文件夹].settings'
# 3. 标记为服务器环境(对应 settings.py 中的判断)
os.environ['PYTHONANYWHERE_DOMAIN'] = 'True'
# 加载 Django WSGI 应用
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
/home/[你的用户名]/[你的项目名];static(本地静态文件)和 media(用户上传文件)文件夹。在 Web 配置页面找到「Static files」,点击「Add a new static file」,添加 2 条配置:
| URL 路径 | 服务器目录(Directory) | 作用 |
|---|---|---|
/static/ | /home/[你的用户名]/[你的项目名]/staticfiles | 服务器静态文件目录 |
/media/ | /home/[你的用户名]/[你的项目名]/media | 用户上传文件目录 |
添加后点击「Save」。
收集静态文件(把 static 里的文件复制到 staticfiles):
python manage.py collectstatic
按 y 确认,看到「X static files copied」就完成了。
创建管理员账号(登录 Django 后台 /admin 用):
python manage.py createsuperuser
按提示输入:用户名(比如 admin)、邮箱(随便填)、密码(输入时不显示,输完回车),确认后按 y。
执行数据库迁移(创建 SQLite 表):
python manage.py migrate
看到 Applying ... OK 就成功了。
回到 Bash 控制台,确保虚拟环境已激活,进入项目根目录:
workon [你的虚拟环境名]
cd /home/[你的用户名]/[你的项目名]
https://[你的用户名].pythonanywhere.com,能看到本地项目的首页就说明部署成功!https://[你的用户名].pythonanywhere.com/admin,用刚才创建的管理员账号登录。pip install xxx;
显示「DatabaseError」,就是迁移没执行,重新跑 python manage.py migrate。collectstatic,或者 STATIC_ROOT 配置错了;python manage.py collectstatic,检查 STATIC_ROOT 路径是否和 Web 静态配置一致;/static/,目录是 STATIC_ROOT 路径(/home/[你的用户名]/[你的项目名]/staticfiles)。settings.py 没切换到 SQLite;settings.py 并重启应用。views.py、settings.py),上传替换服务器对应文件,重启应用即可。PythonAnywhere 对 Python 新手来说,是「免费部署天花板」—— 不用学 Linux、不用买服务器、不用懂 Git,全程可视化操作 + 少量命令,就能把 Django/Flask/ 静态网站上线。虽然免费版有一些限制(无网络请求、CPU 有限),但对个人学习、小项目展示完全够用。
如果你的需求是「快速把 Python 项目上线看看效果」,选 PythonAnywhere 准没错;如果需要调用第三方 API 或更大流量,再考虑升级付费版或换 Render、DigitalOcean 等平台。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online