前言
作为刚入门的开发者,你是不是也遇到过这些痛点?想把本地写好的 Python 项目上线,却被服务器配置、Linux 命令搞得头大;试了几个平台,要么免费版限制多到没法用,要么步骤复杂到半途放弃......
今天给大家推荐一个 新手友好、完全免费、无需懂服务器 的神器 ------PythonAnywhere。它不仅能轻松部署 Django,还支持 Flask、静态网站等多种项目,全程鼠标点一点 + 少量命令就能搞定。本文会模糊所有个人敏感信息,带你从 0 到 1 掌握部署,还会对比市面上主流免费平台,帮你选对最适合的工具。
一、先搞懂:PythonAnywhere 到底能部署啥?(免费版够用)
很多人以为 PythonAnywhere 只能部署 Django,其实它的免费版能力远超想象!只要是轻量级 Python 相关项目,基本都能搭,关键是 不用自己折腾服务器、不用花钱。
1. 核心场景 1:Python Web 框架(最常用)
✅ Django(本文重点)
适合复杂项目(博客、管理系统、电商雏形),免费版支持完整功能,包括数据库(SQLite)、静态文件、后台管理。
✅ Flask/FastAPI(轻量级首选)
比 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 直接用。
✅ Tornado(异步框架)
适合需要异步处理的场景(比如简单的实时通知),部署逻辑和 Flask 类似,免费版能满足小流量需求。
2. 核心场景 2:静态网站(零配置,5 分钟上线)
如果你只想搭个静态博客(比如用 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」,添加:
- URL 填
/(根路径),Directory 填/home/[你的用户名]/static-site;
⑤ 重启 Web 应用,直接访问域名就能看到静态页。
3. 核心场景 3:Python 脚本服务(定时任务、轻量 API)
如果你有个 Python 脚本想长期运行(比如每天定时爬数据、生成报表),或者想把脚本改成 API 供别人调用,免费版也能实现。
例:定时运行脚本
① 上传脚本到 /home/[你的用户名]/scripts/[你的脚本名].py;
② 点击 PythonAnywhere 顶部「Consoles」→「Tasks」;
③ 选择「Scheduled task」,设置执行频率(每天、每周),命令填:
workon [你的虚拟环境名] && python /home/[你的用户名]/scripts/[你的脚本名].py;
④ 保存后,脚本会按时间自动运行,还能看执行日志。
例:把脚本改成 API(用 FastAPI)
① 写个简单 FastAPI 脚本 api.py:
python
运行
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 响应。
4. 其他支持场景(免费版够用)
- 轻量级数据库:免费版支持 SQLite(文件型,不用配置),如果需要 MySQL/PostgreSQL,升级付费版后能直接在后台创建;
- 简单的后端服务:比如配合前端 Vue/React 做后端接口,免费版能扛小流量(个人测试、小型 Demo 完全够)。
二、为什么选 PythonAnywhere?(主流免费平台对比)
市面上免费部署平台不少,但对 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) | ⭐⭐⭐⭐(前端友好,后端弱) | ⭐⭐⭐(配置项多) | ⭐⭐(适合有基础的开发者) |
结论:谁该选 PythonAnywhere?
- ✅ 纯 Python 新手:不想折腾服务器,只想把 Django/Flask 项目上线看看效果;
- ✅ 静态网站需求者:5 分钟搞定个人主页、博客,不用学复杂工具;
- ✅ 脚本运行需求者:需要长期运行简单 Python 脚本,定时任务功能够用;
- ❌ 不适合:需要调用第三方 API(免费版无网络)、项目流量大(免费版 CPU 有限)、非 Python 项目(比如 Node.js、Java)。
三、PythonAnywhere 免费部署 Django 实操(敏感信息模糊版)
前面说了这么多场景,这里重点放 Django 部署的清晰步骤,所有个人信息都用「[ ]」模糊,你直接替换成自己的内容即可。
1. 准备工作
- 本地 Django 项目(确保
python manage.py runserver能正常运行); - 生成
requirements.txt(本地执行pip freeze > requirements.txt); - 浏览器(访问 PythonAnywhere)。
2. Step 1:注册 PythonAnywhere 免费账号
- 访问官网:PythonAnywhere,点击右上角「Sign Up」;
- 选「Beginner」(免费版),填写信息:
- 用户名:[你的用户名](记牢!后续所有路径都要用);
- 邮箱:[你的常用邮箱](需验证);
- 密码:[你的密码](8 位以上,含字母 + 数字);
- 验证邮箱:打开邮件里的链接,激活账号后登录。
3. Step 2:本地项目配置修改(避坑关键)
打开本地项目的 settings.py(路径:[你的项目根目录]/[你的项目主文件夹]/settings.py),在末尾添加以下配置,区分本地和服务器环境:
python
运行
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错误);- 免费版不支持 MySQL,别忘把服务器环境的数据库改成 SQLite。
4. Step 3:上传项目到 PythonAnywhere(无 Git 方式)
① 本地压缩项目
把本地 Django 项目根目录(含 manage.py、requirements.txt)压缩成 ZIP 包,命名为 [你的项目名].zip。
② 服务器上传 + 解压
-
登录 PythonAnywhere,点击顶部「Files」(文件管理器);
-
左侧目录默认在
/home/[你的用户名]/(你的用户根目录),点击「Upload a file」,选择本地的[你的项目名].zip; -
上传完成后,打开「Bash 控制台」(顶部「Consoles」→「Bash」);
-
执行解压命令(替换
[你的项目名]):bash
cd ~ # 进入用户根目录 unzip [你的项目名].zip # 解压后生成 [你的项目名] 文件夹 -
验证:执行
ls [你的项目名],能看到manage.py、requirements.txt就对了。
5. Step 4:创建并激活虚拟环境
虚拟环境能隔离项目依赖,避免冲突,步骤超简单:
-
在 Bash 控制台执行(Python 版本选 3.8+,和本地一致): bash
mkvirtualenv --python=/usr/bin/python3.10 [你的虚拟环境名] # 比如:django-venv -
激活验证:命令行前缀会出现
([你的虚拟环境名]),表示已自动激活; -
后续手动激活(关闭控制台后): bash
workon [你的虚拟环境名]
6. Step 5:安装项目依赖
-
进入项目根目录: bash
cd /home/[你的用户名]/[你的项目名] -
安装依赖(用
requirements.txt自动安装):bash
pip install -r requirements.txt -
验证:执行
pip list,能看到Django就说明安装成功。
7. Step 6:配置 Web 应用(核心步骤)
① 新建 Web 应用
- 点击顶部「Web」→ 绿色按钮「Add a new web app」;
- 选「Manual configuration」(手动配置,避免模板冲突)→ 点击「Next」;
- 选 Python 版本(和虚拟环境一致,比如
Python 3.10)→ 点击「Next」。
② 配置项目路径和虚拟环境
在 Web 配置页面,修改 2 个关键路径:
-
Source code (项目根目录):
plaintext
/home/[你的用户名]/[你的项目名] -
Virtualenv (虚拟环境路径):
plaintext
/home/[你的用户名]/.virtualenvs/[你的虚拟环境名](注:
.virtualenvs是隐藏文件夹,在文件管理器勾选「Show hidden files」才能看到)
③ 修改 WSGI 文件(服务器和 Django 通信的桥梁)
-
在 Web 配置页面找到「WSGI configuration file」,点击蓝色的文件路径(比如
/var/www/[你的用户名]_pythonanywhere_com_wsgi.py); -
清空原有内容,粘贴以下代码(替换 3 处信息): python
运行
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() -
点击右上角「Save」保存。
8. Step 7:配置静态文件和媒体文件
① 创建文件夹(若不存在)
- 在文件管理器进入项目根目录
/home/[你的用户名]/[你的项目名]; - 点击「New directory」,分别创建
static(本地静态文件)和media(用户上传文件)文件夹。
② 配置静态文件路径
在 Web 配置页面找到「Static files」,点击「Add a new static file」,添加 2 条配置:
| URL 路径 | 服务器目录(Directory) | 作用 |
|---|---|---|
/static/ |
/home/[你的用户名]/[你的项目名]/staticfiles |
服务器静态文件目录 |
/media/ |
/home/[你的用户名]/[你的项目名]/media |
用户上传文件目录 |
添加后点击「Save」。
9. Step 8:数据库迁移 + 创建管理员账号
-
回到 Bash 控制台,确保虚拟环境已激活,进入项目根目录: bash
workon [你的虚拟环境名] cd /home/[你的用户名]/[你的项目名] -
执行数据库迁移(创建 SQLite 表): bash
python manage.py migrate看到
Applying ... OK就成功了。 -
创建管理员账号(登录 Django 后台
/admin用):bash
python manage.py createsuperuser按提示输入:用户名(比如
admin)、邮箱(随便填)、密码(输入时不显示,输完回车),确认后按y。 -
收集静态文件(把
static里的文件复制到staticfiles):bash
python manage.py collectstatic按
y确认,看到「X static files copied」就完成了。
10. Step 9:重启 Web 应用,访问项目!
- 回到 Web 配置页面,点击绿色的「Reload [你的用户名].pythonanywhere.com」按钮;
- 等待 1-2 秒,提示「Web app reloaded successfully」就重启成功了;
- 访问项目:在浏览器输入
https://[你的用户名].pythonanywhere.com,能看到本地项目的首页就说明部署成功! - 访问后台:输入
https://[你的用户名].pythonanywhere.com/admin,用刚才创建的管理员账号登录。
四、免费版常见问题 + 解决方案(新手必看)
1. 问题 1:访问项目显示「500 Internal Server Error」
- 原因:配置错误(WSGI 文件、数据库、静态文件都可能);
- 解决:查看错误日志 ------Web 配置页面找到「Error log」,点击查看最新错误。
比如日志显示「ModuleNotFoundError: No module named 'xxx'」,就是依赖没装,重新执行pip install xxx;
显示「DatabaseError」,就是迁移没执行,重新跑python manage.py migrate。
2. 问题 2:静态文件不显示,页面没样式
- 原因 1:没执行
collectstatic,或者STATIC_ROOT配置错了; - 解决:重新执行
python manage.py collectstatic,检查STATIC_ROOT路径是否和 Web 静态配置一致; - 原因 2:Web 静态文件的 URL 和目录不匹配;
- 解决:确保「Static files」里的 URL 是
/static/,目录是STATIC_ROOT路径(/home/[你的用户名]/[你的项目名]/staticfiles)。
3. 问题 3:数据库报错「Can't connect to MySQL」
- 原因:免费版不支持 MySQL,
settings.py没切换到 SQLite; - 解决:回到 Step 2,确认服务器环境的数据库配置是 SQLite,重新上传
settings.py并重启应用。
4. 问题 4:免费版提示「CPU 时间不足」
- 原因:项目流量过大,或脚本执行时间太长;
- 解决:关闭不必要的后台进程,简化脚本逻辑,或者等第二天(免费版每天重置 CPU 额度)。
五、PythonAnywhere 免费版小技巧(提升体验)
- 延期技巧:免费账户每 3 个月会过期,到期前登录,在 Web 页面会有「Extend」按钮,点击就能续期,无限续下去没问题;
- 定时任务:想让脚本每天跑一次?用「Tasks」功能(顶部「Consoles」→「Tasks」),设置执行时间和命令就行;
- 文件管理 :后续修改本地代码,不用重新传整个项目 ------ 只压缩修改的文件(比如
views.py、settings.py),上传替换服务器对应文件,重启应用即可。
六、总结
PythonAnywhere 对 Python 新手来说,是「免费部署天花板」------ 不用学 Linux、不用买服务器、不用懂 Git,全程可视化操作 + 少量命令,就能把 Django/Flask/ 静态网站上线。虽然免费版有一些限制(无网络请求、CPU 有限),但对个人学习、小项目展示完全够用。
如果你的需求是「快速把 Python 项目上线看看效果」,选 PythonAnywhere 准没错;如果需要调用第三方 API 或更大流量,再考虑升级付费版或换 Render、DigitalOcean 等平台。
赶紧动手试试吧,把你的项目从本地搬到网上,成就感满满!