【问题标题】:django app on server: No module named 'django.urls'服务器上的 django 应用程序:没有名为“django.urls”的模块
【发布时间】:2018-04-04 01:36:14
【问题描述】:

我的Ubuntu 服务器上有一个Django (v1.11.6) 应用程序,并且正在使用Python v2.7

我现在使用Python 3.5(不使用virtualenv),但是当我运行sudo service apache2 restart 时,我的浏览器中出现以下错误:

ImportError at /
No module named 'django.urls'
Request Method: GET
Request URL:    https://dev.ga.coach/
Django Version: 1.8.7
Exception Type: ImportError
Exception Value:    
No module named 'django.urls'

Python Executable:  /usr/bin/python3
Python Version: 3.5.2

当我运行 python3 manage.py runserver 时,我没有收到任何错误。

当我执行sudo pip freeze | grep -i 'django' 时,我得到以下信息:

Django==1.11.6
django-allauth==0.33.0
django-filter==1.0.4
django-rest-auth==0.9.1
djangorestframework==3.6.3
djangorestframework-jwt==1.11.0

【问题讨论】:

  • 再次,您在运行 django 时使用了不同的环境(从您实际使用 1.8.7 而不是 1.11.6 的事实可以看出)。你需要弄清楚你的 apache 运行在什么环境中
  • @Sayse 你是对的!如何更改 apache 的 django 版本?
  • 执行此命令:sudo pip freeze | grep -i 'django' 并将输出发布到您的 Q
  • @AbijithMg 谢谢!我做到了!
  • 这是否指向您的新 Python3.5 安装?

标签: python django apache ubuntu


【解决方案1】:

您的 apache 配置正在使用 Django 1.8.7,正如您在错误中看到的那样。而且您正在使用更新的方法来包含 url(url(r'^users/', include('users.urls'), name='users')urls.py 中,这在 Django 1.8 中不受支持。

由于您从 python 2.7 切换到 python 3.5,您的 mod_wsgi 模块很可能仍然是使用 python 2.7 编译的模块。以下是WSGI docs 对此的看法:

使用带有mod_wsgi的Python虚拟环境时,非常 重要的是它是使用相同的 Python 安装创建的 mod_wsgi 最初是为它编译的。不可能使用 Python 虚拟环境强制 mod_wsgi 使用不同的 Python 版本,甚至是不同的 Python 安装。

例如,您不能强制 mod_wsgi 使用 Python 虚拟 最初是 mod_wsgi 时使用 Python 3.5 创建的环境 为 Python 2.7 编译。这是因为 Python 库 最初编译它的 Python 安装已链接 直接进入 mod_wsgi 模块。换句话说,Python是嵌入的 在 mod_wsgi 中。使用 mod_wsgi 时,它不会运行命令 行 python 程序来运行解释器,因此为什么你不能 强制它使用不同的 Python 安装。

所以尝试使用 python 3.5 重新安装mod_wsgi。然后应该能够找到您使用 python 3.5 安装的 Django 包。

【讨论】:

  • 如何在 apache 中更改 django 版本?
  • 这是另一个问题,这里有多个答案。这取决于您是否要针对 virtualenv 运行它。如果没有,只需运行 pip install Django==1.11.6 在您的机器上安装正确版本的 Django。请参阅Django docs on running Django with Apache 了解更多信息。
  • 我没有使用虚拟环境。我已经安装了django 1.11.6。以前我使用的是1.8.7
  • 很明显,您的 apache 配置或 shell 都在 virtualenv 中运行,否则您将不会在同一台机器上拥有两个不同版本的 django。所以再检查一次。
  • 最后,我卸载了django 两个版本并安装了最新版本,它可以正常工作了!
猜你喜欢
  • 2018-07-30
  • 2019-01-10
  • 2018-09-02
  • 2018-05-22
  • 2019-08-20
  • 2019-05-27
  • 1970-01-01
  • 2017-01-24
  • 2021-11-17
相关资源
最近更新 更多