每日感悟:
工作这么辛苦,如果狠心辞职,自主创业会怎样呢?
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
领取专属 10元无门槛券
私享最新 技术干货