Linux升级python到3.8.2

系统环境 Ubuntu 18.04, 记一次升级过程, 以免搞忘了.

1 卸载已安装的python

我的环境使用apt安装了python3.6和python3.8, 现在卸载这两个. 然后使用源码编译安装最新版python3.8.2.

# 卸载3.6
sudo apt purge python3.6
# 查看系统还有哪些python包
sudo dpkg -l | grep python
# 清除配置
sudo apt purge python3.6-minimal python3.6-dev python3.6-venv python3 
# 删除3.6的pip安装的包
sudo rm -rf /usr/local/lib/python3.6 
rm -rf ~/.local/lib/python3.6 

# 同理卸载python3.8
sudo apt purge python3.8-minimal python3.8-venv python3.8 
# 删除3.8的pip安装的包
sudo rm -rf /usr/local/lib/python3.8 
rm -rf ~/.local/lib/python3.8 

# 自动卸载不需要的包  
sudo apt autoremove   # 可能会误删一些包, 不过不怕, 以后缺什么再安装什么
# 安装一个常用的但被误卸载的软件
sudo apt install wget
# 删除为了满足某些依赖安装的,但现在不再需要的软件包
sudo apt autoclean

2 从源码编译安装python

mkdir -p ~/src; cd ~/src    # 下载源码包 放到该目录
# 解压源码
tar -zxf Python-3.8.2.tgz

# 编译源码
# 进入源码目录
cd ~/src/Python-3.8.2
# configure
./configure
# 使用make命令编译源码 -j表示并行数量
make -j64

这里要查看是否有module没有成功, 比如我这里显示没有成功的模块有

The necessary bits to build these optional modules were not found:
_bz2                  _curses               _curses_panel      
_dbm                  _gdbm                 _lzma              
_sqlite3              _tkinter              _uuid              
readline                                                       
To find the necessary bits, look in setup.py in detect_modules() for the module's name.

安装相关依赖再进行编译

# 安装依赖
sudo apt update 
sudo apt install libgdbm-dev tk-dev libsqlite3-dev libncurses5-dev libffi-dev liblzma-dev libreadline-dev libbz2-dev libssl-dev uuid-dev libgdbm-compat-dev
# 使用configure生成构建档
./configure
# 使用make命令编译源码 -j表示并行数量
make -j64

然后看提示还会有报错信息: uuid和curses会编译出错. 处理方法参考: python编辑错误解决

# 解决curses的错误
sed -i "s/Werror=implicit-function-declaration/Wno-error/g" configure
# 解决uuid的错误 设置环境变量
export CPPFLAGS=" -Wno-error=coverage-mismatch"

# 重新运行configure
./configure
# 编译
make -j64

确保不再有报错信息, 再使用make编译后的文件进行安装

# 安装
sudo make install 
# 重新软链接
sudo rm -rf /usr/local/bin/{python,pip}
sudo ln -sf /usr/local/bin/python3 /usr/local/bin/python
sudo ln -sf /usr/local/bin/pip3 /usr/local/bin/pip
# 更新pip 
sudo pip install --upgrade pip
# 全局安装 wheel 和 virtualenv
sudo pip install wheel
sudo pip install virtualenv

3 安装 lightGBM 和 xgboost

参考文档: 官网

# 更新cmake工具 安装 lightGBM 和 xgboost 需要cmake来进行编译
# 卸载cmake
sudo apt purge cmake 
# 下载源码
cd ~/src;    # 下载 cmake-3.17.0.tar.gz 放到该目录
# 解压源码
tar -zxf cmake-3.17.0.tar.gz && cd cmake-3.17.0 
# 编译cmake
./bootstrap 
make -j64 
# 安装cmake 
sudo make install 

# lightGBM 安装方式有两种 可以使用pip安装  以下两种方式选一种即可, 我使用源码安装
# 方式 1 使用源码编译安装lightGBM gpu版本
#    启用代理 
source /opt/.net_env
#    下载源码
cd ~/src
git clone --recursive https://github.com/microsoft/LightGBM 
#   使用cmake生成构建档 并使用make编译
mkdir -p LightGBM/build && cd LightGBM/build
cmake -DUSE_GPU=1 ..
make -j64
#   生成 whl 包
cd ../python-package
python setup.py bdist_wheel
#   使用 pip 安装 whl 包
pip install --user dist/lightgbm-2.3.2-py3-none-any.whl

# 方式 2 使用pip安装 gpu版本
pip install lightgbm --install-option=--gpu    # 如果遇到权限错误 用sudo提权


# 安装xgboost 安装方式有两种 可以使用pip安装  以下两种方式选一种即可, 我使用源码安装 
# 方式 1 使用源码编译安装 xgboost 支持gpu版本
cd ~/src
git clone --recursive https://github.com/dmlc/xgboost
mkdir -p xgboost/build && cd xgboost/build 
#   使用cmake生成构建档 并使用make编译
cmake .. -DUSE_CUDA=ON
make -j64
#   生成 whl 包
cd ../python-package
python setup.py bdist_wheel
#   使用 pip 安装 whl 包
pip install --user dist/xgboost-1.1.0_SNAPSHOT-cp38-cp38-linux_x86_64.whl
#   测试xgboost
python tests/benchmark/benchmark_tree.py --tree_method=gpu_hist    # 4.32秒
python tests/benchmark/benchmark_tree.py --tree_method=hist    # 14.98秒

# 方式 2 使用pip安装
pip install xgboost    # 如果遇到权限错误 用sudo提权


# 至于其他包 使用pip安装即可

lightgbm和xgboost安装gpu版本, 我的测试结果: 日常训练模型速度会提升近10倍(使用cpu训练用19分37秒, 使用gpu用时2分14秒).

4 删除临时文件

rm -rf /tmp/* 
rm -rf /var/cache/apt/* 
rm -rf ~/.cache/pip/*

5 添加环境变量

我习惯使用非root权限来pip安装包, 所以需要添加可执行程序目录到 PATH 环境变量中. 新建 ~/.profile 添加环境变量, 然后在 ~/.bash_profile~/.zshrc 中引入该文件, 以便对我的 bash 和 zsh 环境都生效, 后期加环境变量也不用配置两次
~/.profile

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/.local/bin" ] ; then
    PATH="$HOME/.local/bin:$PATH"
fi

~/.bash_profile~/.zshrc 中增加以下内容

# if ~/.profile exists
if [ -f ~/.profile ]; then
    . ~/.profile
fi

6 管理jupyter的kernel

python 升级之后, 之前的jupyter的kernel还可能是旧的配置, 如果需要管理, 可以使用以下的方法进行. 参考文档: 这里

查看当前的内核

jupyter kernelspec list

删除指定的内核

jupyter kernelspec remove KERNEL_NAME

增加指定的内核

# 比如想要增加哪个路径下的python 就执行对应目录的python就行了
/home/user-name/anaconda3/envs/newenv/bin/python -m ipykernel install --name XXXX

完。

Logo

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

更多推荐