openGauss
开源数据库
openGauss社区官网
开源社区
兼容多版本Python的第三方库编译说明
概述 
本文描述了如何在 CentOS 系统上编译出支持多版本 python 环境的 openGauss-third_party 第三方库。
硬件规格:
 CPU: Intel(R) Xeon(R) Gold 6266C CPU @ 3.00GHz 7 核
 内存: 32G
软件规格:
 操作系统: CentOS Linux release 7.6.1810 (Core)
 数据库: openGauss 1.0.1
 Python 版本:3.7.7
编译步骤 
若希望编译出的支持多版本安装的第三方库,只需在所需环境下单独编译 CFFI 模组,并将其放入 openGauss-third_party_binartlibs//dependency/centos7.6_x86_64/install_tools 目录下即可,下面为详细过程。
1.环境准备
首先确定所用系统为 CentOS x86_64, 接着安装编译所需组件:
openSSL
openSSL-devel
libaio-devel
ncurses-devel
pam-devel
libffi-devel
python3-devel
libtool
建议采用 yum install *** 方式安装。
2.编译安装 Python3.X.X
 官网下载所需的 Python3.X.X 源代码并解压。进入解压出来的 python 目录用运行如下命令:
vi Modules/Setup.dist
搜索 SSL 并且取消注释如下代码:
# Socket module helper for socket(2)_socket socketmodule.c
# Socket module helper for SSL support; you must comment out the other# socket line above, and possibly edit the SSL variable:#SSL=/usr/local/ssl_ssl _ssl.c-DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl-L$(SSL)/lib -lssl -lcrypto
如果 SSL 不是在默认路径,则需修改 SSL 路径为安装目录。
编译安装 python 到指定目录:
./configure --prefix=/usr/local/python3.x.x/ --enable-sharedmake && make install
安装成功后运行python -V命令查看 python 版本是否为所需版本,若不是请去/usr/bin 目录修改 python 软链接使其指向正确的 python 安装目录。
3.编译第三方库
 从社区下载的第三方编译源码 openGauss-third_party, 进入 openGauss-third_party/dependency/build,打开 build_dependency.sh 脚本,注释掉不需要编译的第三方组件:
...
function build_pylib()>{># build_item six# build_item pycparserbuild_item cffi# build_item bcrypt# build_item idna# build_item ipaddress# build_item netifaces# build_item pynacl# build_item asn1crypto# build_item cryptography# build_item pyOpenSSL# build_item paramiko# build_item psutil# build_item pyasn1if [ -d $BUILD_SCRIPT_PATH/../install_comm ];thenrm -rf $BUILD_SCRIPT_PATH/../install_commfi}
...
注释掉 Main 函数中的
...
# build_first# build_secondbuild_pylib
...
再进入 openGauss-third_party/build 文件夹下,打开 build_all.sh 脚本,在最下方注释掉以下几行:
# build_item buildtools
`build_item dependency`
# build_item platform
在 build 目录下运行脚本:
cd ..sh build_all.sh
binarylibs 会生成到 openGauss-third_party 同级目录下,名为 binarylibs。如果部分组件构建失败,可以检查日志。 将 binarylibs 拷贝至 openGauss-third_party_binarylibs:
\cp -r binarylibs/ openGauss-third_party_binarylibs/
如果希望在 binarylibs 中支持多个 python 版本,则需在多个版本 python 中重复以上步骤,编译对应版本的 cffi,并将编译出的文件,放入 openGauss-third_party_binarylibs/dependency/centos7.6_x86_64/install_tools 目录下
drwxr-xr-x 2 root root   4096 Nov  3 15:24 bcrypt
drwxr-xr-x 2 root root   4096 Nov  3 15:24 cffi
-rw-r--r-- 1 root root    289 Nov  3 15:24 _cffi_backend.py
-rwxr-xr-x 1 root root 189816 Nov  3 15:24 _cffi_backend.so_UCS2_3.6
-rwxr-xr-x 1 root root 189816 Nov  4 09:21 _cffi_backend.so_UCS2_3.7
-rwxr-xr-x 1 root root 189816 Nov  3 15:24 _cffi_backend.so_UCS4_3.6
-rwxr-xr-x 1 root root 189816 Nov  4 09:21 _cffi_backend.so_UCS4_3.7
drwxr-xr-x 4 root root   4096 Nov  3 15:26 cryptography
drwxr-xr-x 4 root root   4096 Nov  3 15:26 nacl
drwxr-xr-x 2 root root   4096 Nov  3 15:25 netifaces
drwxr-xr-x 2 root root   4096 Nov  3 15:26 psutil