服务器上的 django 应用程序:没有名为 'django.urls' 的模块



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

我现在使用Python 3.5(而不是virtualenv),但是当我重新启动sudo service apache2时,我在浏览器中收到以下错误:

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

您的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文档对此的描述:

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

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

因此,请尝试使用python 3.5重新安装mod_wsgi。这样就可以找到使用python 3.5安装的Django包。

最新更新