Redhat Linux下的python版本升级

本文详细介绍了如何从Python 2.7.3升级到Python 3.3.0的过程,包括更新gcc、下载并安装Python-3.3.0软件包、解压编译安装、建立软连接以及解决yum无法正常使用的解决方案。
部署运行你感兴趣的模型镜像
执行#Python与#python -V,看到版本号是2.4.3,很老了,而且之前写的都是跑在python3.X上面的,3.X和2.X有很多不同,
有兴趣的朋友可以参考下这篇文章: 
http://www.jb51.net/article/34011.htm

更新python千万不要把老版本的删除!新老版本是可以共存的,很多基本的命令、
软件包都要依赖预装的老版本python的,比如yum。 

一、升级到2.7.3
1. 升级安装
首先下载源tar包
可利用linux自带下载工具wget下载,如下所示:
# wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tar.gz

下载完成后到下载目录下,解压
# tar -zxvf Python-2.7.3.tar.gz

进入解压缩后的文件夹
cd Python-2.7.3

在编译前先在/usr/local建一个文件夹python2.7.3(作为python的安装路径,以免覆盖老的版本)
# mkdir /usr/local/python2.7.3

在解压缩后的目录下编译安装
# ./configure --prefix=/usr/local/python2.7.3
# make
make install

此时没有覆盖老版本,再将原来/usr/bin/python链接改为别的名字
# mv /usr/bin/python /usr/bin/python_old

再建立新版本python的链接
# ln -s /usr/local/python2.7.3/bin/python2.7 /usr/bin/python

这个时候输入
# python

就会显示出python的新版本信息
view sourceprint?
Python 2.7.3 (default, Sep 29 2013, 11:05:02)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-54)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

2.运行程序时出现错误:
File "~/PythonInstall/lib/python2.7/multiprocessing/process.py", line 129, in start
    from .forking import Popen
  File "~/PythonInstall/lib/python2.7/multiprocessing/forking.py", line 58, in <module>
    from pickle import Pickler
  File "~/PythonInstall/lib/python2.7/pickle.py", line 1266, in <module>
    import binascii as _binascii
ImportError: No module named binascii
是因为升级python版本不正常导致的。
 
回到源文件目录:
# cd .../Python-2.7.3
[Python-2.7.3]# make -s
building dbm using gdbm
/opt/PJT_python/python-2.7.3/Python-2.7.3/Modules/_sqlite/connection.c: In function '_pysqlite_set_result':
/opt/PJT_python/python-2.7.3/Python-2.7.3/Modules/_sqlite/connection.c:552: error: 'sqlite3_int64' undeclared 

(first use in this function)
/opt/PJT_python/python-2.7.3/Python-2.7.3/Modules/_sqlite/connection.c:552: error: (Each undeclared identifier is 

reported only once
/opt/PJT_python/python-2.7.3/Python-2.7.3/Modules/_sqlite/connection.c:552: error: for each function it appears in.)
/opt/PJT_python/python-2.7.3/Python-2.7.3/Modules/_sqlite/connection.c:552: error: expected ')' before 

'PyInt_AsLong'
/opt/PJT_python/python-2.7.3/Python-2.7.3/Modules/_sqlite/connection.c: In function '_pysqlite_build_py_params':
/opt/PJT_python/python-2.7.3/Python-2.7.3/Modules/_sqlite/connection.c:583: error: 'sqlite3_int64' undeclared 
(first use in this function)
/opt/PJT_python/python-2.7.3/Python-2.7.3/Modules/_sqlite/connection.c:583: error: expected ';' before 'val_int'
/opt/PJT_python/python-2.7.3/Python-2.7.3/Modules/_sqlite/connection.c:596: error: 'val_int' undeclared (first use  in this function)
/usr/bin/ld: /usr/local/lib/libz.a(adler32.o): relocation R_X86_64_32 against `a local symbol' can not be used when 

making a shared object; recompile with -fPIC
/usr/local/lib/libz.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
/usr/bin/ld: /usr/local/lib/libz.a(crc32.o): relocation R_X86_64_32 against `a local symbol' can not be used when 

making a shared object; recompile with -fPIC
/usr/local/lib/libz.a: could not read symbols: Bad value
collect2: ld returned 1 exit status

Python build finished, but the necessary bits to build these modules were not found:
_tkinter           bsddb185           dl              
imageop            sunaudiodev                        
To find the necessary bits, look in setup.py in detect_modules() for the module's name.

Failed to build these modules:
_sqlite3           binascii           zlib 

升级安装zlib
# wget http://sourceforge.net/projects/libpng/files/zlib/1.2.8/zlib-1.2.8.tar.gz
# tar -zxvf zlib-1.2.8.tar.gz 
# cd zlib-1.2.8
# ./configure 
# make install

# cd ../Python-2.7.3
# make -s
building dbm using gdbm
/opt/PJT_python/python-2.7.3/Python-2.7.3/Modules/_sqlite/connection.c: In function '_pysqlite_set_result':
/opt/PJT_python/python-2.7.3/Python-2.7.3/Modules/_sqlite/connection.c:552: error: 'sqlite3_int64' undeclared 

(first use in this function)
/opt/PJT_python/python-2.7.3/Python-2.7.3/Modules/_sqlite/connection.c:552: error: (Each undeclared identifier is reported only once
/opt/PJT_python/python-2.7.3/Python-2.7.3/Modules/_sqlite/connection.c:552: error: for each function it appears in.)
/opt/PJT_python/python-2.7.3/Python-2.7.3/Modules/_sqlite/connection.c:552: error: expected ')' before 

'PyInt_AsLong'
/opt/PJT_python/python-2.7.3/Python-2.7.3/Modules/_sqlite/connection.c: In function '_pysqlite_build_py_params':
/opt/PJT_python/python-2.7.3/Python-2.7.3/Modules/_sqlite/connection.c:583: error: 'sqlite3_int64' undeclared 

(first use in this function)
/opt/PJT_python/python-2.7.3/Python-2.7.3/Modules/_sqlite/connection.c:583: error: expected ';' before 'val_int'
/opt/PJT_python/python-2.7.3/Python-2.7.3/Modules/_sqlite/connection.c:596: error: 'val_int' undeclared (first use in this function)

Python build finished, but the necessary bits to build these modules were not found:
_tkinter           bsddb185           dl              
imageop            sunaudiodev                        
To find the necessary bits, look in setup.py in detect_modules() for the module's name.

Failed to build these modules:
_sqlite3 

升级安装sqlite3
# cd ..
# wget http://www.sqlite.org/2014/sqlite-autoconf-3080500.tar.gz
# tar -zxvf sqlite-autoconf-3080500.tar.gz
# cd sqlite-autoconf-3080500
# ./configure
# make
# make install

# cd ..
# cd python-2.7.3
# make -s
building dbm using gdbm

Python build finished, but the necessary bits to build these modules were not found:
_tkinter           bsddb185           dl              
imageop            sunaudiodev                        
To find the necessary bits, look in setup.py in detect_modules() for the module's name.

# make clean
# make all
# make install

到此,程序就能正常运行了;

二、升级到3.3.0
更新python: 
第1步:更新gcc,
因为gcc版本太老会导致新版本python包编译不成功 代码如下:
  #yum -y install gcc 

系统会自动下载并安装或更新,等它自己结束 

第2步:下载Python-3.3.0软件包 
代码如下:
# wget --no-check-certificate http://python.org/ftp/python/3.3.0/Python-3.3.0.tar.bz2 

注意:按照上述命令下载的软件包会存放在你当前的工作目录下,
wget命令是一个从网络上自动下载文件的自由工具,具体用法,
请参考这篇文章:http://www.jb51.net/os/RedHat/73089.html 

说明:命令中的数字就是版本号,你也可以把3.3.0换成你需要的版本.

第3步:解压已下载的二进制包并编译安装 
代码如下:
#tar -jxvf Python-3.3.0.tar.bz2 
#cd Python-3.3.0 
#./configure 
#make all 
#make install 
#make clean 
#make distclean 
# /usr/local/bin/python3 –V 
编译安装完毕以后,可以输入上面一行命令,查看版本 

第4步:建立软连接指向到当前系统默认python命令的bin目录,让系统使用新版本python 
#mv /usr/bin/python /usr/bin/python2.4 //当前python的版本为2.4所以是python2.4 
#ln -s /usr/local/bin/python3.3 /usr/bin/python 
输入
#python -V,
即可查看当前默认python版本 
默认的python成功指向3.3.0以后,yum不能正常使用,需要修改yum的配置文件 

第5步:修改yum配置文件 
#vi /usr/bin/yum 
把文件头部的
#!/usr/bin/python  改成  #!/usr/bin/python2.4 //改为之前的老版本号 
保存退出,yum即可正常使用。

如若有其他命令、软件不能正常使用,仿照yum配置文件的修改方法,修改其配置文件即可。 
至此,更新完毕。

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

### 升级Linux系统上的Python版本 在Linux系统中升级Python版本是一项常见的操作,尤其是在需要支持较新的功能或者兼容特定软件包的情况下。以下是详细的说明以及实现方式: #### 1. 检查当前Python版本 在执行任何升级之前,建议先确认当前系统的Python版本。可以使用以下命令来查看: ```bash python --version python3 --version ``` 如果系统中有多个Python版本,则可以通过`update-alternatives`工具管理它们。 --- #### 2. 下载最新版本的Python源码 访问官方Python网站获取最新的稳定版本,并将其下载到本地系统中。例如,假设要安装Python 3.9.7版本: ```bash wget https://www.python.org/ftp/python/3.9.7/Python-3.9.7.tgz tar -xf Python-3.9.7.tgz cd Python-3.9.7 ``` 此过程会将压缩包解压至指定目录[^4]。 --- #### 3. 配置编译环境 为了成功构建Python,通常需要一些开发依赖项。这些依赖项可以根据具体的Linux发行版有所不同。对于基于Debian的系统(如Ubuntu),可运行以下命令安装必要的库: ```bash sudo apt update sudo apt install build-essential libssl-dev zlib1g-dev \ libncurses5-dev libgdbm-dev libnss3-dev libsqlite3-dev \ libreadline-dev libffi-dev curl git ``` 如果是基于RedHat的系统(如CentOS或Fedora),则应使用`yum`或`dnf`代替`apt`: ```bash sudo yum groupinstall "Development Tools" sudo yum install openssl-devel bzip2-devel libffi-devel sqlite-devel gcc make ``` 完成以上步骤后,在Python源代码根目录下运行配置脚本来准备编译环境: ```bash ./configure --enable-optimizations ``` 该选项能够优化最终生成的解释器性能[^4]。 --- #### 4. 编译与安装 一旦配置完毕即可开始实际的编译工作: ```bash make && sudo make altinstall ``` 这里推荐使用`altinstall`而非普通的`install`,以防止覆盖现有的默认`python`二进制文件[^3]。 --- #### 5. 设置默认使用的Python版本 假如希望新安装的Python成为系统范围内的首选版本,那么就需要调整链接关系。通过`update-alternatives`机制可以帮助我们轻松达成这一目标: ```bash sudo update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.9 1 sudo update-alternatives --config python3 ``` 此时按照提示选择对应的编号即可切换到所需的版本[^3]。 --- #### 6. 测试更新效果 最后验证整个流程是否顺利完成: ```bash python3 --version which python3 ``` 正常情况下应该返回刚刚设置的新版本及其完整路径。 --- ### 注意事项 尽管大多数时候可以直接替换旧版本,但在某些特殊场景下可能会引发意想不到的问题——尤其是当核心服务严重依赖于原始版本时。因此务必提前做好备份计划并仔细评估风险[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北雨南萍

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值