Python升級(2.6->3.3.0)、依賴庫在遷移時注意點、升級后幾個問題


 

線上服務器Python版本默認是2.6,由於業務程序要求,需要將Python升級到3.3.0, 操作記錄如下:

Cenots6.8默認安裝的是2.6版本,要更新升級需安裝下gcc:
[root@openstack ~]# yum -y install gcc bzip2
系統會自動下載安裝gcc

下載python 3.3.0
[root@openstack ~]# wget http://python.org/ftp/python/3.3.0/Python-3.3.0.tar.bz2
解壓python 3.3.0
[root@openstack ~]# tar -jxvf Python-3.3.0.tar.bz2
進入目錄: 
[root@openstack ~]# cd Python-3.3.0
安裝python
[root@openstack ~]# ./configure
[root@openstack ~]# make all
[root@openstack ~]# make install
[root@openstack ~]# make clean
[root@openstack ~]# make distclean

然后不要急着去python -V,這時候實際上你還是發現是2.6.6
執行
[root@openstack ~]# mv /usr/bin/python /usr/bin/python.bak2.6 
會問你是否overwrite2.6的配置,輸入y
[root@openstack ~]# ln -s /usr/local/bin/python3.3 /usr/bin/python
這時候輸入python -V,應該是3.3.0了
[root@openstack ~]# python -V
Python 3.3.0

溫馨提示:
python升級后, 一定要記得修改/usr/bin/yum和/usr/bin/pip文件頭部信息中的python版本. 
否則yum和pip命令在python升級后將無法使用.
需要將這兩個命令的二進制文件開頭的
#!/usr/bin/python
修改為:
#!/usr/bin/python2.6

如果是centos7系統, 則/usr/libexec/urlgrabber-ext-down文件頭部信息中的python版本也要修改!

Python環境在從一台機器遷移到另一台機器時, 對於那些依賴庫的做法:

1) 遷移前, 在原機器上執行"pip freeze",將顯示的python依賴的庫信息放倒python.txt文件里
2) 將原機器的python.txt文件拷貝到要遷入的新機器上
3) 在新機器上執行"pip install -r python.txt" , 如果執行時出現超時報錯, 則需要加上"--index https://pypi.mirrors.ustc.edu.cn/simple/" 進行加速, 即:
    "pip install -r python.txt --index https://pypi.mirrors.ustc.edu.cn/simple/"

Python升級后的幾個小問題

1)python升級帶來的yum異常:File "/usr/bin/yum", line 30 
原因:這是因為yum采用Python作為命令解釋器,這可以從/usr/bin/yum文件中第一行#!/usr/bin/python發現。
而python版本之間兼容性不太好,使得2.X版本與3.0版本之間存在語法不一致問題。而CentOS 5自帶的yum采用的是python2.4,
當系統將python升級到2.6或3.0后,出現語法解釋錯誤

解決辦法:
[root@jenkins-server ~]# python -V
Python 3.3.0
  
[root@jenkins-server ~]# vim /usr/bin/yum
#!/usr/bin/python2.6               //由原來的/use/bin/python改為/usr/bin/python2.6
import sys
.......

2)Python升級帶來的pip命令異常:
Traceback (most recent call last):
   File "/usr/bin/pip", line 5, in <module>
      from pkg_resources import load_entry_point
ImportError: No module named 'pkg_resources'

解決辦法:
[root@jenkins-server ~]# cat /usr/bin/pip
#!/usr/bin/python2.6              //由原來的/use/bin/python改為/usr/bin/python2.6
# EASY-INSTALL-ENTRY-SCRIPT: 'pip==7.1.0','console_scripts','pip'

3) python升級后導致supervisord不能使用
  File "/usr/bin/supervisord", line 2, in <module>
     from supervisor.supervisord import main
ImportError: No module named 'supervisor'

[root@jenkins-server ~]# vim /usr/bin/supervisord
#!/usr/bin/python2.6                   //由原來的/use/bin/python改為/usr/bin/python2.6
from supervisor.supervisord import main
......
 
總結:
Python升級后,只要是在二進制文件里引用了"#!/usr/bin/python"的命令都不能正常使用!
必須要將這個引用的python信息改為升級前的那個版本的才可以正常使用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM