前言
我们都知道
cookiecutter
是一个非常方便的基于Python
的项目模板工具,它就相当于一些IDE工具的创建项目工程的向导工具,创建的工程具有统一的结构。
背景
同事之前写了一个golang
的项目模板,今天在使用cookiecutter
创建新工程时,出现了问题Unable to load extension: No module named functools_lru_cache
。询问身边的同事有没有碰到这样的问题,得到的答复是没有。他们用的系统都是Mac OS
。而我用的是Ubuntu
。我的系统版本是Ubuntu 18.04.4 LTS
。
解决过程
看提示像是在ubuntu系统上cookiecutter
缺少了依赖functools_lru_cache
,很可能是没有安装它。于是就执行下面的命令去安装functools_lru_cache
。
$ pip install backports.functools_lru_cache
然后再去执行:
$ cookiecutter git@XXX/go-swagger-template.git
几秒钟后,问题依然存在:
Unable to load extension: No module named functools_lru_cache
然后就开始拿出了面向google编程的本领,开始了一顿搜索。搜索结果就是很多人在Ubuntu上都遇到过这个问题。在github上一个开源项目里,就有人提了这样一个issue[^1].
在这个issue[^1]里,有人提出卸载functools_lru_cache
后再重新安装。并有一些人尝试之后确实解决了这个问题。
$ pip uninstall backports.functools_lru_cache
$ pip install backports.functools_lru_cache
我也安装这个方式尝试了两次,但都不行。于是继续往下看这个issue,看是否有别的解决方案。还真有!harprit讲,看起来是functools_lru_cache
相关的文件丢失造成的。他说python matplotlib在ubuntu上也有这个问题。按照他的建议使用下面的命令安装python-matplotlib
。
$ sudo apt-get install python-matplotlib
安装完后,再尝试使用cookiecutter来创建新项目工程,问题消失了,工程创建成功。非常感谢google。
在前面的issue[^1]讨论中,有人是用Fedora
系统,他的解决方案是执行下面的命令:
dnf install python2-backports-functools_lru_cache
结束语
写此博文存粹是帮助自己把这个问题的解决方法记录下来,以备后续再遇到,减少自己重复的工作。也给将来遇到这个问题的小伙伴提供一个方案,没准能帮助到你们,那将是我今天写这篇博客的荣幸。
参考
- [^1]https://github.com/awslabs/aws-sam-cli/issues/474
- https://askubuntu.com/questions/1046554/python-matplotlib-importerror-no-module-named-functools-lru-cache?answertab=oldest#tab-top
- https://stackoverflow.com/questions/47179433/python-2-7-functools-lru-cache-does-not-import-although-installed/47317710#47317710