---
title: OAT、OCP 和 OceanBase 数据库对 Python 版本的依赖问题-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于 OAT、OCP 和 OceanBase 数据库对 Python 版本的依赖问题相关的常见问题和使用技巧，帮助您快速解决 OAT、OCP 和 OceanBase 数据库对 Python 版本的依赖问题的难题。
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

划线反馈

# OAT、OCP 和 OceanBase 数据库对 Python 版本的依赖问题

更新时间：2023-11-13 02:05

适用版本： V4.x、V3.x、V2.x 内容类型：TechNote  

本文主要描述当前 OAT、OCP、OceanBase 数据库 各个产品对 Python 版本的依赖问题，即它们到底依赖于 Python 的哪个版本。

## 适用版本

- OAT 的各个已发布版本（迄今为止最新的发布版本为 OAT V4.1.1）
 - OCP 的各个已发布版本（迄今为止最新的发布版本为 OCP V4.1.0）
 - OceanBase 数据库的各个已发布版本（迄今为止最新的发布版本为 OceanBase V4.1.0）

## OAT

OAT 容器内自身使用的 Python 解释器均内建于 OAT 容器内，因此，OAT 容器本身对添加到 OAT 中的各个服务器并无 Python 版本的特别要求。通过 OAT 对服务器做初始化检查时对安装的 Python 的版本的检查要求主要来源于 OCP 对服务器中的 Python 版本的要求（详见后一章节）。

具体来说，OAT 对添加到主机列表的各种用途（OceanBase 产品服务或 OceanBase 数据库或两者兼而有之）的服务器，要求：

1. 该服务器上必须安装有 python-devel rpm 包（在 Kylin/UOSa/UOSe/Redflag/NFSChina 等 OS 上为python2-devel，通过 `rpm -qa | grep python-devel` 命令可以查出来），否则 config_deps 和 precheck 这一步均会报错 `Error: Unable to find a match: python-devel`。

   ![1](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/knowledge-base/oat/img7SN3aBxzbY.png)

   ![2](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/knowledge-base/oat/imgB9JVwaNFZu.png)
 2. 要求在该服务器上执行 `python -V` 命令的输出版本号为 2.x，否则 precheck 这一步会报错 `python command is not version 2.x, suggest use 'alternatives --set python /usr/bin/python2' to set ... FAIL`。

   ![3](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/knowledge-base/oat/imgQs6iGsG7yd.png)

## OCP

OCP 中目前对 Python 版本的依赖主要在于：

1. OCP 下发到各个服务器上 `pos.py` 脚本仍强依赖于 python2.7，该脚本主要用于 ocp-agent 的 安装/重装/重启 任务，一旦 ocp-agent 正常工作，OCP 上后续其它任务的执行并不依赖于 python2.7。

   ![4](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/knowledge-base/oat/imgImHKf9yeVS.png)
 2. OCP V4.1.0 版本新增加的《主机标准化》检查中要求"python"命令必须存在，并且版本必须是 python 2.7.x，否则会报错。

   ![5](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/knowledge-base/oat/imgghDH0zoXxD.png)

   ![6](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/knowledge-base/oat/imgyaGzkv1sAt.png)

## OceanBase 数据库

OceanBase 数据库对 Python 版本的依赖主要在于通过 OCP 升级 OceanBase 数据库版本时，需要使用下面几个 python 脚本去对 OceanBase 集群做 pre/post 检查。

![7](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/knowledge-base/oat/imgmOXxLSLY5t.png)

不过目前这几个 python 脚本仅强制要求 python 解释器必须存在，并未指定具体的版本要求。这些升级检查脚本在 Python 2.7 版本中已经验证没有任何兼容性问题，对于 Python 3.x 版本内部实测表明这些升级脚本存在语法兼容性问题。

![8](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/knowledge-base/oat/imga3iLZfnTTX.png)

## 解决方法

1. 根据 OAT/OCP 上提示的报错信息，配置好合适的 YUM 源，并通过yum命令来安装 python2。

   ```
   # yum install python2 python2-devel

   ```

   如果没有自动创建 `/usr/bin/python` 的话，还必须手工创建一个 `/usr/bin/python` 软链接，指向 python2.7。

   ```
   # ln -sf /usr/bin/python2.7 /usr/bin/python

   ```
 2. 在某些新版的操作系统上（如 openEuler 22.03 LTS SP1、RHEL 9.2），装机 ISO 镜像和官方 YUM 源中均不再提供 Python 2.7 版本的 RPM 包了（背景：因为 Python 核心团队已经于 2020 年 1 月停止对 Python2 的维护了，所以 openEuler 22.03-LTS 版本开始，已经停止支持和维护 Python 2，仅支持 Python3 了。所以最新版的 openEuler-22.03-LTS-SP1 已经不支持 python2 了，也不允许使用 python2 了，因为安全漏洞已不再维护了。），目前可以暂时通过源代码编译安装 python 2.7.18 版本。

   范例如下：

   ```
   [root@ob120 ~]# wget https://www.python.org/ftp/python/2.7.18/Python-2.7.18.tgz
   [root@ob120 ~]# tar zxvf Python-2.7.18.tgz
   [root@ob120 ~]# cd Python-2.7.18/
   [root@ob120 Python-2.7.18]# ls
   // 安装依赖
   [root@ob120 Python-2.7.18]# yum -y install make zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel gcc
   // --enable-optimizations 为最优安装，建议使用这个参数。--prefix 声明安装路径
   [root@ob120 Python-2.7.18]# ./configure --enable-optimizations  --prefix=/usr/local/python2.7/
   [root@ob120 Python-2.7.18]# make && make install
   [root@ob120 Python-2.7.18]# ls -l /usr/local/python2.7/
   total 16
   drwxr-xr-x 2 root root 4096 Jun  2 11:34 bin
   drwxr-xr-x 3 root root 4096 Jun  2 11:34 include
   drwxr-xr-x 4 root root 4096 Jun  2 11:34 lib
   drwxr-xr-x 3 root root 4096 Jun  2 11:34 share
   [root@ob120 Python-2.7.18]# ls -l /usr/local/python2.7/bin/
   total 6504
   -rwxr-xr-x 1 root root     111 Jun  2 11:34 2to3
   -rwxr-xr-x 1 root root     109 Jun  2 11:34 idle
   -rwxr-xr-x 1 root root      94 Jun  2 11:34 pydoc
   lrwxrwxrwx 1 root root       7 Jun  2 11:34 python -> python2
   lrwxrwxrwx 1 root root       9 Jun  2 11:34 python2 -> python2.7
   -rwxr-xr-x 1 root root 6620824 Jun  2 11:34 python2.7
   -rwxr-xr-x 1 root root    1697 Jun  2 11:34 python2.7-config
   lrwxrwxrwx 1 root root      16 Jun  2 11:34 python2-config -> python2.7-config
   lrwxrwxrwx 1 root root      14 Jun  2 11:34 python-config -> python2-config
   -rwxr-xr-x 1 root root   18557 Jun  2 11:34 smtpd.py
   [root@ob120 Python-2.7.18]# which python
   /usr/bin/python
   [root@ob120 Python-2.7.18]# which python2.7
   /usr/bin/which: no python2.7 in (/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin)
   [root@ob120 Python-2.7.18]#
   [root@ob120 Python-2.7.18]# ln -s /usr/local/python2.7/bin/python2.7 /usr/bin/python2.7
   [root@ob120 Python-2.7.18]# which python2.7
   /usr/bin/python2.7
   [root@ob120 Python-2.7.18]#

   ```

上一篇

[OAT 升级后，原来失败的初始化服务器任务无法正常运行的原因及解决方法](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000004710319)

下一篇

[部署 OCP/ODC/OMS/ODP 时创建的 database 名](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000284381) ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
