错误:pkg_resources.DistributionNotFound:' backports.functools-lru-cache'没有找到分发,并且是pylint所要求的

时间:2016-11-23 12:42:17

标签: python python-2.7 static-analysis pylint

我正在尝试运行Pylint,我收到以下错误:

  

pkg_resources.DistributionNotFound:' backports.functools-lru-cache'没有找到分布并且是pylint所需的

我找到了以下链接,但不确定如何处理这些文件或放置它们的位置。 https://pypi.python.org/simple/backports.functools-lru-cache/

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:4)

我有同样的问题,我安装了两个缺少的依赖项(pylint上的配置错误或没有更新pip ??) 只是做:

pip install backports.functools_lru_cache

然后如果你收到如下错误:

raise DistributionNotFound(req)

pkg_resources.DistributionNotFound:configparser

只是这样做:

pip install configparser

答案 1 :(得分:1)

在CentOS 7上的virtual environment内运行时出现此问题。

在CentOS上,backports模块打包为yum包(python-backports.x86_64)。

解决方案是使用--system-site-packages选项创建virtualenv。

首先验证是否安装了``python-backports`包:

yum list installed | grep python-backports

然后创建/重新创建您的虚拟环境:

virtualenv env --system-site-packages

这允许virtualenv的pylint在安装时看到backports模块。

然后在虚拟环境中安装pylint:

env/bin/pip install pylint

答案 2 :(得分:1)

据我所知,RHEL / CentOS的某些版本在其yum存储库中的backports.ssl-match-hostname包存在某些问题,这可能导致其他反向端口包从PyPI更新时出现问题。具体来说,在RHEL7.2环境中,我将问题重现如下:

> yum install python-pip  # indirectly installs backports.ssl-match-hostname
> pip2 install pylint     # indirectly installs backports.functools_lru_cache
> pip2 install --upgrade backports.ssl-match-hostname  # install latest package from pypi, which effectively corrupts backports.functools_lru_cache
> python2 -m pylint --version   # fails with missing import backports.functools_lru_cache

我发现避免这种情况的唯一方法是用PyPI中的等效软件替换yum安装的软件包。这可以按如下方式完成:

> yum install python-pip  # installs backports.ssl-match-hostname as a transitive dependency
> pip2 freeze > temp_reqs.txt  # take a snapshot of the installed packages and versions
> pip2 uninstall backports.ssl-match-hostname  # remove the yum installed package
> pip2 install -r temp_reqs.txt  # reinstall the same version of the backports package, but install from PyPI

现在已安装的软件包应按预期工作。执行以下测试用例证实了这一点:

> pip2 install pylint
> pip2 install --upgrade backports.ssl-match-hostname  # previously caused corruption of backports.functools_lru_cache used by pylint
> python2 -m pylint --version  # now works correctly

希望这可以帮助其他人解决这个问题。