爲何舉例來講這個安裝過程呢, 由於如今的開發部署的主流linux就是CentOS,而大部分人目前所使用的版本是CentOS Linux release 7.4
該系統已經自帶集成了 Python2.7版本及pip,若是沒有也能夠經過yum方式安裝。而CentOS 6則自帶Python2.6.6 且沒有pip。而現行大多數的Python開源項目都要求Python在2.7及以上,因此若是你要部署項目的機器是CentOS 6, 則須要升級Python版本並安裝pip。看起來就這點東西,可是在執行過程當中會遇到許多問題,接下來一步一步給你講解,讓你從根上理解Python多環境安裝。css
針對pip的安裝普通使用2中方式,一種是yum安裝,一種是源碼包安裝,這個直接在百度搜索也能夠搜到一大把有用的內容。這裏2個系統都分別介紹一下node
若是你的機器上沒有pip,能夠執行以下命令python
yum -y install python-pip
複製代碼
若是安裝失敗,根據提示解決對應問題,有的人可能須要先安裝epel-releaselinux
yum -y install epel-release
yum -y install python-pip
複製代碼
cd /opt/
wget https://pypi.python.org/packages/11/b6/abcb525026a4be042b486df43905d6893fb04f05aac21c32c638e939e447/pip-9.0.1.tar.gz#md5=35f01da33009719497f01a4ba69d63c9
tar -xzvf pip-9.0.1.tar.gz
cd pip-9.0.1
python setup.py install
複製代碼
這也是官方文檔中說明的方法, 可是對於某些操做系統及Python版本會不成功
pip官方文檔nginx
# 下載安裝腳本
cd /opt/
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
# 運行安裝腳本
python get-pip.py
複製代碼
注意:用哪一個版本的 Python 運行安裝腳本,pip 就被關聯到哪一個版本web
python3 get-pip.py # 運行安裝腳本。pip關聯到了python3
python2 get-pip.py # 運行安裝腳本。pip關聯到了python2
複製代碼
在看下文以前,建議先觀看==>只有理解了虛擬環境纔算真正掌握 Python 環境sql
這裏選用centos6來作講解,會更有表明性,會有各類各樣的問題發生,固然你也可能不會發生,這和你執行的順序有關。編程
前文已經說過,centos6 默認自定了 Python2.6 版本,那麼如今直接動手賺一個 Python2.7 的版原本作演示。 你問我爲何不直接上Python3.7+,不爲何,就是想搞事情(由於公司項目不支持python3,且必須是python2.7以上,後續升級3.7。)話很少說,看下面命令:bootstrap
# step 1
cd /opt/
wget http://python.org/ftp/python/2.7.3/Python-2.7.3.tar.bz2 #下載python 版本包
tar -jxvf Python-2.7.3.tar.bz2 # 解壓文件
# step 2
cd Python-2.7.3 # 進入文件夾
# 檢查安裝平臺屬性,系統是否有編譯時所須要額庫,以及庫的版本是否知足編譯須要
./configure
make all && make install && make clean && make distclean # 編譯安裝及清理
# step 3
mv /usr/bin/python /usr/bin/python2.6.6 # 移動備份原Python 指令
ln -s /usr/local/bin/python2.7 /usr/bin/python #設置Python bin命令的軟鏈接指向
複製代碼
此時輸入Python -V
,會顯示以下結果centos
[root@alpha-silvergrd-107-13 Python-2.7.3]# python -V
Python 2.7.3
複製代碼
然而由於我只先實踐了以後纔來寫文章的,因此有些命令我沒執行, 爲了後面方便演示,我說下我本機的狀況, step 3中我執行的是ln -s /usr/local/bin/python2.7 /usr/bin/python2.7
,全部個人這樣查看效果
這個地方須要我解釋嗎?各位看官問問身邊的同事就好或者百度就行,就不贅述了。
若是已經先執行了上一個標題內容 #只想安裝pip,那麼你就有麻煩了,若是沒有,那你就沒什麼大麻煩!!
由於你以前已經安裝了pip, 而那個時候你係統的Python版本是2.6,因此pip被關聯上了Python2.6, 此時若是你使用這個命令python2.7 -m pip install scrapy
,會報以下錯誤,這是由於Python2.7沒有與之關聯的匹配pip
python -m pip install scrapy
則不會
cd /opt/
cd pip-9.0.1
python2.7 setup.py install # pip關聯到Python2.7上
複製代碼
注意:用哪一個版本的 Python 運行安裝腳本,pip 就被關聯到哪一個版本
再次執行就沒有此錯誤了
cd /opt/
wget https://pypi.python.org/packages/11/b6/abcb525026a4be042b486df43905d6893fb04f05aac21c32c638e939e447/pip-9.0.1.tar.gz#md5=35f01da33009719497f01a4ba69d63c9
tar -xzvf pip-9.0.1.tar.gz
cd pip-9.0.1
# 2者選其一,看狀況
python2.7 setup.py install(python setup.py install)
複製代碼
如今多版本Python和pip 都已經安裝好了,那麼如何使用它來下載一個包呢?
這裏以安裝一個scrapy爲例
python2.7 -m pip install scrapy -i https://pypi.tuna.tsinghua.edu.cn/simple
# or
python -m pip install scrapy -i https://pypi.tuna.tsinghua.edu.cn/simple
# python2.7: 使用的語言版本
# -m: 將模塊看成腳本運行
# -i:使用鏡像源
複製代碼
由於不是邊操做邊寫的文章,其實在執行的過程當中遇到了挺多錯誤的,可是這些錯誤我也不太記得是在哪些步驟發生的了,全部統一歸類在這裏,若是正好你遇到了,能夠直接照着解決,centos6問題較多,centos7不會有這麼多問題。
這裏以centos6爲例,由於問題多。
wget --no-check-certificate https://bootstrap.pypa.io/ez_setup.py
python2.7 ez_setup.py --insecure
複製代碼
在./configure過程當中,若是沒有加上–with-ssl參數時,默認安裝的軟件涉及到ssl的功能不可用,恰好pip過程須要ssl模塊,而因爲沒有指定,因此該功能不可用。
解決辦法是從新對python2.7.3進行編譯安裝,用如下過程來實現編譯安裝:
# 查看openssl安裝包,發現缺乏openssl-devel包
rpm -aq|grep openssl-devel
# yum安裝openssl-devel
yum install openssl-devel -y
# 查看安裝結果
rpm -aq|grep openssl
# 從新對python2.7進行編譯安裝,用一下過程來實現編譯安裝
cd /opt/Python2.7.3
./configure --with-ssl #添加ssl選項
make all && make install && make clean && make distclean
複製代碼
yum install sqlite-devel
cd /opt/Python2.7.3
./configure
make all && make install && make clean && make distclean
複製代碼
vi /usr/bin/yum
複製代碼
開頭的第一行內容#!/usr/bin/python
使用了python,若是你的python版本變了,也就是python -V
不是最初的內容了,你須要把這個內容改成原先的python內容,好比
mv /usr/bin/python /usr/bin/python999
複製代碼
那麼#!/usr/bin/python
就要改成#!/usr/bin/python999
。 固然你也能夠找匹配的當前python版本的yum源文件的內容過來替換,但不建議(麻煩)
參考:Linux/Centos下/lib64/libc.so.6: version `GLIBC_2.14' not found
但不建議,這裏對系統層面的改動比較大,若是是生產服務器,很難預估風險。
一般這種狀況能夠採用以下方式修復,從新下載系統原有的包進行安裝修復
# 下載對應操做系統rpm包
wget http://mirrors.ustc.edu.cn/centos/6.10/os/x86_64/Packages/python-2.6.6-66.el6_8.x86_64.rpm
wget http://mirrors.ustc.edu.cn/centos/6.10/os/x86_64/Packages/python-devel-2.6.6-66.el6_8.x86_64.rpm
wget http://mirrors.ustc.edu.cn/centos/6.10/os/x86_64/Packages/python-libs-2.6.6-66.el6_8.x86_64.rpm
wget http://mirrors.ustc.edu.cn/centos/6.10/os/x86_64/Packages/python-pycurl-7.19.0-9.el6.x86_64.rpm
wget http://mirrors.ustc.edu.cn/centos/6.10/os/x86_64/Packages/python-setuptools-0.6.10-4.el6_9.noarch.rpm
wget http://mirrors.ustc.edu.cn/centos/6.10/os/x86_64/Packages/python-urlgrabber-3.9.1-11.el6.noarch.rpm
wget http://mirrors.ustc.edu.cn/centos/6.10/os/x86_64/Packages/python-iniparse-0.3.1-2.1.el6.noarch.rpm
wget http://mirrors.ustc.edu.cn/centos/6.10/os/x86_64/Packages/rpm-python-4.8.0-59.el6.x86_64.rpm
wget http://mirrors.ustc.edu.cn/centos/6.10/os/x86_64/Packages/yum-3.2.29-81.el6.centos.noarch.rpm
wget http://mirrors.ustc.edu.cn/centos/6.10/os/x86_64/Packages/yum-metadata-parser-1.1.2-16.el6.x86_64.rpm
wget http://mirrors.ustc.edu.cn/centos/6.10/os/x86_64/Packages/yum-utils-1.1.30-41.el6.noarch.rpm
wget http://mirrors.ustc.edu.cn/centos/6.10/os/x86_64/Packages/yum-plugin-fastestmirror-1.1.30-41.el6.noarch.rpm
wget http://mirrors.ustc.edu.cn/centos/6.10/os/x86_64/Packages/yum-plugin-protectbase-1.1.30-41.el6.noarch.rpm
wget http://mirrors.ustc.edu.cn/centos/6.10/os/x86_64/Packages/yum-plugin-aliases-1.1.30-41.el6.noarch.rpm
wget http://mirrors.ustc.edu.cn/centos/6.10/os/x86_64/Packages/yum-utils-1.1.30-41.el6.noarch.rpm
wget http://mirrors.ustc.edu.cn/centos/6.10/os/x86_64/Packages/yum-utils-1.1.30-41.el6.noarch.rpm
wget http://mirrors.ustc.edu.cn/centos/6.10/os/x86_64/Packages/yum-utils-1.1.30-41.el6.noarch.rpm
wget http://mirrors.ustc.edu.cn/centos/6.10/os/x86_64/Packages/yum-utils-1.1.30-41.el6.noarch.rpm
wget http://mirrors.ustc.edu.cn/centos/6.10/os/x86_64/Packages/yum-3.2.29-81.el6.centos.noarch.rpm
wget http://mirrors.ustc.edu.cn/centos/6.10/os/x86_64/Packages/yum-utils-1.1.30-41.el6.noarch.rpm
# 安裝(依賴報錯的話缺什麼下什麼)
rpm -Uvh --replacepkgs rpm-python*.rpm
rpm -Uvh --replacepkgs yum*.rpm
# or
rpm -Uvh --replacepkgs yum*.rpm –force --nodeps
複製代碼
yum install zlib
# 從新編譯Python
./configure --with-zlib
make all && make install && make clean && make distclean
複製代碼
pip install -U pip
pip install -U setuptools
pip install wheel
複製代碼
有些內容沒有細講也有部分忘記了,可能每一個人遇到的問題也不一樣,我挑了個遇到問題最多的來講,上文中已經共存了Python2.6和Python2.7兩個版本,那在這基礎上再添加其餘的Python版本也是一樣的操做再來一遍,依次重複操做。惟一有變化的就是包下載的不一樣。
那麼若是你有疑問能夠在底部留言評論,我會一一解答,順便也回一下我在這個過程當中忘記了的事。
其實還可使用venv、conda來解決這類問題,可是不想依賴第三方工具,因此沒研究,後續會補充這方面文章。
文章每週持續更新,能夠微信搜索「 十分鐘學編程 」第一時間閱讀和催更,若是這個文章寫得還不錯,以爲有點東西的話 ~求點贊👍 求關注❤️ 求分享❤️
各位的支持和承認,就是我創做的最大動力,咱們下篇文章見!