Ubuntu 14.04 源码编译安装Python3.6 (保留系统预装的3.4)
# 切换root
sudo su -
# 下载源码
cd /tmp
wget https://www.python.org/ftp/python/3.6.10/Python-3.6.10.tgz
# 安装编译环境,https://realpython.com/installing-python/#compiling-python-from-source
sudo apt-get update
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev \
libncursesw5-dev xz-utils tk-dev
# 防止Make 时出错double free or corruption (!prev)
# https://github.com/tensorflow/tensorflow/issues/8717
sudo apt-get -y install google-perftools
export LD_PRELOAD="/usr/lib/libtcmalloc.so.4"
# 预配置,优化可选,赶时间可不用
tar -xf Python-3.6.10.tgz
cd Python-3.6.10
./configure --prefix=/usr/local/python3 --enable-optimizations
# 编译源码
make && echo OOKK
# 另外,make 编译完后可以将整个源码包打包
# 打包命令
cd /tmp && tar -cf py36maked.tar Python-3.6.10 && gzip py36maked.tar
# 到相同配置的机器上安装,适用于云端多台相同的服务器
# 在任一台相同配置的服务器上
sudo -s # 切换到root 并仍停留在当前文件夹
rm -rf Python-3.6.0 # 删除旧的源码文件夹
rm -rf /usr/local/python3/ # 删除旧二进制文件
# 解压及安装
tar xf py36maked.tar.gz
cd Python-3.6.10
make install && echo OOOKKK # 安装3.6 版本
exit # 退出root 用户
# 软连接pip3 和python3.6,-f 强制创建有则覆盖
sudo ln -sf /usr/local/python3/bin/python3.6 /usr/bin/python3.6
sudo ln -sf /usr/local/python3/bin/pip3 /usr/bin/pip3
sudo ln -sf /usr/bin/pip3 /usr/bin/pip
# 多版本共存
# 原/usr/bin/python3 即/usr/bin/python3.4 不去动它
sudo update-alternatives --config python3 # 查看当前都有哪些版本
sudo update-alternatives --remove python3 /usr/bin/python3.6 # 删除多余的3.6 版本
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.4 1 # 最后的数字越大越优先
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 2
sudo update-alternatives --auto python3 # 设置为auto 模式
# 在auto 模式下update-alternatives 会选择优先级数值大的那个指向,这里是3.6
# 赋予当前用户操作/usr/local/python3/ 的权限以便pip 安装库文件
sudo chown -R `id -u`:`id -g` /usr/local/python3/
# 真正解决版本冲突
# pip install 时出现subprocess.CalledProcessError: Command '('lsb_release', '-a')'
# 方法一:找出lsb_release.py 藏身之处,https://www.jianshu.com/p/3a2877edebe8
find / -name lsb_release.py
/usr/lib/python3/dist-packages/lsb_release.py
/usr/lib/python2.7/dist-packages/lsb_release.py
# 复制lsb_release.py 到python3.6 的库目录
sudo cp /usr/lib/python3/dist-packages/lsb_release.py /usr/local/python3/lib/python3.6/
# lsb_release
# 显示No LSB modules are available. 表示正常了。
# 方法二:不推荐,不知道有什么后遗症,https://github.com/pypa/pip/issues/4924
sudo mv /usr/bin/lsb_release /usr/bin/lsb_release.bak
# 测试pip3 安装软件
pip3 install virtualenv --user
# --user 表用当前用户权限,不用也可以
# 因为当前用户已有操作/usr/local/python3/ 的权限了
# 第三方库文件主要装在/usr/local/python3/lib/python3.6/site-packages
# 升级pip
pip3 install --upgrade pip