零门槛!PythonAnywhere 免费部署全指南:不止 Django,这些项目都能搭(附主流平台对比)

前言

作为刚入门的开发者,你是不是也遇到过这些痛点?想把本地写好的 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.pyrequirements.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 免费账号

  1. 访问官网:PythonAnywhere,点击右上角「Sign Up」;
  2. 选「Beginner」(免费版),填写信息:
    • 用户名:[你的用户名](记牢!后续所有路径都要用);
    • 邮箱:[你的常用邮箱](需验证);
    • 密码:[你的密码](8 位以上,含字母 + 数字);
  3. 验证邮箱:打开邮件里的链接,激活账号后登录。

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.pyrequirements.txt)压缩成 ZIP 包,命名为 [你的项目名].zip

② 服务器上传 + 解压
  1. 登录 PythonAnywhere,点击顶部「Files」(文件管理器);

  2. 左侧目录默认在 /home/[你的用户名]/(你的用户根目录),点击「Upload a file」,选择本地的 [你的项目名].zip

  3. 上传完成后,打开「Bash 控制台」(顶部「Consoles」→「Bash」);

  4. 执行解压命令(替换 [你的项目名]):

    bash

    复制代码
    cd ~  # 进入用户根目录
    unzip [你的项目名].zip  # 解压后生成 [你的项目名] 文件夹
  5. 验证:执行 ls [你的项目名],能看到 manage.pyrequirements.txt 就对了。

5. Step 4:创建并激活虚拟环境

虚拟环境能隔离项目依赖,避免冲突,步骤超简单:

  1. 在 Bash 控制台执行(Python 版本选 3.8+,和本地一致): bash

    复制代码
    mkvirtualenv --python=/usr/bin/python3.10 [你的虚拟环境名]  # 比如:django-venv
  2. 激活验证:命令行前缀会出现 ([你的虚拟环境名]),表示已自动激活;

  3. 后续手动激活(关闭控制台后): bash

    复制代码
    workon [你的虚拟环境名]

6. Step 5:安装项目依赖

  1. 进入项目根目录: bash

    复制代码
    cd /home/[你的用户名]/[你的项目名]
  2. 安装依赖(用 requirements.txt 自动安装):

    bash

    复制代码
    pip install -r requirements.txt
  3. 验证:执行 pip list,能看到 Django 就说明安装成功。

7. Step 6:配置 Web 应用(核心步骤)

① 新建 Web 应用
  1. 点击顶部「Web」→ 绿色按钮「Add a new web app」;
  2. 选「Manual configuration」(手动配置,避免模板冲突)→ 点击「Next」;
  3. 选 Python 版本(和虚拟环境一致,比如 Python 3.10)→ 点击「Next」。
② 配置项目路径和虚拟环境

在 Web 配置页面,修改 2 个关键路径:

  1. Source code (项目根目录):

    plaintext

    复制代码
    /home/[你的用户名]/[你的项目名]
  2. Virtualenv (虚拟环境路径):

    plaintext

    复制代码
    /home/[你的用户名]/.virtualenvs/[你的虚拟环境名]

    (注:.virtualenvs 是隐藏文件夹,在文件管理器勾选「Show hidden files」才能看到)

③ 修改 WSGI 文件(服务器和 Django 通信的桥梁)
  1. 在 Web 配置页面找到「WSGI configuration file」,点击蓝色的文件路径(比如 /var/www/[你的用户名]_pythonanywhere_com_wsgi.py);

  2. 清空原有内容,粘贴以下代码(替换 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()
  3. 点击右上角「Save」保存。

8. Step 7:配置静态文件和媒体文件

① 创建文件夹(若不存在)
  1. 在文件管理器进入项目根目录 /home/[你的用户名]/[你的项目名]
  2. 点击「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:数据库迁移 + 创建管理员账号

  1. 回到 Bash 控制台,确保虚拟环境已激活,进入项目根目录: bash

    复制代码
    workon [你的虚拟环境名]
    cd /home/[你的用户名]/[你的项目名]
  2. 执行数据库迁移(创建 SQLite 表): bash

    复制代码
    python manage.py migrate

    看到 Applying ... OK 就成功了。

  3. 创建管理员账号(登录 Django 后台 /admin 用):

    bash

    复制代码
    python manage.py createsuperuser

    按提示输入:用户名(比如 admin)、邮箱(随便填)、密码(输入时不显示,输完回车),确认后按 y

  4. 收集静态文件(把 static 里的文件复制到 staticfiles):

    bash

    复制代码
    python manage.py collectstatic

    y 确认,看到「X static files copied」就完成了。

10. Step 9:重启 Web 应用,访问项目!

  1. 回到 Web 配置页面,点击绿色的「Reload [你的用户名].pythonanywhere.com」按钮;
  2. 等待 1-2 秒,提示「Web app reloaded successfully」就重启成功了;
  3. 访问项目:在浏览器输入 https://[你的用户名].pythonanywhere.com,能看到本地项目的首页就说明部署成功!
  4. 访问后台:输入 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 免费版小技巧(提升体验)

  1. 延期技巧:免费账户每 3 个月会过期,到期前登录,在 Web 页面会有「Extend」按钮,点击就能续期,无限续下去没问题;
  2. 定时任务:想让脚本每天跑一次?用「Tasks」功能(顶部「Consoles」→「Tasks」),设置执行时间和命令就行;
  3. 文件管理 :后续修改本地代码,不用重新传整个项目 ------ 只压缩修改的文件(比如 views.pysettings.py),上传替换服务器对应文件,重启应用即可。

六、总结

PythonAnywhere 对 Python 新手来说,是「免费部署天花板」------ 不用学 Linux、不用买服务器、不用懂 Git,全程可视化操作 + 少量命令,就能把 Django/Flask/ 静态网站上线。虽然免费版有一些限制(无网络请求、CPU 有限),但对个人学习、小项目展示完全够用。

如果你的需求是「快速把 Python 项目上线看看效果」,选 PythonAnywhere 准没错;如果需要调用第三方 API 或更大流量,再考虑升级付费版或换 Render、DigitalOcean 等平台。

赶紧动手试试吧,把你的项目从本地搬到网上,成就感满满!

相关推荐
计算机专业码农一枚1 小时前
Python-flask框架基于推荐算法的在线课程推荐系统设计与实现-Pycharm django
python·flask·推荐算法
雨落Re2 小时前
从设计到开发,过年我用十天使用AI搭建了一个完整的博客系统
前端·后端
Sylvia33.2 小时前
火星数据:解构斯诺克每一杆进攻背后的数字语言
java·前端·python·数据挖掘·数据分析
大鹏19882 小时前
告别冗余类型声明:C# 14 带修饰符的简单 Lambda 参数详解
后端
糖猫猫_2 小时前
Kite:两种方式实现动态表名
java·后端
孤独风雪2 小时前
Spring Stomp 消息使用
java·后端
间彧2 小时前
ShardingSphere详解与SpringBoot实战分库分表指南
后端
掘金一周2 小时前
2026 春晚魔术大揭秘:作为程序员,分分钟复刻一个 | 掘金一周 2.26
前端·人工智能·后端
Rabbit_QL2 小时前
【BPE实战】从零实现 BPE 分词器:训练、编码与解码
python·算法·nlp