-1

最近我在尝试 devstack 时遇到了这个错误:

错误:openstackclient.shell 引发异常:python-neutronclient 2.3.9.40.g9ed73c0 已安装,但 [] 需要 python-neutronclient<3,>=2.3.6

我做了一些调查,发现它可能是由 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失败配置 keystone 时出现上述错误:

我不记得我明确设置了 PYTHONPATH 变量。python或devstack如何在默认系统python路径之前设置/opt/stack/?我检查了 devstack 源代码,但没有找到任何有用的信息。任何人都可以帮忙提供一些提示吗?谢谢!

4

1 回答 1

0

我发现 /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链接文件,并从*.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 会将这些 openstack 客户端项目克隆到 /opt/stack(默认情况下),然后将这些包安装到 /usr/local/lib/python2.7/dist-packages。

于 2015-01-21T08:54:04.437 回答