Ubuntu 14.04 源码编译安装Python3.6 (保留系统预装的3.4)

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

扫描二维码关注公众号,回复: 10886854 查看本文章

# 赋予当前用户操作/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

发布了27 篇原创文章 · 获赞 4 · 访问量 9691

猜你喜欢

转载自blog.csdn.net/yoshubom/article/details/104352748
今日推荐