ValueError: ('No requirements found', '# Horizon Core Requirements')的调试解决方法

2023-10-29

我在一台不能访问外网的CentOS6上从源码安装Openstack-horizon grizzly版本的时候,碰到了如下的错误:

[root@xxx horizon]# python setup.py install
running install
Traceback (most recent call last):
  File "setup.py", line 28, in <module>
    d2to1=True)
  File "/usr/local/lib/python2.7/distutils/core.py", line 152, in setup
    dist.run_commands()
  File "/usr/local/lib/python2.7/distutils/dist.py", line 953, in run_commands
    self.run_command(cmd)
  File "/usr/local/lib/python2.7/distutils/dist.py", line 972, in run_command
    cmd_obj.run()
  File "/usr/local/lib/python2.7/site-packages/pbr/packaging.py", line 318, in run
    _pip_install(links, self.distribution.install_requires, self.root)
  File "/usr/local/lib/python2.7/site-packages/pbr/packaging.py", line 100, in _pip_install
    " ".join(_wrap_in_quotes(_missing_requires(requires)))),
  File "/usr/local/lib/python2.7/site-packages/pbr/packaging.py", line 88, in _missing_requires
    pkg_resources.Requirement.parse(r)) )]
  File "build/bdist.linux-x86_64/egg/pkg_resources.py", line 2870, in parse
ValueError: ('No requirements found', '# Horizon Core Requirements')

其中,setup.py中提到的依赖项是pbr和d2to1两个模块,于是尝试执行

# python -c "import pbr"
# python -c "import d2to1"
# 

但是发现pbr和d2to1两个模块都存在,不明白到底缺少了啥,horizon的提示信息里没有这个信息。于是按照提示编辑出错的代码:

vi /usr/local/lib/python2.7/site-packages/pbr/packaging.py +84

做了如下修改把正在检测的模块名称打印出来,这样就知道究竟是哪个模块不存在了:

73 def showdebug(r):
 74     print "--> Checking requires:" + r
 75     return True
 76     
 77 def _missing_requires(requires):
 78     """Return the list of requirements that are not already installed.
 79 
 80     Do this check explicitly, because it's very easy to see if a package
 81     is in the current working set, to avoid shelling out to pip and attempting
 82     an install. pip will do the right thing, but we don't need to do the
 83     excess work on everyone's machines all the time (especially since tox
 84     likes re-installing things a lot)
 85     """
 86     return [r for r in requires
 87             if showdebug(r) and (not pkg_resources.working_set.find(
 88                 pkg_resources.Requirement.parse(r)) )]

经过实验,发现所有的依赖组件都是写在requirements.txt这个文件里的,抛出异常的代码没有处理井号注释的情况。所以提示信息里的

# Horizon Core Requirements

实际指的是requirements.txt文件里这条注释下面的那一行依赖项。按照提示的名称从https://pypi.python.org/pypi/Django/1.5.1中下载相应的源代码安装即可。


最后列举一下实际的依赖项(个别不能使用最新版本的做了版本标注):

  • django_compressor-1.3
  • django-appconf
  • six
  • django_openstack_auth-1.0.11
  • python-keystoneclient
  • iso8601
  • prettytable
  • requests
  • simplejson
  • oslo.config
  • netaddr
  • python-cinderclient
  • warlock
  • jsonpatch
  • jsonpointer
  • pyOpenSSL
  • jsonschema<2
  • python-heatclient
  • python-glanceclient
  • httplib2
  • python-novaclient
  • python-quantumclient
  • cliff
  • pyparsing>=1.5.6,<2.0
  • pytz
  • lockfile


其中执行pyparsing这个模块的源代码有语法错误:

[pyparsing-2.0.0]# python setup.py install
Traceback (most recent call last):
  File "setup.py", line 9, in <module>
    from pyparsing import __version__ as pyparsing_version
  File "/root/pyparsing-2.0.0/pyparsing.py", line 629
    nonlocal limit,foundArity
                 ^
SyntaxError: invalid syntax

nolocal是python3的新特性,用于修改作用域之外的非全局变量。所以在openstack环境中应该使用更低版本的pyparsing包,经查询安装包,要求的版本号为>=1.5.6到<2.0之间。(已经标注在上面的列表中)


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ValueError: ('No requirements found', '# Horizon Core Requirements')的调试解决方法 的相关文章

随机推荐