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

安装完成后,把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()

python3中还有很多跟python2不兼容的地方,暂时先列这么多......

1

END

1

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180606G1SVQK00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券