AttributeError:“模块”对象没有属性“lru_cache”
Posted
技术标签:
【中文标题】AttributeError:“模块”对象没有属性“lru_cache”【英文标题】:AttributeError: 'module' object has no attribute 'lru_cache' 【发布时间】:2018-07-14 13:03:59 【问题描述】:我在此环境设置中遇到如标题所示的错误。 Apache2 与 mod_wsgi ,Python 3.5,Django 2.0.2 。我正在使用virtualevn。
我的虚拟环境位于:/home/santosh/Documents/project/project/ 和 django 应用程序位于 /home/santosh/Documents/project/Reports
下面是wsgi.py
文件的内容
import os, sys
sys.path.append('/home/santosh/Documents/project/Reports/Reports')
sys.path.append('/home/santosh/Documents/project/Reports')
sys.path.append('/home/santosh/Documents/project/project/lib/python3.5/site-packages')
sys.path.append('/home/santosh/Documents/project/project/lib/python3.5')
sys.path.append('/home/santosh/Documents/project/project/bin')
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Reports.settings")
application = get_wsgi_application()
堆栈跟踪:
[2018 年 2 月 4 日星期日 20:40:39.396427] [wsgi:error] [pid 6428:tid 140043928524544] [客户端 127.0.0.1:60276] mod_wsgi (pid=6428): 目标 WSGI 脚本'/home/santosh/Documents/project/Reports/Reports/wsgi.py' 不能作为 Python 模块加载。
[2018 年 2 月 4 日星期日 20:40:39.398284] [wsgi:error] [pid 6428:tid 140043928524544] [客户端 127.0.0.1:60276] mod_wsgi (pid=6428): 处理 WSGI 脚本时发生异常 '/home/santosh/Documents/project/Reports/Reports/wsgi.py'。
[2018 年 2 月 4 日星期日 20:40:39.398425] [wsgi:error] [pid 6428:tid 140043928524544] [client 127.0.0.1:60276] Traceback(最近一次通话 最后):
[2018 年 2 月 4 日星期日 20:40:39.398475] [wsgi:error] [pid 6428:tid 140043928524544] [客户端 127.0.0.1:60276] 文件 “/home/santosh/Documents/project/Reports/Reports/wsgi.py”,第 30 行,在
[2018 年 2 月 4 日星期日 20:40:39.398555] [wsgi:error] [pid 6428:tid 140043928524544] [客户端 127.0.0.1:60276] 来自 django.core.wsgi 导入 get_wsgi_application
[2018 年 2 月 4 日星期日 20:40:39.398565] [wsgi:error] [pid 6428:tid 140043928524544] [客户端 127.0.0.1:60276] 文件 "/home/santosh/Documents/project/project/lib/python3.5/site-packages/django/init.py", 第 1 行,在
[2018 年 2 月 4 日星期日 20:40:39.398591] [wsgi:error] [pid 6428:tid 140043928524544] [客户端 127.0.0.1:60276] 来自 django.utils.version 导入 get_version
[2018 年 2 月 4 日星期日 20:40:39.398598] [wsgi:error] [pid 6428:tid 140043928524544] [客户端 127.0.0.1:60276] 文件 “/home/santosh/Documents/project/project/lib/python3.5/site-packages/django/utils/version.py”, 第 61 行,在
[2018 年 2 月 4 日星期日 20:40:39.398628] [wsgi:error] [pid 6428:tid 140043928524544] [客户端 127.0.0.1:60276] @functools.lru_cache()
[2018 年 2 月 4 日星期日 20:40:39.398643] [wsgi:error] [pid 6428:tid 140043928524544] [客户端 127.0.0.1:60276] AttributeError:“模块” 对象没有属性“lru_cache”
【问题讨论】:
【参考方案1】:经过大量的跟踪和错误以及谷歌搜索,我终于能够成功运行。
我收到了 lru_cache 错误,因为我执行了 sudo apt-get install libapache2-mod-wsgi 安装 mod-wsgi。我认为这可能已安装到 Ubuntu 16.04 上的默认 python,即 python2.7。
解决方案:我从 ubuntu 卸载 libapache2-mod-wsgi 并使用 pip install mod-wsgi
安装它,然后最后从 site-packages 目录复制安装的 mod-wsgi 路径并在 apache2/mods-available/wsgi.load 中更新它文件。
所以最好从 virtualenv 或普通 python3 安装 mod-wsgi,然后更新 apache 文件,而不是直接在 ubuntu 上安装 libapache2-mod-wsgi。
【讨论】:
你能解释一下我如何在centos上做到这一点吗?我应该在哪个 apache 文件中添加 pip 安装的 mod_wsgi 路径?【参考方案2】:我从 Google 偶然发现了 CentOS 7 的结果,因此对于处于类似位置的任何人,以下是为我解决的问题:
当你yum install mod_wsgi
时,它会安装python2版本。这会导致痛苦和痛苦以及像 OP 中一样的疯狂错误。
解决方案是从 CentOS 中的 IUS 存储库安装 python36(或您正在使用的任何 python3 版本)版本。我不得不从 pkgs.org 下载,因为我的系统没有外部互联网访问,所以我不确定如何从 yum 下载,但我可以确认,一旦我安装了兼容版本的 mod_wsgi,一切都开始工作了。
【讨论】:
【参考方案3】:我跑了
sudo apt remove libapache2-mod-wsgi
sudo apt install libapache2-mod-wsgi-py3
在 Ubuntu 18.04 上安装 Python3 版本,然后重新加载 Apache,这为我解决了错误。
【讨论】:
【参考方案4】:我是如何解决的
我在 virtualenv 中安装了 django,最初安装了 uWSGI==2.0.19.1
系统范围。
遵循其他答案的建议并没有解决我的问题。
然后我在我的 virtualenv 中安装了uWSGI==2.0.19.1
,但问题仍然存在。
甚至命令which uwsgi
指向我的virtualenv:
/home/user/venv/bin/uwsgi
所以我终于设法通过使用我的 virtualenv 中的完整路径调用 uwsgi 来使其工作:
/home/user/venv/bin/uwsgi --http :8001 --module my_django_project.wsgi
那么问题就解决了。
我还看到,当它失败时,我收到以下消息:
检测到的二进制路径:/usr/local/bin/uwsgi
所以我想只要删除 /usr/local/bin/uwsgi 就可以解决问题。
【讨论】:
以上是关于AttributeError:“模块”对象没有属性“lru_cache”的主要内容,如果未能解决你的问题,请参考以下文章
AttributeError:“模块”对象没有属性“百分位”
无法安装模块 - AttributeError: 'NoneType' 对象没有属性 'loader'