Linux python2升级python3下载安装

Linux CentOS6.5系统本来自带有python2.6,但是使用过程中发现有很多问题,所以准备升级Python3,同时暂时保存原来的python2,过程中遇到很多问题,在此记录一下。


一、Python3下载和安装

1、python官网下载最新版本python3:

    https://www.python.org/downloads/

在此我选择的是python3.6.5,点击进入详情页:


在此选择自己需要的版本,linux系统要选择上面的两个源码版本,我选择的是第一个gzip格式的,下载下来。

2、linux中安装Python3

  • 把下载的Python压缩包上传到Linux,我是放在/opt目录下(具体存放位置看个人喜好,一般是在/opt或/usr/local)

  • 解压文件:tar -zxvf Python-3.6.5.tgz

  • 进入解压后的目录,编译安装:
cd Python-3.6.5
./configure --prefix=/usr/local/python3.6.5  (注意这里要带--prefix来指定安装的位置)
make && make install
当看到如下信息,说明安装成功了,同时自动安装了setuptools、pip:
Collecting setuptools
Collecting pip
Installing collected packages: setuptools, pip
Successfully installed pip-9.0.3 setuptools-39.0.1
  • 安装完成后,会自动把python3加入环境变量path中:vim ~/.bash_profile
PATH=$PATH:$HOME/bin:/usr/local/python3.6.5/bin
export PATH
  • 修改完后执行source命令,使修改生效:source ~/.bash_profile
  • 检查python3及pip3是否可用:

至此,python3已经在linux中安装好了

二、linux中手动安装Python3常用模块

        安装好python后,经常需要下载各种模块和库,一般都是使用pip来install,非常方便。但是不幸的是我安装的服务器用的公司内网,不能联外网,所以pip没用,只能手动一个个下载安装哭

1、先来下载python3常用库:

    https://pypi.org/

    在这里搜索需要的库名就行了,非常全,比如常用的beautifulsoup,搜索出现的结果:

我选择的第二个,进去选择Download files

    

2、下载需要的版本,上传到linux上python安装目录的lib目录下(我这里是/usr/local/python3.6.5/lib/目录):
  • 解压文件:tar -xzvf  beautifulsoup4-4.6.0.tar.gz
  • 进入解压后的目录:cd beautifulsoup4-4.6.0
  • python3 install安装库:python3 setup.py install(如果提示python3命令找不到,那就加上完整路径,说明之前的环境变量没有设置成功),过一会就会提示安装完成了。

    这样一个python库就安装好了,如果需要别的库,就按这样的方法继续安装吧(虽然很麻烦)

三、修改原来的python2代码,来符合python3语法

1、print语句:
print "hello world" #python2中语法
print("hello world") #python3中语法
print("new %s version is %d, print must have ()"%("Python", 3)); #python3中语法
2、缺少python 库

可能会提示缺少各种python库,按照提示一个个安装就好了

3、NameError: name 'reload' is not defined

解决办法:

 from importlib import reload;
    reload(module_name)

因为在python2中reload是内置模块,但在python3中,需要从importlib中导入。

4、编码报错

python2源码中通过上面的方式来设置编码为utf8,但是在python3中会报错

因为在python3中默认使用的就是utf8编码格式,而且python3中sys库已经没有setdefaultencoding()方法了

  • 在python2.X中:
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
  • 在python3且低于3.3的版本中:
    import imp
    imp.reload(sys)
  • 在高于python3.4的版本中:
    import importlib
    importlib.reload(sys)
  • 5、TypeError: 'dict_keys' object does not support indexing

解决办法:把原来的d.keys()改为list(d.keys())

6、AttributeError: 'dict' object has no attribute 'iteritems'

Python 3 renamed dict.iteritems -> dict.items


7、UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbc in position 3: invalid start byte

    这是编码不一致,根据自己的文件编码来定义,我这里用的是iso-8859-1

8、TypeError: object of type 'map' has no len()


解决办法:先用list强制转换后再用len()

猜你喜欢

转载自blog.csdn.net/lijing742180/article/details/80593471