Devstack 因 openstackclient.shell 异常 raised:python-neutronclient 而失败
Devstack failed with openstackclient.shell Exception raised:python-neutronclient
最近我 运行 在尝试 devstack 时遇到了这个错误:
ERROR: openstackclient.shell Exception raised: python-neutronclient 2.3.9.40.g9ed73c0 is installed but python-neutronclient<3,>=2.3.6 is required by []
我做了一些调查,发现它可能是由 python 路径问题引起的。
/opt/stack/目录下和/usr/local/lib/python2.7/dist-packages下有两套openstack客户端安装(如python-neutronclient、python-novaclient等)目录。以neutronclient为例,我可以在这两个目录下找到:
/opt/stack/python-neutronclient
和
/user/local/lib/python2.7/dist-packages/python-neutronclient
我发现 python 会使用安装在 /opt/stack 下的客户端:
>>> sys.path
['', '/opt/stack/python-keystoneclient', '/opt/stack/python-glanceclient', ..., '/opt/stack/heat', '/opt/stack/tempest', '/usr/lib/python2.7'....]
为什么python(devstack) 不使用/usr/local/lib/python2.7 下的包? /opt/stack下的包有问题:egg-info/PKG-INFO里的版本信息不是合法的PEP440版本,比如'2.3.10.dev47.g11deb7f',会导致devstack failed with配置 keystone 时出现上述错误:
我不记得我明确设置了 PYTHONPATH 变量。 python 或 devstack 如何在默认系统 python 路径之前设置 /opt/stack/?我检查了 devstack 源代码,但没有找到任何有用的信息。任何人都可以帮忙提供一些提示吗?谢谢!
我发现 /usr/local/lib/python2.7/dist-packages 下有一些 *.pth 文件,其中一个包含一些指向 devstack 默认目录的项目(即 /opt/stack/python-neutronclient,等等在)。这就是为什么将这些目录作为 python 路径的一部分的原因。还有一些 egg-link 文件指向 /opt/stack 下的 openstack 客户端项目文件夹,例如
~$ cat /usr/local/lib/python2.7/dist-package/python-neutronclient.egg-link
/opt/stack/python-neutronclient
所以删除那些 egg link 文件,并从 *.pth 中删除不需要的路径项,然后问题就会得到解决。请注意,您可能会将安装在 /user/local/lib/python2.7/dist-packages 下的 openstack 客户端软件包更新到最新版本。您可以通过手动执行 'pip install' 或 'apt-get' 或在 devstack 中相应地设置 'LIBS_FROM_GIT' 来完成此操作,例如:
LIBS_FROM_GIT=python-neutronclient,neutron-vpnaas,neutron-fwaas,neutron-lbaas,python-keystoneclient,python-glanceclient,python-novaclient,python-cinderclient
因此 devstack 将 git 将这些 openstack 客户端项目克隆到 /opt/stack(默认情况下),然后将这些包安装到 /usr/local/lib/python2.7/dist-packages.
最近我 运行 在尝试 devstack 时遇到了这个错误:
ERROR: openstackclient.shell Exception raised: python-neutronclient 2.3.9.40.g9ed73c0 is installed but python-neutronclient<3,>=2.3.6 is required by []
我做了一些调查,发现它可能是由 python 路径问题引起的。
/opt/stack/目录下和/usr/local/lib/python2.7/dist-packages下有两套openstack客户端安装(如python-neutronclient、python-novaclient等)目录。以neutronclient为例,我可以在这两个目录下找到:
/opt/stack/python-neutronclient
和
/user/local/lib/python2.7/dist-packages/python-neutronclient
我发现 python 会使用安装在 /opt/stack 下的客户端:
>>> sys.path
['', '/opt/stack/python-keystoneclient', '/opt/stack/python-glanceclient', ..., '/opt/stack/heat', '/opt/stack/tempest', '/usr/lib/python2.7'....]
为什么python(devstack) 不使用/usr/local/lib/python2.7 下的包? /opt/stack下的包有问题:egg-info/PKG-INFO里的版本信息不是合法的PEP440版本,比如'2.3.10.dev47.g11deb7f',会导致devstack failed with配置 keystone 时出现上述错误:
我不记得我明确设置了 PYTHONPATH 变量。 python 或 devstack 如何在默认系统 python 路径之前设置 /opt/stack/?我检查了 devstack 源代码,但没有找到任何有用的信息。任何人都可以帮忙提供一些提示吗?谢谢!
我发现 /usr/local/lib/python2.7/dist-packages 下有一些 *.pth 文件,其中一个包含一些指向 devstack 默认目录的项目(即 /opt/stack/python-neutronclient,等等在)。这就是为什么将这些目录作为 python 路径的一部分的原因。还有一些 egg-link 文件指向 /opt/stack 下的 openstack 客户端项目文件夹,例如
~$ cat /usr/local/lib/python2.7/dist-package/python-neutronclient.egg-link
/opt/stack/python-neutronclient
所以删除那些 egg link 文件,并从 *.pth 中删除不需要的路径项,然后问题就会得到解决。请注意,您可能会将安装在 /user/local/lib/python2.7/dist-packages 下的 openstack 客户端软件包更新到最新版本。您可以通过手动执行 'pip install' 或 'apt-get' 或在 devstack 中相应地设置 'LIBS_FROM_GIT' 来完成此操作,例如:
LIBS_FROM_GIT=python-neutronclient,neutron-vpnaas,neutron-fwaas,neutron-lbaas,python-keystoneclient,python-glanceclient,python-novaclient,python-cinderclient
因此 devstack 将 git 将这些 openstack 客户端项目克隆到 /opt/stack(默认情况下),然后将这些包安装到 /usr/local/lib/python2.7/dist-packages.