我的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
答案 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包。