20200702
大版本沒區別時,不要自己編譯安裝!
ubuntu20.04 自帶 只有3.8.2 沒有2.7了. 而3.9要10月才出.所以,這時候,就別自己編譯python3.8.3 了. 一不留神,就各種問題,比如文件管理器打不開...只能重裝
基於Ubuntu 18.04 自帶了3.6,可惜 3.7秒出. 后面還有3.8
一個原則是:
自帶的3.6不要動
防止用apt install python3-XXX時版本不對.
理由: 自帶的2.7和3.6都是讓操作系統自己用的;
python是linux系發行版的一部分, 在linux發行版中的地位不低於windows里Windows/文件夾下的系統工具.正因為這樣,才不要隨便折騰每個發行版自帶的py版本.
相反,python不是windows的一部分,正因為不是,所以在windows下才可以隨便安裝卸載升級py都沒問題.
而自己跑程序用的最新版python解釋器,是為了:
用pipenv建立簡單運行環境,結合sublime text3 ctrl+B 運行簡單程序.
這樣,簡單的小程序就不需要用docker python鏡像+pycharm這么重型的工具了.
3.6歸操作系統, 3.8+為我自用
重在隔離.
1 安裝准備
編譯python源碼時,可能會報錯,
ModuleNotFoundError: No module named '_ctypes'
參考https://blog.csdn.net/sinat_36184075/article/details/80155392
1.1 安裝
sudo apt-get update sudo apt-get upgrade sudo apt-get dist-upgrade sudo apt-get install -y build-essential python-dev python-setuptools python-pip python-smbus sudo apt-get install -y build-essential libncursesw5-dev libgdbm-dev libc6-dev sudo apt-get install -y zlib1g-dev libsqlite3-dev tk-dev sudo apt-get install -y libssl-dev openssl sudo apt-get install -y libffi-dev liblzma-dev
參考https://tecadmin.net/install-python-3-7-on-ubuntu-linuxmint/
sudo apt-get install -y build-essential checkinstall sudo apt-get install -y libreadline-gplv2-dev libncursesw5-dev libssl-dev \ libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev
1.2 編譯openssl
因為之前編譯python3.8之后遇到了 import ssl 報錯 或者使用pika的時候
ModuleNotFoundError: No module named '_ssl'
說明編譯python時, openssl 沒有配置對
為了保險,還是建議自己先編譯一下openssl
https://www.cnblogs.com/xuanmanstein/p/11547505.html
2下載編譯安裝
2.1下載
注意小版本號可能升級(注意瀏覽py官網新版本源碼發布地址:https://www.python.org/downloads/source/)
cd /usr/src sudo wget https://www.python.org/ftp/python/3.8.3/Python-3.8.3.tgz --no-check-certificate
sudo tar xzf Python-3.8.3.tgz
2.2 編譯/安裝
刪除 pip virtualenvs 緩存
rm -rf ~/.cache/piprm -rf ~/.local/share/virtualenvs
編譯安裝
cd /usr/src/Python-3.8.3
sudo ./configure --enable-shared --enable-optimizations --with-openssl=/usr/src/openssl-1.1.1d
sudo make
sudo make altinstall
sudo ldconfig /usr/local/lib
注意帶上 --enable-shared, 因為編譯geos等庫時可能需要, ubuntu自帶的3.6也是帶的
altinstall 保證沒有替換系統自帶的python3版本
必須有 ldconfig 這句,不然啟動時會報錯
python3.8: error while loading shared libraries: libpython3.8.so.1.0: cannot open shared object file: No such file or directory
用
python3.8
可以啟動. 表示編譯成功
再檢查一下pip3.8是不是正確,防止指向系統自帶的3.6
更新一下pip
sudo pip3.8 install --upgrade pip
pip3 可能不再指向3.6了
如果不對,就修正一下