在Linux下采用Docker部署Python聊天机器人的踩坑记录

Author Avatar
混淆者· 5月2日 本文共计2022字|已被浏览84次
  • 在其它设备中阅读本文章

0. 缘由

昨天我要部署一下这个项目
其实是我自己写的一款QQ功能性机器人 欢迎star

部署的系统是CentOS 7.8

1. Python编译那些坑

CentOS自带GCC编译的坑

众所周知在CentOS等系统下如果想要部署一个高版本的CPython解释器是需要自己进行编译安装的
在编译安装的时候免不了有很多的坑出现

GCC版本导致的编译完成后测试出错

按照网络上的编译教程来讲大概就是如下几步

sudo yum install gcc openssl-devel bzip2-devel libffi-devel
wget https://www.python.org/ftp/python/3.8.2/Python-3.8.2.tgz 
#此处采用了Python3.8.2作为例子
tar -xvf Python-3.8.2.tgz
cd Python-3.8.2
./configure --enable-optimizations
make -j4
make altinstall

很简单就能解决

结果在编译完成后的make进行的自动化测试中出现了以下错误

SystemError: <built-in function compile> returned NULL without setting an error

经过搜索之后找到了Python社区的一个issue
这个issue里面提到

It's look you're using a fairly old toolchain. I wouldn't reccomend using fancy modern compiler optimizations with GCC 4.

Updating gcc to 8.1.0 fixed the problem.

原因很简单,按照上述方法安装的GCC版本十分老旧,是已经失去了支持的4.x版本
如果想要在CentOS上成功编译有两种方法

  • 去除 --enable-optimization 参数并编译(不建议)
  • 升级GCCGCC 8.x

    • 升级方法:

      yum -y install centos-release-scl
      yum -y install devtoolset-8-gcc devtoolset-8-gcc-c++ devtoolset-8-binutils
      
    • 在安装完成后输入scl enable devtoolset-8 bash在一个新的命令行中启动

      • 此时输入gcc --version应显示为gcc的8.x版本
    • 本部分参考:为CentOS 6、7升级gcc至4.8、4.9、5.2、6.3、7.3等高版本

Sqlite3支持的坑

本部分参考:python - No module named _sqlite3 - Stack Overflow

在部署程序运行的时候出现了这个错误:

ImportError: No module named _sqlite3

这是一个很大的坑,Python默认编译的时候是没有sqlite3支持的
需要sqlite3支持的情况下需要安装sqlite3库:

yum install -y sqlite-devel

并且在配置时加入--enable-loadable-sqlite-extensions参数

2. Docker网络配置那些坑

本文链接:https://blog.mnixry.cn/Technology/linux-python-coolq-bot-deploy.html
该博客遵守 CC BY-NC-SA 4.0 协议

信息学竞赛中没有证明。----《wxh010910》