首页 > 解决方案 > Apache Django 错误 - 从 lib64 加载模块但预期从不同目录加载

问题描述

我已经配置了 apache、python 虚拟环境和 Django。我正在尝试在 apache 中托管 Django。我通过运行命令“./manage.py runserver 192.168.0.107”验证了 Django 工作正常。但这在 Apache 中不起作用,在 apache 中,如果我加载页面,我会收到 500 个内部服务器错误。

在 Apache HTTP 日志中,我收到以下错误消息。

[Mon Nov 08 18:21:51.248632 2021] [wsgi:error] [pid 1812] [remote 192.168.0.105:50224] django.core.exceptions.ImproperlyConfigured: SQLite 3.9.0 or later is required (found 3.7.17)

在 Python 中,我验证了 SQLite 版本,它显示的是 3.36.0 而不是 3.7.17,请参阅下面的详细信息。

Python 3.7.12 (default, Nov  8 2021, 09:02:58)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
from sqlite3 import dbapi2 as Database>>>
>>>
from sqlite3 import dbapi2 as Database
>>> Database.sqlite_version_info
(3, 36, 0)

我试图找到 apache 实际使用的版本,我使用了 grep 命令,发现它使用的是 lib64 中的 SQLite 3.7.17

[root@localhost ~]# grep -rnw /usr -e '3.7.17'

/usr/lib64/pkgconfig/sqlite3.pc:10:Version: 3.7.17

/usr/include/sqlite3.h:110:#define SQLITE_VERSION        "3.7.17"


要求 我需要清理或卸载包 3.7.17 并告诉 Apache 或 WSGI 使用 3.36.0

下面是我的 apache 的配置,我在文件“/etc/httpd/conf.d/django.conf”中有这个配置

Alias /static /home/rafiq/myproject/static
<Directory /home/rafiq/myproject/static>
    Require all granted
</Directory>


<Directory /home/rafiq/myproject/myproject>
    <Files wsgi.py>
        Require all granted
    </Files>
</Directory>

WSGIDaemonProcess myproject python-path=/home/rafiq/myprojectenv:/home/rafiq/myprojectenv/lib/python3.7/site-packages
WSGIProcessGroup myproject
WSGIScriptAlias / /home/rafiq/myproject/myproject/wsgi.py

Python Django 中的 WSGI 配置详细信息。

[root@localhost ~]# vi /home/rafiq/myproject/myproject/wsgi.py
"""
WSGI config for myproject project.

It exposes the WSGI callable as a module-level variable named ``application``.

For more information on this file, see
https://docs.djangoproject.com/en/3.2/howto/deployment/wsgi/
"""

import os
import sys

sys.path.append('/home/rafiq/myproject')
sys.path.append('/home/rafiq/myproject/myproject')
sys.path.append('/home/rafiq/myprojectenv/lib/python3.7/site-packages')


from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')

application = get_wsgi_application()

以下是 apache 日志中的 sys.path 详细信息。

['/home/rafiq/myprojectenv', '/home/rafiq/myprojectenv/lib/python3.7/site-packages', '/usr/local/lib/python37.zip', '/usr/local/lib/python3.7', '/usr/local/lib/python3.7/lib-dynload', '/usr/local/lib/python3.7/site-packages', '/home/rafiq/myproject', '/home/rafiq/myproject/myproject', '/home/rafiq/myprojectenv/lib/python3.7/site-packages', '/home/rafiq/myproject', '/home/rafiq/myproject/myproject', '/home/rafiq/myprojectenv/lib/python3.7/site-packages', '/home/rafiq/myproject', '/home/rafiq/myproject/myproject', '/home/rafiq/myprojectenv/lib/python3.7/site-packages', '/home/rafiq/myproject', '/home/rafiq/myproject/myproject', '/home/rafiq/myprojectenv/lib/python3.7/site-packages', '/home/rafiq/myproject', '/home/rafiq/myproject/myproject', '/home/rafiq/myprojectenv/lib/python3.7/site-packages', '/home/rafiq/myproject', '/home/rafiq/myproject/myproject', '/home/rafiq/myprojectenv/lib/python3.7/site-packages']

以下是直接来自 python3.7 的 sys.path 详细信息

[rafiq@localhost ~]$ source myprojectenv/bin/activate
(myprojectenv) [rafiq@localhost ~]$ python3.7
Python 3.7.12 (default, Nov  8 2021, 09:02:58)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/usr/local/lib/python37.zip', '/usr/local/lib/python3.7', '/usr/local/lib/python3.7/lib-dynload', '/home/rafiq/myprojectenv/lib/python3.7/site-packages']

有人可以帮忙解决这个问题,不知道如何告诉 apache 使用 SQLite 3.36.0

谢谢你

标签: python-3.xdjangolinuxapachecentos7

解决方案


推荐阅读