第1章 升级python

1.1 下载新版本

进入 Python下载页面,选择需要的版本。
这里,我选择的版本是 3.5.2 。

wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz

1.2 解压缩

下载完成之后,进行解压缩:

tar -zxvf Python-3.5.2.tgz

1.3 安装配置

进入解压缩后的目录,安装配置:

cd Python-3.5.2/
./configure 

执行 ./configure 时,如果报错:
configure: error: no acceptable C compiler found in $PATH
说明没有安装合适的编译器。这时,需要安装/升级 gcc 及其它依赖包。

yum install make gcc gcc-c++ zlib* openssl* libffi-devel -y

zlib*是编译安装python3.6以上版本的时候用到。

完成之后,重新执行:

./configure 

编译 & 安装
配置完成之后,就可以编译了:

make 

漫长的等待……完成后,安装:

make install 

验证
安装成功以后,就可以查看 Python 的版本了:

python -V
Python 2.7.5
python3 -V
Python 3.5.2

一个是旧版本 2.x,另外一个是新版本 3.x。
注意:在 /usr/local/bin/ 下有一个 python3 的链接,指向 bin 目录下的 python 3.5。

1.4 设置 3.x 为默认版本

查看 Python 的路径,在 /usr/bin 下面。可以看到 python 链接的是 python 2.7,所以,执行 python 就相当于执行 python 2.7。

ls -al /usr/bin | grep python
-rwxr-xr-x.  1 root root      11216 121 2015 abrt-action-analyze-python
lrwxrwxrwx.  1 root root          7 830 12:11 python -> python2
lrwxrwxrwx.  1 root root          9 830 12:11 python2 -> python2.7
-rwxr-xr-x.  1 root root       7136 1120 2015 python2.7

将原来 python 的软链接重命名:

mv /usr/bin/python /usr/bin/python.bak

将 python 链接至 python3:

ln -s /usr/local/bin/python3 /usr/bin/python

这时,再查看 Python 的版本:

python -V
Python 3.5.2

输出的是 3.x,说明已经使用的是 python3了。
配置 yum
升级 Python 之后,由于将默认的 python 指向了 python3,yum 不能正常使用,需要编辑 yum 的配置文件:

vi /usr/bin/yum

同时修改:

vi /usr/libexec/urlgrabber-ext-down

将 #!/usr/bin/python 改为 #!/usr/bin/python2.7,保存退出即可。

第2章 Python 解决命令行删除、退格乱码问题

安装了python 在命令行界面无法进行删除、退格

2.1 安装readline模块

两种方式:

yum install -y readline-devel  readline 

或者
下载文件

https://pypi.python.org/pypi/readline
tar -xvf readline-6.2.4.1.tar.gz 
cd readline-6.2.4.1 
python setup.py install

2.2 第二种方法安装时候报错

/usr/bin/ld: cannot find -lncurses

有三种可能性
1 系统没有安装相对应的lib
2 相对应的lib版本不对
3 lib(.so档)的symbolic link 不正确,没有连结到正确的函式库文件(.so)

locate发现本地有libncurses的库包
在这里插入图片描述

修改为
在这里插入图片描述

重新安装后成功。
如果先安装了python需要重新编译一次 才生效
进入python安装目录 依次执行

./configure    
make && make install

2.3 附:链接库相关

Linux 系统上有两类根本不同的 Linux 可执行程序。
第一类是静态链接的可执行程序。静态可执行程序包含执行所需的所有函数 — 换句话说,它们是“完整的”。因为这一原因,静态可执行程序不依赖任何外部库就可以运行。
第二类是动态链接的可执行程序
可以用 ldd 命令来确定某一特定可执行程序是否为静态链接的
如果动态可执行程序不包含运行所需的所有函数,动态装入器(dynamic loader)负责装入动态链接的可执行程序运行所需的共享库
动态装入器找到共享库要依靠两个文件 — /etc/ld.so.conf 和 /etc/ld.so.cache
①配置/etc/ld.so.conf
②ldconfig 将/etc/ld.so.conf更新到/etc/ld.so.cache
③动态装入器通过/etc/ld.so.cache加载库目录

共享库查看

# ldconfig -p | less

某些情况下,如果要指示动态装入器首先检查某个目录,请将 LD_LIBRARY_PATH 变量设置成您希望搜索的目录。多个路径之间用冒号分隔;例如:

# export LD_LIBRARY_PATH="/usr/lib/old:/opt/lib"

导出 LD_LIBRARY_PATH 后,如有可能,所有从当前 shell 启动的可执行程序都将使用 /usr/lib/old 或 /opt/lib 中的库,如果仍不能满足一些共享库相关性要求,则转回到 /etc/ld.so.conf 中指定的库。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐