杰瑞科技汇

python runserver报错

请先找到你终端里具体的错误信息,然后对照下面的内容进行排查。

python runserver报错-图1
(图片来源网络,侵删)

第一步:定位错误信息

在你运行命令的终端窗口里,错误信息通常会在 或者 之后,它会告诉你哪里出了问题。

  • ModuleNotFoundError: No module named 'django'
  • OSError: [WinError 10013] 以一种访问权限不允许的方式做了一个访问套接字的尝试
  • django.core.exceptions.ImproperlyConfigured: settings.DATABASES is improperly configured.
  • ValueError: Missing 'SECRET_KEY' in settings.

请将你的完整错误信息贴出来,这能极大地帮助我(或任何人)帮你定位问题。


第二步:按常见错误原因排查

以下是导致 python runserver 报错的几个最主要原因:

Django 没有安装或版本不匹配

这是最最常见的问题,特别是对于初学者。

python runserver报错-图2
(图片来源网络,侵删)
  • 错误信息示例:

    • ModuleNotFoundError: No module named 'django'
    • ImportError: No module named django
  • 问题分析: 你的 Python 环境中没有安装 Django 框架,或者你安装了,但 Python 解释器找不到它,这通常是因为你在一个没有安装 Django 的虚拟环境中运行了命令。

  • 解决方案:

    1. 检查是否安装了 Django:

      pip list
      # 或者
      pip show django

      如果看不到 django,或者 VersionNone,说明没有正确安装。

    2. 安装 Django:

      pip install django
    3. 强烈推荐使用虚拟环境: 为了避免项目之间的库冲突,最佳实践是为每个项目创建一个独立的虚拟环境。

      # 1. 创建虚拟环境 (venv 是环境名,可以自定义)
      python -m venv venv
      # 2. 激活虚拟环境
      # Windows:
      .\venv\Scripts\activate
      # macOS / Linux:
      source venv/bin/activate
      # 3. 激活后,你的命令行提示符前会出现 (venv)
      # 现在再安装 Django
      pip install django
      # 4. 在虚拟环境中运行你的项目
      python manage.py runserver

端口被占用

runserver 默认使用 8000 端口,如果这个端口被其他程序(比如另一个 runserver 实例、Skype、或其他应用)占用了,服务器就会启动失败。

  • 错误信息示例:

    • OSError: [WinError 10013] 以一种访问权限不允许的方式做了一个访问套接字的尝试
    • OSError: [Errno 48] Address already in use
    • Error: That port is already in use.
  • 问题分析: 8000 端口“占线”了。

  • 解决方案:

    1. 更换一个端口:runserver 命令后面加上新的端口号,8001

      python manage.py runserver 8001
    2. 查看并占用端口 (高级): 如果你想继续使用 8000 端口,可以先找到占用它的进程并关闭它。

      • Windows:
        netstat -ano | findstr :8000
        # 找到最后一列的 PID (进程 ID)
        # 然后使用任务管理器结束该进程,或在命令行中:
        taskkill /F /PID <PID>
      • macOS / Linux:
        lsof -i :8000
        # 找到 PID
        # 然后杀死进程
        kill -9 <PID>

项目配置错误 (settings.py)

Django 项目的核心配置在 settings.py 文件中,这里的错误通常会导致服务器无法正常启动。

  • 错误信息示例:

    • django.core.exceptions.ImproperlyConfigured: settings.DATABASES is improperly configured.
    • ValueError: Missing 'SECRET_KEY' in settings.
    • django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.
  • 问题分析:

    • 数据库配置错误: DATABASES 设置可能缺少某些必需的键,或者格式不正确。
    • 密钥缺失: SECRET_KEY 是 Django 安全所必需的,它不能为空,如果你在 .gitignore 中忽略了它,或者从未设置过,就会报错。
    • 应用未注册: INSTALLED_APPS 列表中列出了一个不存在的应用。
  • 解决方案:

    1. 检查 SECRET_KEY: 打开 your_project/settings.py 文件,确保 SECRET_KEY 有一个长而复杂的值,如果你没有,可以在线生成一个并替换掉空的值。

      # settings.py
      SECRET_KEY = 'django-insecure-@#your-super-secret-key-here$%^&*'
    2. 检查 DATABASES: 确保 default 数据库配置是正确的,对于初学者,通常是 sqlite3,配置如下:

      # settings.py
      DATABASES = {
          'default': {
              'ENGINE': 'django.db.backends.sqlite3',
              'NAME': BASE_DIR / 'db.sqlite3', # 确保这个路径正确
          }
      }
    3. 检查 INSTALLED_APPS: 确保你创建的所有新应用都已添加到 INSTALLED_APPS 列表中。

      # settings.py
      INSTALLED_APPS = [
          'django.contrib.admin',
          'django.contrib.auth',
          'django.contrib.contenttypes',
          'django.contrib.sessions',
          'django.contrib.messages',
          'django.contrib.staticfiles',
          # 添加你的应用
          'myapp', # <-- 确保在这里
      ]

代码语法错误或逻辑错误

在你项目的某个 Python 文件中(views.py, models.py, urls.py)存在语法错误或运行时错误。

  • 错误信息示例:

    • File "myapp/views.py", line 10 print("Hello) ^ SyntaxError: EOL while scanning string literal
    • NameError: name 'undefined_variable' is not defined
    • AttributeError: 'str' object has no attribute 'my_method'
  • 问题分析: Python 解释器在执行 runserver 命令时,需要加载你的所有代码,如果遇到无法理解的代码(语法错误)或引用了不存在的变量/方法(运行时错误),它就会停止并报错。

  • 解决方案:

    1. 仔细阅读错误堆栈跟踪: 错误信息会精确地告诉你哪个文件哪一行出了问题。
    2. 修复语法错误: 检查提示的行,看看是否有缺少的引号、括号、冒号等。
    3. 修复逻辑错误: 检查变量名是否拼写正确,方法或属性是否存在。

环境变量问题

如果你的项目依赖某些环境变量(例如数据库密码、API密钥),而这些变量没有被设置,runserver 也会失败。

  • 错误信息示例:

    • KeyError: 'DATABASE_PASSWORD'
    • django.core.exceptions.ImproperlyConfigured: Requested setting DATABASE_PASSWORD, but settings are not configured.
  • 问题分析: 你的代码试图从一个环境变量中读取配置,但该变量不存在。

  • 解决方案:

    1. 在终端中临时设置 (仅当前会话有效):

      # Windows (CMD)
      set DATABASE_PASSWORD="your_password"
      # Windows (PowerShell)
      $env:DATABASE_PASSWORD="your_password"
      # macOS / Linux
      export DATABASE_PASSWORD="your_password"
      # 设置好后,再运行 runserver
      python manage.py runserver
    2. 使用 .env 文件 (推荐): 安装 python-decoupledjango-environ 库,然后在项目根目录创建一个 .env 文件,将变量写进去,并在 settings.py 中读取它,这样更安全、更方便。


总结与排查步骤

当你遇到 python runserver 报错时,请按以下顺序进行排查:

  1. 复制完整错误信息: 这是最重要的第一步。
  2. 检查是否在虚拟环境中: 确保你已经激活了项目的虚拟环境,pip list 中能看到 django
  3. 检查端口: 尝试更换一个端口运行,python manage.py runserver 8001
  4. 检查 settings.py 重点检查 SECRET_KEYDATABASES 配置是否正确。
  5. 检查代码语法: 仔细阅读错误堆栈,定位到具体的文件和行号,修复语法或逻辑错误。
  6. 检查环境变量: 如果错误提示缺少某个变量,确保它已正确设置。

如果以上步骤都无法解决你的问题,请将你的完整错误信息、操作系统、Python 版本、Django 版本以及你尝试过的步骤发出来,我会继续为你分析。

分享:
扫描分享到社交APP
上一篇
下一篇