500 内部服务器错误 mod_wsgi apache "导入错误:没有名为'django' 的模块



运行 django 和 apache2/mod_wsgi 的问题。我不断收到 500 内部服务器错误。我已经尝试了许多修复组合,但没有一个有效。任何帮助将不胜感激。这是我的设置:

Ubuntu 16.04
django 1.10.5
apache 2.4.18
python 3.4(virtualenv)
libapache2-mod-wsgi-py3 

我的文件夹结构是:

/home/user/site/venv (virtualenv folder)
    bin
    include
    lib
/home/user/site/mysite
    |- manage.py
    static
    mysite
        |__init__.py
        |settings.py
        |urls.py
        |wsgi.py

网站

<VirtualHost *:80>
WSGIDaemonProcess myproject python-home=/home/user/site/venv python-path=/home/user/site/mysite
WSGIProcessGroup myproject
WSGIScriptAlias / /home/user/site/mysite/mysite/wsgi.py
        Alias /static /home/user/site/mysite/static
        <Directory /home/user/site/mysite/static>
            Require all granted
        </Directory>
        <Directory /home/user/site/mysite/mysite>
            <Files wsgi.py>
                Require all granted
            </Files>
        </Directory>

</VirtualHost>

wsgi.py

import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
application = get_wsgi_application()

apache2/error.log

[mpm_event:notice] [pid 8908:tid 140560009164672] AH00491: caught SIGTERM, shutting down
[wsgi:warn] [pid 9047:tid 139761898837888] mod_wsgi: Compiled for Python/3.5.1+.
[wsgi:warn] [pid 9047:tid 139761898837888] mod_wsgi: Runtime using Python/3.5.2.
[mpm_event:notice] [pid 9047:tid 139761898837888] AH00489: Apache/2.4.18 (Ubuntu) mod_wsgi/4.3.0 Python/3.5.2 configured -- resuming normal operations
[core:notice] [pid 9047:tid 139761898837888] AH00094: Command line: '/usr/sbin/apache2'
[wsgi:error] [pid 9049:tid 139761776183040] mod_wsgi (pid=9049): Target WSGI script '/home/user/site/mysite/mysite/wsgi.py' cannot be loaded as Python module.
[wsgi:error] [pid 9049:tid 139761776183040] mod_wsgi (pid=9049): Exception occurred processing WSGI script '/home/user/site/mysite/mysite/wsgi.py'.
[wsgi:error] [pid 9049:tid 139761776183040] Traceback (most recent call last):
[wsgi:error] [pid 9049:tid 139761776183040]   File "/home/user/site/mysite/mysite/wsgi.py", line 12, in <module>
[wsgi:error] [pid 9049:tid 139761776183040]     from django.core.wsgi import get_wsgi_application
[wsgi:error] [pid 9049:tid 139761776183040] ImportError: No module named 'django'

我已授予以下文件夹的权限:

sudo chown -R www-data:www-data /home/user/site/venv
sudo chown -R www-data:www-data /home/user/site/mysite

任何帮助或批评,我希望提前感谢您。

所以在一番激烈的头撞墙之后。事实证明,我需要为我正在使用的python版本编译自己的mod_wsgi。我正在使用 ubuntu libapache2-mod-wsgi-py3 的标准存储库,该存储库被编译为与 python3.5.2 一起使用,如我的错误.log所示。

我去了这里获取最新版本:mod_wsgi_releases

安装mod_wsgi时,请务必使用以下命令

.configure --with-python=/your/virtualenv/bin/python(your python_verion here)

尝试使用这样的东西。只是为了确认,myproject是用户组吗?

WSGISocketPrefix /var/run/wsgi
WSGIPythonPath /home/user/site/venv/lib/python2.7/site-packages
WSGIDaemonProcess ec2-user processes=1
WSGIProcessGroup ec2-user
WSGIScriptAlias / /home/user/site/mysite/mysite/wsgi.py
mod_wsgi是

导致此错误的原因,因为 C 代码中的 mod_wsgi 模块链接到 Python 库。因此,编译它的 Python 版本嵌入在模块中。它不只是执行python程序。这意味着它必须针对您要使用的 Python 版本进行编译。您不能通过虚拟环境强制它使用不同的 Python 版本 [source]。

因此,您需要卸载mod_wsgi模块(可能是操作系统打包的模块(并从源代码自行安装mod_wsgi,并根据要使用的 Python 版本编译它。

请按照以下步骤修复错误:

  1. 卸载mod_wsgi [源]:
sudo rm /usr/lib/apache2/modules/mod_wsgi.so
  1. 定制Python并mod_wsgi我们自己[来源]:
## A.requirements:
sudo apt update
sudo apt install build-essential checkinstall
sudo apt install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev
sudo apt install libffi-dev
## B.build mod_wsgi:
apt install apache2 apache2-dev
wget https://github.com/GrahamDumpleton/mod_wsgi/archive/4.7.1.tar.gz
tar xvfz 4.7.1.tar.gz
cd mod_wsgi-4.7.1
./configure --with-python=[your python path]
## for example: ./configure --with-python=/usr/bin/python3.7
sudo make
sudo make install

您可以使用which python3.7来查找 Python 文件的路径

  1. 重新加载 Apach2:
sudo systemctl reload apache2
尝试在

虚拟环境中which django-admin。如果这个位置与你想要它使用的位置不同,请在你的虚拟环境中安装 django。或尝试在你的虚拟环境中pip freeze > requirements.txt,看看Django真的在那里。

遇到同样的问题,我通过卸载 gunicorn 并在通过项目中的虚拟环境登录时重新安装它来修复它

相关内容

  • 没有找到相关文章

最新更新