在使用 python3 过度的过程中总是会出现很多问题,这里慢慢收集记录,如有错误欢迎指正。

安装问题

Lunix 系统一般默认都是 python2.7.5 升级到 Python3.x 版本一般都需要通过编译安装。这里主要记录下编译安装需要依赖的包,我们需要先安装。

Development 套件里面安装的工具较多,包括 git 等

安装完成后,除了常规的软链接之外,需要修改 /usr/bin/yum 的 python 路径,目前都是基于 python2 的,不修改使用 yum 安装的时候就会各种报错。

不仅仅是 yum 命令需要修改路径,很多配置了 python 路径的文件基本都需要修改,特别是遇到类似报错:

基本就是 python 路径的问题,例如 yum 安装过程中的 urlgrabber-ext-down.py 这个文件。

交互式命令行问题

进入交互式命令行之后,当输入上下左右方向键等不能实现其应有的功能,而是打印出 ^[[A ^[[B等。

查找资料可以安装 readline 解决,并且不能使用 pip 安装,需要使用 easy_install readline 安装,但是安装的时候会报错:

需要 setuptools==0.9.8 这个工具,安装好之后还出出现报错:

最终放弃了通过 python3 的 pip 或者 easy_install 来安装。

最后解决通过系统安装包安装 readline-deve 这个工具,然后重新编译安装 Python3

sqlite3 模块问题

很多应用都是使用的 sqlite 数据库,但是安装了 python3 之后会发现怎么找不到这个模块了,类似报错:

这个是由于编译安装时没有安装 sqlite3 的拓展,可以先安装 sqlite-devel 或者 libsqlite3-dev,然后重新编译安装 python3,注意到编译的时候有具体说明

If you want a release build with all optimizations active (LTO, PGO, etc),

please run ./configure --enable-optimizations

所以再次编译的时候建议加上 --enable-loadable-sqlite-extensions

uwsgi 的问题

首先 uwsgi 可以在 python2 和 python3 中同时存在,所以安装的时候可以使用

来安装,安装完成之后,可以使用 whereis uwsgi 来查看命令所在位置,我安装(阿里云的镜像)后看到3个位置都有

比较坑爹的是这具有三个是完全不同的,由于 $PATH 路径,默认是第一个,但是这个的 plugins 是不全的,执行基本的命令都会报错

查询文档是由于 plugins 没有安装或者没有加载的原因

可以和正常的做对比

另外还需要注意 python2 版本的问题,如果使用基于 python2 版本的 uwsgi 运行 python3 的应用,客户端会包 500 的错误。浏览器显示:Internal Server Error

命名行可以看到错误如下

--- no python application found, check your startup logs for errors ---

当然运行 logs 中有对应的 Python version