AttributeError:'module'对象没有属性'lru_cache'

时间:2018-02-04 15:18:30

标签: django virtualenv python-3.5 mod-wsgi

我在此环境设置的标题中显示错误。 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()

Stacktrace:

  

[Sun Feb 04 20:40:39.396427 2018] [wsgi:error] [pid 6428:tid   140043928524544] [client 127.0.0.1:60276] mod_wsgi(pid = 6428):目标   WSGI脚本'/home/santosh/Documents/project/Reports/Reports/wsgi.py'   无法作为Python模块加载。

     

[Sun Feb 04 20:40:39.398284 2018] [wsgi:error] [pid 6428:tid   140043928524544] [client 127.0.0.1:60276] mod_wsgi(pid = 6428):   处理WSGI脚本时发生异常   '/home/santosh/Documents/project/Reports/Reports/wsgi.py'。

     

[Sun Feb 04 20:40:39.398425 2018] [wsgi:error] [pid 6428:tid   140043928524544] [客户端127.0.0.1:60276]回溯(最近的呼叫   最后):

     

[Sun Feb 04 20:40:39.398475 2018] [wsgi:error] [pid 6428:tid   140043928524544] [client 127.0.0.1:60276]文件   “/home/santosh/Documents/project/Reports/Reports/wsgi.py”,第30行,在   

     

[Sun Feb 04 20:40:39.398555 2018] [wsgi:error] [pid 6428:tid   140043928524544]来自django.core.wsgi的[client 127.0.0.1:60276]   import get_wsgi_application

     

[Sun Feb 04 20:40:39.398565 2018] [wsgi:error] [pid 6428:tid   140043928524544] [client 127.0.0.1:60276]文件   “/home/santosh/Documents/project/project/lib/python3.5/site-packages/django/init.py”   第1行,

     

[Sun Feb 04 20:40:39.398591 2018] [wsgi:error] [pid 6428:tid   140043928524544] [客户端127.0.0.1:60276]来自   django.utils.version导入get_version

     

[Sun Feb 04 20:40:39.398598 2018] [wsgi:error] [pid 6428:tid   140043928524544] [client 127.0.0.1:60276]文件   “/home/santosh/Documents/project/project/lib/python3.5/site-packages/django/utils/version.py”   第61行,

     

[Sun Feb 04 20:40:39.398628 2018] [wsgi:error] [pid 6428:tid   140043928524544] [client 127.0.0.1:60276] @ functools.lru_cache()

     

[Sun Feb 04 20:40:39.398643 2018] [wsgi:error] [pid 6428:tid   140043928524544] [client 127.0.0.1:60276] AttributeError:'module'   object没有属性'lru_cache'

4 个答案:

答案 0 :(得分:2)

经过大量的追踪,错误和谷歌搜索,最后我能够成功运行。

我收到了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。

答案 1 :(得分:0)

我在Google偶然发现了CentOS 7的结果,因此对于处于类似职位的任何人,这都是为我解决的问题:

yum install mod_wsgi会安装python2版本。像OP中那样,这会导致痛苦和痛苦以及疯狂的错误。

解决方案是从CentOS的IUS存储库中安装python36(或您正在使用的任何python3版本)版本。我必须从pkgs.org下载,因为我的系统没有外部互联网访问权限,所以我不确定如何从yum下载它,但是我可以确认,一旦我安装了兼容版本的mod_wsgi,一切都会开始工作。 / p>

答案 2 :(得分:0)

我跑了

sudo apt remove  libapache2-mod-wsgi
sudo apt install libapache2-mod-wsgi-py3

在Ubuntu 18.04上安装Python3版本,然后重新加载Apache,这为我解决了错误。

答案 3 :(得分:0)

我是如何解决的

我在 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 就可以解决问题。