暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

部署GaussDB集群引发AttributeError: module ‘enum‘ has no attribute ‘IntFlag‘?

现象描述

CPU:Kunpeng-920
OS:Kylin Linux Advanced Server V10 (Tercel) 4.19.90-17.ky10.aarch64

在部署过GaussDB分布式数据库的服务器上通过yum源来安装其他模块的时候,发现yum源不可用了,但是在印象中这套服务器的yum源一直是可用的,我们先来看一下这个yum报错信息

# yum list
Traceback (most recent call last):
  File "/usr/bin/yum", line 57, in <module>
    from dnf.cli import main
  File "/usr/lib/python3.7/site-packages/dnf/__init__.py", line 23, in <module>
    import dnf.pycomp
  File "/usr/lib/python3.7/site-packages/dnf/pycomp.py", line 21, in <module>
    from gettext import NullTranslations
  File "/usr/lib64/python3.7/gettext.py", line 49, in <module>
    import locale
  File "/usr/lib64/python3.7/locale.py", line 16, in <module>
    import re
  File "/usr/lib64/python3.7/re.py", line 143, in <module>
    class RegexFlag(enum.IntFlag):
AttributeError: module 'enum' has no attribute 'IntFlag'

错误分析

AttributeError: module ‘enum’ has no attribute 'IntFlag’
这个报错很明显与enum模块有关系,经查询是因为enum34与当前python3.7版本不兼容,需要卸载服务器的enum34。

This is likely caused by the package enum34. Since python 3.4 there's a standard library enum module, so you should uninstall enum34, which is no longer compatible with the enum in the standard library since enum.IntFlag was added in python 3.6.

处理方法是:
1、直接用pip卸载:pip uninstall enum34
2、如果没有pip,直接删除 python3.7/site-packages 目录下的enum开头的文件也成

但是这台服务器在python3.7/site-packages 目录下并没有找到enum开头的文件,开始全文检索

# find / -name enum34*
/home/omm/test/script/gspylib/inspection/lib/kafka-python/kafka/vendor/enum34.py
/home/omm/test/lib/kafka-python/kafka/vendor/enum34.py
/opt/software/GaussDB_Kernel/lib/kafka-python/kafka/vendor/enum34.py
/opt/software/GaussDB_Kernel/script/gspylib/inspection/lib/kafka-python/kafka/vendor/enum34.py

在GaussDB的安装包中确实有enum34.py文件,那么我们在执行yum命令的时候肯定是引用了这个包,回想了一下,GaussDB分布式在安装过程中,会将安装包本身的动态库添加到/etc/profile文件中,看来是这块的问题了。

if [ -n "${BASH_VERSION-}" ] ; then
        if [ -f /etc/bashrc ] ; then
                # Bash login shells run only /etc/profile
                # Bash non-login shells run only /etc/bashrc
                # Check for double sourcing is done in /etc/bashrc.
                . /etc/bashrc
       fi
fi
export UNPACKPATH=/opt/software/GaussDB_Kernel
export PATH=$UNPACKPATH/script/gspylib/pssh/bin:$UNPACKPATH/script:$PATH
export LD_LIBRARY_PATH=/opt/mogdbtool/pylib:$LD_LIBRARY_PATH
export PYTHONPATH=/opt/mogdbtool/pylib
export LD_LIBRARY_PATH=/opt/mogdbtool/pylib/libsimsearch:$LD_LIBRARY_PATH

解决方法

注释掉/etc/profile中有关GaussDB的信息,然后重新登录服务器,问题解决。

# yum list|more
Last metadata expiration check: 0:30:32 ago on Sat 12 Mar 2022 10:29:11 AM CST.
Installed Packages
GConf2.aarch64                                        3.2.6-24.ky10                          @anaconda
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论