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:“模块”对象没有属性“百分位”

AttributeError:“模块”对象没有属性

无法安装模块 - AttributeError: 'NoneType' 对象没有属性 'loader'

AttributeError:“模块”对象没有属性“urlopen”

AttributeError:“模块”对象没有属性“ORB”