此爲記錄我重裝Ubuntu後安裝Python的過程python
目前Ubuntu自帶的Python版本爲3.6,但官方都出3.8了,能不試一下新的功能嗎?ubuntu
打開https://www.python.org/downloads/source/python2.7
選擇下載tgz包(「Download Gzipped source tarball 」),解壓ui
輸入這三個命令es5
sudo apt update
sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget
sudo apt-get install make
cd 到Python解壓目錄,而後輸入如下命令spa
sudo ./configure --enable-optimizations
sudo make altinstall
到這裏Python3.8已經安裝完成,可是隻能輸入python3.8打開,這裏等到下面一併解決.net
直接輸入,安裝 code
sudo apt install python-pip
sudo apt install python3-pip
此時,ubuntu給我安裝了Python2.七、pip、pip二、pip3htm
個人想法是:Python2.七、Python3.六、Python3.8之間能夠隨便切換,並且pip和pip3會動態指向我切換的Python版本上(pip2就讓他指向Python2.7吧)blog
目前網上已經有很好的教程了,使用update-alternatives 來爲整個系統更改Python 版本的方法更好。
找到各個Python的路徑,使用which命令
which python2.7
which python3.6
which python3.8
記錄好他們所在路徑,我這裏是
/usr/bin/python2.7
/usr/bin/python3.6
/usr/local/bin/python3.8
接下來就是重點了,使用update-alternatives命令:
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6 2
sudo update-alternatives --install /usr/bin/python python /usr/local/bin/python3.8 3
這裏的最後一個參數是優先級,數越大越高,倒數第二個參數是各個版本Python所在位置,即咱們上一步記錄的東西
輸入
sudo update-alternatives --config python
選擇並切換Python版本,至此,Python版本兼容性問題已經解決
當我切換到Python3.8輸入pip -V,查看pip指向哪裏之時,會報錯
「 from pip import main ImportError: cannot import name 'main' 」
聽網上說,主要是因爲ubuntu升級pip的版本後致使的
個人作法是修改pip文件
注:必定要備份pip文件,包括pip、pip二、pip三、pip3.8(Python3.8的)
輸入echo $PATH,能夠看到環境變量
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
不巧的是pip和pip3在/usr/local/bin目錄下,而/usr/bin目錄下也有pip和pip3,由優先級知道輸入pip命令會優先執行/usr/local/bin目錄下的。
因此我這裏修改的是/usr/local/bin下的pip、pip三、pip3.8和/usr/bin下的pip2,假如想改/usr/bin下的pip和pip3的話能夠直接cp過去(注意先備份)
下面是修改的代碼,能夠直接複製粘貼過去
pip
#!/usr/bin/python # GENERATED BY DEBIAN import sys # Run the main entry point, similarly to how setuptools does it, but because # we didn't install the actual entry point from setup.py, don't use the # pkg_resources API. if sys.version_info.major == 3 and sys.version_info.minor == 8: from pip import __main__ if __name__ == '__main__': sys.exit(__main__._main()) else: from pip import main if __name__ == '__main__': sys.exit(main())
pip2
#!/usr/bin/python2.7 # GENERATED BY DEBIAN import sys # Run the main entry point, similarly to how setuptools does it, but because # we didn't install the actual entry point from setup.py, don't use the # pkg_resources API. from pip import main if __name__ == '__main__': sys.exit(main())
pip3和pip3.8
#!/usr/bin/python # -*- coding:utf-8 -*- # GENERATED BY DEBIAN import sys import os # Run the main entry point, similarly to how setuptools does it, but because # we didn't install the actual entry point from setup.py, don't use the # pkg_resources API. if sys.version_info.major == 3: if sys.version_info.minor == 8: from pip import __main__ if __name__ == '__main__': sys.exit(__main__._main()) else: from pip import main if __name__ == '__main__': sys.exit(main()) else: msg = "當前Python版本爲Python%s.%s,不能使用pip3!" % (sys.version_info.major, sys.version_info.minor) os.system("echo %s" % msg) os.system("""echo "請使用'update-alternatives --config python' 切換Python版本" """)
參考資料: