服务器上的django app:没有名为'django.urls'的模块

时间:2017-10-23 13:22:36

标签: python django apache ubuntu

我的Django (v1.11.6)服务器上有Ubuntu个应用,并且正在使用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

1 个答案:

答案 0 :(得分: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 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包。