簡體   English   中英

導入錯誤:沒有名為 django.core.wsgi 的模塊(ubuntu)

[英]ImportError: No module named django.core.wsgi (ubuntu)

我正在按照本指南為我的 django Web 應用程序配置 apache: https : //docs.djangoproject.com/en/1.9/howto/deployment/wsgi/modwsgi/#basic-configuration

我已經使用以下方法在 ubuntu 15.10 服務器上為 apache安裝了Djangomod_wsgi-express方法)和mod_wsgi

pip install Django
pip install mod_wsgi
sudo aptitude install libapache2-mod-wsgi

接下來我將以下內容添加到: /etc/apache2/apache2.conf

WSGIScriptAlias / /home/user/mysite/mysite/wsgi.py
WSGIPythonPath /home/user/mysite:/home/user/.local/lib/python2.7/site-packages

<Directory /home/user/mysite/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>

但是當我啟動 apache 時,出現以下錯誤:

[Sat Mar 26 12:10:06.876025 2016] [wsgi:error] [pid 10622:tid 139806697674496] [client 217.40.250.17:52124]     from django.core.wsgi import get_wsgi_application
[Sat Mar 26 12:10:06.876057 2016] [wsgi:error] [pid 10622:tid 139806697674496] [client 217.40.250.17:52124] ImportError: No module named django.core.wsgi

但是該模塊確實存在於我在上面WSGIPythonPath 中提供的路徑中:

~/.local/lib/python2.7/site-packages/django/core $ cat wsgi.py
import django
from django.core.handlers.wsgi import WSGIHandler

並且:

~/.local/lib/python2.7/site-packages $ ll
total 24
drwx------  6 user user 4096 Mar 24 22:25 ./
drwx------  3 user user 4096 Mar 20 20:56 ../
drwxrwxr-x 17 user user 4096 Mar 24 22:25 django/
drwxrwxr-x  2 user user 4096 Mar 24 22:25 Django-1.9.4.dist-info/
drwxrwxr-x  5 user user 4096 Mar 20 20:59 mod_wsgi/
drwxrwxr-x  2 user user 4096 Mar 20 20:59 mod_wsgi-4.4.22.egg-info/

我還嘗試驗證 mod_wsgi 模塊所針對的 python 版本:

 /usr/lib/apache2/modules $ ldd mod_wsgi.so
    linux-vdso.so.1 =>  (0x00007ffe50f31000)
    libpython2.7.so.1.0 => /usr/lib/x86_64-linux-gnu/libpython2.7.so.1.0 (0x00007f376fbc2000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f376f9a4000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f376f5d9000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f376f3bf000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f376f1bb000)
    libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f376efb7000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f376ecaf000)
    /lib64/ld-linux-x86-64.so.2 (0x00005609838b3000)

因此,它似乎是針對 Python 2.7 構建的,而 Python 2.7 與安裝 Django 的版本相同。

那么為什么 apache 無法加載我的應用程序/django?

基於: http : //www.webforefront.com/django/setupapachewebserverwsgi.html

www-data用戶(運行 apache 文件夾的用戶)必須對包含 django 安裝的文件夾具有讀取權限。 我剛剛做了一個測試,我將 django 安裝和我的 web 應用程序復制到: /var/www/test並更改了該文件夾的權限:

sudo chgrp -R www-data /var/www/test
sudo chmod -R g+rwx /var/www/test

應用程序現在加載。

我剛剛根據本教程嘗試設置 Django、Nginx 和 WSGI 時遇到此錯誤: https : //uwsgi.readthedocs.io/en/latest/tutorials/Django_and_nginx.html

當我輸入命令時: uwsgi --http :8000 --module mysite.wsgi

我收到錯誤:

from django.core.wsgi import get_wsgi_application ImportError: No module named django.core.wsgi

這對我來說毫無意義,因為當我在 virtualenv 中進入 python shell 並導入模塊時,它運行得很好。

但是,我發現本教程對於消除錯誤很有用: https : //gist.github.com/evildmp/3094281

uwsgi --http :8000 --module project.wsgi --virtualenv /path/to/virtualenv

輸入 virtualenv 的路徑會導致 WSGI 找到它丟失的模塊。

您可以通過在命令提示符/終端中輸入$ECHO virtualenv來找到 virtualenv 的路徑。

我有同樣的問題。

原因是我通過 apt 安裝了 gunicorn,然后它在系統范圍的 Python 2 安裝中運行,而不是我的 venv。

通過卸載系統 gunicorn,然后激活我的 venv,並使用 pip install gunicorn 將 gunicorn 安裝到 venv 來修復它。 然后它立即起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM