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
完。