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

混淆者
混淆者· 2020年05月02日 本文共计2022字|已被浏览612次

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

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 网络配置那些坑

夜来草木见露水,鸿雁南渡避寒。----《雪中悍刀行》