python2to3
㈠ 如何將python2的代碼升級到python3
目前python最穩定版當數2.5啦,其次用得比較多的是2.6,
3由於修改了一些東東導致不能向下兼容,而很多python庫都尚未升級到3.0版,可能導致代碼還是不能運行
在目標機上,裝個低版本的python就行了,推薦2.5
㈡ python2.7升級3.7 報SyntaxError: invalid syntax錯誤,新手請教代碼要怎麼修改
python2代碼轉python3有自帶的工具可以實現。
windows系統下的使用方法:
(1)將python安裝包下的Tools/Scripts下面的2to3.py拷貝到需要轉換文件目錄中。
(2)命令行窗口切換到需要轉換的文件目錄下,運行命令2to3.py test.py
可列印test.py,在python2與python3的差異。
(3)命令行窗口切換到需要轉換的文件目錄下,運行命令2to3.py -w test.py
將test.py備份為test.py.bak文件
test.py將相應的格式及相應包改寫為python3
但是這個改動改的只是基礎的一些。部分包在python2跟python3中的名稱有所差異,需要根據情況再做修改。有遇到問題歡迎追問
㈢ python中python2和python3之間怎麼轉換
python中python2和python3之間的轉換方式如下:
一、放棄python 2.6之前的python版本
python 2.6之前的python版本缺少一些新特性,會給你的遷移工作帶來不少麻煩。如果不是迫不得已還是放棄對之前版本的支持吧。
二、使用 2to3 工具對代碼進行檢查和轉換
2to3是python自帶的一個代碼轉換工具,可以將python2的代碼自動轉換為python3的代碼。當然,不幸的是轉換出的代碼並沒有對python2的兼容做任何的處理。所以我們並不真正使用2to3轉換出的代碼。執行2to3.py 查看輸出信息,並修正相關問題。為了簡化這個轉換過程,這個腳本會將你的Python 2程序源文件作為輸入,然後自動將其轉換到Python 3的形式。
㈣ python2和python3的區別,轉換及共存
python2和python3的區別
1.性能
Py3.0運行 pystone benchmark的速度比Py2.5慢30%。Guido認為Py3.0有極大的優化空間,在字元串和整形操作上可以取得很好的優化結果。
Py3.1性能比Py2.5慢15%,還有很大的提升空間。
2.編碼
Py3.X源碼文件默認使用utf-8編碼,這就使得以下代碼是合法的:
>>> 中國 = 'china'
>>>print(中國)
china
3. 語法
1)去除了<>,全部改用!=
在Python 2里,為了得到一個任意對象的字元串表示,有一種把對象包裝在反引號里(比如`x`)的特殊語法。在Python 3里,這種能力仍然存在,但是你不能再使用反引號獲得這種字元串表示了。你需要使用全局函數repr()。
Notes
Python 2
Python 3
①
`x` repr(x)
②
`'PapayaWhip' + `2`` repr('PapayaWhip'+repr(2))
Note:x可以是任何東西—一個類,函數,模塊,基本數據類型,等等。repr()函數可以使用任何類型的參數。
2)去除``,全部改用repr()
3)關鍵詞加入as 和with,還有True,False,None
4)整型除法返回浮點數,要得到整型結果,請使用//
由於人們常常會忽視Python 3在整數除法上的改動(寫錯了也不會觸發Syntax Error),所以在移植代碼或在Python 2中執行Python 3的代碼時,需要特別注意這個改動。
所以,我還是會在Python 3的腳本中嘗試用float(3)/2或 3/2.0代替3/2,以此來避免代碼在Python 2環境下可能導致的錯誤(或與之相反,在Python 2腳本中用from __future__ import division來使用Python 3的除法)。
Python 2
print'3/2=',3/2print'3//2=',3//2print'3/2.0=',3/2.0print'3//2.0=',3//2.0
3/2=13//2=13/2.0=1.53//2.0=1.0
默認,如果兩個操作數都是整數,Python 2 自動執行整型計算。
Python 3
print('3/2=',3/2)print('3//2=',3//2)print('3/2.0=',3/2.0)print('3//2.0=',3//2.0)
3/2=1.53//2=13/2.0=1.53//2.0=1.0
Note: 需要注意的是「雙劃線」(//)操作符將一直執行整除,而不管操作數的類型,這就是為什麼 5.0//2.0 值為 2.0。Python 3 中,/ 操作符是做浮點除法,而 // 是做整除(即商沒有餘數,比如 10 // 3 其結果就為 3,余數會被截除掉,而 (-7) // 3 的結果卻是 -3。這個演算法與其它很多編程語言不一樣,需要注意,它們的整除運算會向0的方向取值。而在 Python 2 中,/ 就是整除,即和 Python 3 中的 // 操作符一樣。
5)加入nonlocal語句。使用noclocal x可以直接指派外圍(非全局)變數
6)print
去除print語句,加入print()函數實現相同的功能。同樣的還有 exec語句,已經改為exec()函數
在Python 2里,print是一個語句。無論你想輸出什麼,只要將它們放在print關鍵字後邊就可以。
Python 3里,print()是一個函數。就像其他的函數一樣,print()需要你將想要輸出的東西作為參數傳給它。
例如:
2.X: print "The answer is", 2*2
3.X: print("The answer is", 2*2)
2.X: print x, # 使用逗號結尾禁止換行
3.X: print(x, end=" ") # 使用空格代替換行
在Python 2里,如果你使用一個逗號(,)作為print語句的結尾,它將會用空格分隔輸出的結果,然後在輸出一個尾隨的空格(trailing space),而不輸出回車(carriage return)。在Python 3里,通過把end=' '作為一個關鍵字參數傳給print()可以實現同樣的效果。參數end的默認值為'
',所以通過重新指定end參數的值,可以取消在末尾輸出回車符。
2.X: print # 輸出新行
3.X: print() # 輸出新行
2.X: print >>sys.stderr, "fatal error"
3.X: print("fatal error", file=sys.stderr)
在Python 2里,你可以通過使用>>pipe_name語法,把輸出重定向到一個管道,比如sys.stderr。在Python 3里,你可以通過將管道作為關鍵字參數file的值傳遞給print()來完成同樣的功能。參數file的默認值為std.stdout,所以重新指定它的值將會使print()輸出到一個另外一個管道。
2.X: print (x, y) # 輸出repr((x, y))
3.X: print((x, y)) # 不同於print(x, y)!
exec語句
exec()函數使用一個包含任意Python代碼的字元串作為參數,然後就像執行語句或者表達式一樣執行它。exec()跟eval()是相似的,但是exec()更加強大並更具有技巧性。eval()函數只能執行單獨一條表達式,但是exec()能夠執行多條語句,導入(import),函數聲明—實際上整個Python程序的字元串表示也可以。
Notes
Python 2
Python 3
①
execcodeString exec(codeString)
②
execcodeStringina_global_namespace exec(codeString,a_global_namespace)
③
execcodeStringina_global_namespace,a_local_namespace exec(codeString,a_global_namespace,a_local_namespace)
在最簡單的形式下,因為exec()現在是一個函數,而不是語句,2to3會把這個字元串形式的代碼用括弧圍起來。
Python 2里的exec語句可以指定名字空間,代碼將在這個由全局對象組成的私有空間里執行。Python 3也有這樣的功能;你只需要把這個名字空間作為第二個參數傳遞給exec()函數。
更加神奇的是,Python 2里的exec語句還可以指定一個本地名字空間(比如一個函數里聲明的變數)。在Python 3里,exec()函數也有這樣的功能。
- execfile('a_filename') exec(compile(open('a_filename').read(),'a_filename','exec'))
- for line in a_file.xreadlines(): for line in a_file:
- for line in a_file.xreadlines(5): no change (broken)
如果你以前調用沒有參數的xreadlines(),2to3會把它轉換成文件對象本身。在Python 3里,這種轉換後的代碼可以完成前同樣的工作:一次讀取文件的一行,然後執行for循環的循環體。
如果你以前使用一個參數(每次讀取的行數)調用xreadlines(),2to3不能為你完成從Python 2到Python 3的轉換,你的代碼會以這樣的方式失敗:AttributeError: '_io.TextIOWrapper' object has no attribute 'xreadlines'。你可以手工的把xreadlines()改成readlines()以使代碼能在Python 3下工作。(readline()方法在Python 3里返回迭代器,所以它跟Python 2里的xreadlines()效率是不相上下的。)
- u'PapayaWhip' 'PapayaWhip'
- ur'PapayaWhipfoo' r'PapayaWhipfoo'
Python 2里的Unicode字元串在Python 3里即普通字元串,因為在Python 3里字元串總是Unicode形式的。
Unicode原始字元串(raw string)(使用這種字元串,Python不會自動轉義反斜線"")也被替換為普通的字元串,因為在Python 3里,所有原始字元串都是以Unicode編碼的。
- unicode(anything) str(anything)
- from sys import maxint from sys import maxsize
execfile語句
就像以前的exec語句,Python 2里的execfile語句也可以像執行Python代碼那樣使用字元串。不同的是exec使用字元串,而execfile則使用文件。在Python 3里,execfile語句已經被去掉了。如果你真的想要執行一個文件里的Python代碼(但是你不想導入它),你可以通過打開這個文件,讀取它的內容,然後調用compile()全局函數強制Python解釋器編譯代碼,然後調用新的exec()函數。
Notes
Python 2
Python 3
7)輸入函數改變了,刪除了raw_input,用input代替: Python 2有兩個全局函數,用來在命令行請求用戶輸入。第一個叫做input(),它等待用戶輸入一個Python表達式(然後返回結果)。第二個叫做raw_input(),用戶輸入什麼它就返回什麼。這讓初學者非常困惑,並且這被廣泛地看作是Python語言的一個「肉贅」(wart)。Python 3通過重命名raw_input()為input(),從而切掉了這個肉贅,所以現在的input()就像每個人最初期待的那樣工作。
2.X:guess = int(raw_input('Enter an integer : ')) # 讀取鍵盤輸入的方法
3.X:guess = int(input('Enter an integer : '))
Note:如果你真的想要請求用戶輸入一個Python表達式,計算結果,可以通過調用input()函數然後把返回值傳遞給eval()。
I/O方法xreadlines()
在Python 2里,文件對象有一個xreadlines()方法,它返回一個迭代器,一次讀取文件的一行。這在for循環中尤其有用。事實上,後來的Python 2版本給文件對象本身添加了這樣的功能。
在Python 3里,xreadlines()方法不再可用了。2to3可以解決簡單的情況,但是一些邊緣案例則需要人工介入。
Notes
Python 2
Python 3
①
②
8)改變了順序操作符的行為,例如x<y,當x和y類型不匹配時拋出TypeError而不是返回隨即的 bool值
9)去除元組參數解包。不能def(a, (b, c)):pass這樣定義函數了
10)新式的8進制字變數,相應地修改了oct()函數。
2.X的方式如下:
>>> 0666
438
>>> oct(438)
'0666'
3.X這樣:
>>> 0666
SyntaxError: invalid token (<pyshell#63>, line 1)
>>> 0o666
438
>>> oct(438)
'0o666'
11)增加了 2進制字面量和bin()函數
>>> bin(438)
'0b110110110'
>>> _438 = '0b110110110'
>>> _438
'0b110110110'
12)擴展的可迭代解包。在Py3.X 里,a, b, *rest = seq和 *rest, a = seq都是合法的,只要求兩點:rest是list對象和seq是可迭代的。
13)新的super(),可以不再給super()傳參數,
>>> class C(object):
def __init__(self, a):
print('C', a)
>>> class D(C):
def __init(self, a):
super().__init__(a) # 無參數調用super()
>>> D(8)
C 8
<__main__.D object at 0x00D7ED90>
14)支持class decorator。用法與函數decorator一樣:
>>> def foo(cls_a):
def print_func(self):
print('Hello, world!')
cls_a.print = print_func
return cls_a
>>> @foo
class C(object):
pass
>>> C().print()
Hello, world!
class decorator可以用來玩玩狸貓換太子的大把戲。更多請參閱PEP 3129
4. 字元串和位元組串
Python 2有兩種字元串類型:Unicode字元串和非Unicode字元串。Python 2有基於ASCII的str()類型,其可通過單獨的unicode()函數轉成unicode類型,但沒有byte類型。
而在Python 3中,終於有了Unicode(utf-8)字元串,以及兩個位元組類:bytes和bytearrays。Python 3隻有一種類型:Unicode字元串(Unicode strings)。只有str一種類型,但它跟2.x版本的unicode幾乎一樣。
Notes
Python 2
Python 3
①
②
全局函數unicode()
Python 2有兩個全局函數可以把對象強制轉換成字元串:unicode()把對象轉換成Unicode字元串,還有str()把對象轉換為非Unicode字元串。
Python 3隻有一種字元串類型,Unicode字元串,所以str()函數即可完成所有的功能。(unicode()函數在Python 3里不再存在了。)
Notes
Python 2
Python 3
5.數據類型
1)Python 2有為非浮點數准備的int和long類型。int類型的最大值不能超過sys.maxint,而且這個最大值是平台相關的。可以通過在數字的末尾附上一個L來定義長整型,顯然,它比int類型表示的數字范圍更大。
在Python 3里,只有一種整數類型int,大多數情況下,它很像Python 2里的長整型。
Note:檢查一個變數是否是整型,獲得它的數據類型,並與一個int類型(不是long)的作比較。你也可以使用isinstance()函數來檢查數據類型;再強調一次,使用int,而不是long,來檢查整數類型。
sys.maxint
由於長整型和整型被整合在一起了,sys.maxint常量不再精確。但是因為這個值對於檢測特定平台的能力還是有用處的,所以它被Python 3保留,並且重命名為sys.maxsize。
Notes
Python 2
Python 3
①
②
㈤ python3兼容python2嗎
不兼容,最明顯的是print變成了函數。
相關推薦:《Python基礎教程》
最重要的變化:
第一點是python2里的str變為了python3里的byte,而str由unicode str取代,因此一些網路編程,hash加密的函數需要將參數encode處理。
第二點是大量的python2庫沒有被移植到python3,以request為例,在py2與py3上的用法改變了,mysql,postgres的API在2和3上也是不同的。
最後是關於多線程的,python3引入了asyncio coroutine,導致多線程的設計思想發生了變化。
github上有2to3的一個項目,可以在上面詳細了解,並學習如何遷移舊代碼。
㈥ 如何把Python2的代碼轉換為Python3的代碼
可以利用Python內置工具2to3.py,幫你自動將Python2的代碼轉換為Python3的代碼的。這個腳本的位置位在Python安裝的根目錄\Python27\Tools\Scripts\2to3.py。
比如我手上有個Python 2.x的python腳本:D:\tmp\transform.py
可以通過打開命令提示符,定位至該要轉換的腳本目錄下,然後運行
2to3.py -w transform.py
如果上述不加-w參數,則默認只是把轉換過程所對應的diff內容列印輸出到當前窗口而已。加了-w,就是把改動內容,寫回到原先的文件了。
㈦ python2和python3選哪個
如果是初學者,建議學習python2.x。
python3.x和python2.x已經並存很長時間了。兩個版本的python都在更新,但目前python2.x更加成熟。現在大部分第三方類庫都是基於2.x的,書和資料也是2.x居多,為你提供了豐富的學習材料。這已經不是一個重復造輪子的年代,日常的開發很大程度上會基於類庫。擁有豐富的類庫,是一門語言強大的標志,能極大地開發效率。
python3.x和2.x差別甚大,可以說它們幾乎是不同的語言。目前python3.x的應用不是那麼廣泛。由於兼容性的原因,很多老的程序都是基於2.x。由於python3的顛覆性,即使是比較新的應用也不會鋌而走險使用3.x。所以你應該毫不猶豫地選擇2.x。
官方提供一個將python2代碼轉換為python3代碼的小工具,叫2to3.py。如果你了安裝了python,那麼你一定擁有這個文件。如果你想體驗一把3.x,使用它是個不錯的選擇。
㈧ python學編程用python3還是python2
如果是從零學習的話建議從python3直接學習,有基礎的話兩者分別學習也沒有壞處。
從發展的角度未來肯定主流是3.x版本,python2與3隻是在部分語法上有區別,有餘力的話都學習也沒有壞處。
現在在網上2和3的兼容擴展模塊也都不少,也根據自己需要的情況進行選擇就行~
㈨ 您好,有關於Python的問題,想要請教你,方便加您的可以直接溝通的方式嗎
可以呀
Common Stumbling Blocks
本段簡單的列出容易使人出錯的變動(初學者應該注意)。
· print語句被print()函數取代了,可以使用關鍵字參數來替代老的print特殊語法。例如:
Old: print "The answer is", 2*2
New: print("The answer is", 2*2)
Old: print x, # 使用逗號結尾禁止換行
New: print(x, end=" ") # 使用空格代替換行
Old: print # 輸出新行
New: print() # 輸出新行
Old: print >>sys.stderr, "fatal error"
New: print("fatal error", file=sys.stderr)
Old: print (x, y) # 輸出repr((x, y))
New: print((x, y)) # 不同於print(x,y)!
你可以自定義輸出項之間的分隔符:
print("There are <", 2**32, ">possibilities!", sep="")
輸出結果是:
There are <4294967296> possibilities!
注意:
print()函數不支持老print語句的"軟空格"特性,例如,在python2.x中,print "A\n", "B"會輸出"A\nB\n",而python3.0中,print("A\n","B")會輸出"A\n B\n"
使用 2to3 源碼轉換工具時,所有的print語句被自動轉換成print()函數調用,對大項目,這是無需爭論的。
· python3.0使用字元串(strings)和bytes代替Unicode字元串和8位字元串,這意味著幾乎所有使用Unicode編碼和二進制數據的代碼都要改動。這個改動很不錯,在2.x的世界裡,無數的bug都是因為編碼問題。
· map()和filter()返回迭代器(iterators)
· dict方法keys(),items(),values()返回視圖(同樣是迭代器)而不是列表(list)
· 內建的sorted()方法和list.sort()方法不再接受表示比較函數的cmp參數,使用key參數代替。
· 1/2返回浮點數,使用1//2能得到整數。
· repr()函數對於long整數不再包含拖尾的L,所以不加判斷的去除最後一個字元會導致去掉一個有用的數字。
String and Bytes
· 現在只有一種字元串:str,它的行為和實現都很像2.x的unicode串。
· basestring超類已經去掉了,2to3 工具會把每個出現的basestring替換成str。
· PEP3137:新類型bytes,用來表示二進制數據和編碼文本,str和bytes不能混合,需要時,必須進行顯示的轉換,轉換方法是str.encode()(str->bytes)和bytes.decode()(bytes->str).
· 在原始字元串(raw strings)中所有反斜線都按字面量解釋,不再特殊處理Unicode轉義字元。
· PEP3112:bytes字面量,例如b"abc",創建bytes實例。
· PEP3120:默認源文件編碼為UTF-8
· PEP3131:可以使用非ASCII標識符(然而,除了注釋中貢獻者的名字之外,標准庫仍然只包含ASCII)
· PEP3116:新的IO實現,API幾乎100%向後兼容,二進制文件使用bytes代替strings
· 去除了StringIO和cStringIO模塊,取而代之的是io.StringIO或者io.BytesIO
PEP3101:字元串格式化的新方法
· str.format方法(原文提到替代了%操作符,實際上,format方法和%的用法差別很大,各有所長)。
PEP3106:修補了dict的keys(),items(),values()方法
· 刪除了dict.iterkeys(),dict.itervalues()和dict.iteritems()
· dict.keys(),dict.values()和dict.items()返回dict相關數據的引用
PEP3107:函數註解(FunctionAnnotations)
· 註解函數參數和返回值的標准化方法
Exception Stuff
· PEP352:異常類必須繼承自BaseException,它異常結構的基類。
· 移除了StandardError
· Dropping sequence behavior (slicing!)and message attribute of exception instances.
· PEP3109:拋出異常:現在必須使用raiseException(args)而不是原來的raise Exception, args
· PEP3110:捕獲異常,現在必須使用exceptException as identifier而不是原來的except Exception,identifier
· PEP3134:異常鏈(Exceptionchain)。
· 改良了一些windows不能載入模式時的異常信息,具有本地化處理。
New Class and Metaclass Stuff
· 移除了classic class
· PEP3115:新的metaclass語法
· PEP3119:抽象基類。
· PEP3129:類包裝。
· PEP3141:數字抽象基類
其他的語言變化
這里列出大多數的Python語言核心和內建函數的變化。
· 移除了backticks(使用repr()代替)
· 移除了<>(不等號,使用!=代替)
· as和with變成了關鍵字
· True,False和None變成了關鍵字
· PEP237:long不存在了,只有int,它和原來的long一樣。不再支持以L結尾的數字字面量。移除sys.maxint,因為int現在已經是無限大了
· PEP238:int相除,返回float
· 改變了順序操作符的行為,例如x<y,當x和y類型不匹配時拋出TypeError而不是返回隨即的bool值
· 移除了__getslice__,語法a[i:j]被解釋成a.__getitem__(slice(i,j))
· PEP3102:keyword-only arguments.在函數參數列表中,出現在*args之後的命名參數只能使用"關鍵字參數"的形式調用
· PEP3104:nonlocal聲明。使用nonlocal可以聲明一個外部變數(不是global變數)
· PEP3111:raw_input() 改名為input(),也就是說,新的input()函數從標准輸入設備(sys.stdin)讀取一行並返回(不包括行結束符),如果輸入過早終止,該函數拋出EOFError,如果想使用老的input(),可以使用(input())代替。
· xrange()改名為range(),range()現在不是產生一個列表(list),而是一個迭代器。
· PEP3113:移除了"元組參數拆包(tuple parameter unpacking)"。這種寫法已經不行了:
1. deffoo(a, (b, c)):…
2.
3. 現在要這樣寫:
4.
5. deffoo(a, b_c):
6. b,c = b_c
· PEP3114:next()重命名為__next__(),新的內建函數next()可以調用一個對象的__next__()方法。
· PEP3127:新的八進制字面量,二進制字面量和bin()函數。你應該寫0o666而不是0666,oct()函數也做了響應的改動。同樣,0b1010等價於10,bin(10)返回"0b1010″。0666這種寫法現在是錯誤的。
· PEP3132:支持迭代器拆包。現在你可以這樣寫:
1 a,b, *rest = some_seqence
2
3 甚至象這樣:
4
5 *rest,a = stuff
6 一般情況下,rest對象是list,而等號右邊的對象是可迭代的
· PEP3135:新的super()。你可以不適用任何參數調用super(),正確的參數和實例會被正確選擇。如果使用參數,它的行為不變,和以前一樣。
· zip(),map(),filter()返回迭代器。
· 移除了string.letters和它的小夥伴們(string.lowcase和string.uppercase),現在上場的是string.ascii_letters等
· 移除了apply(),callable(),exefile(),file(),rece(),reload()
· 移除了dict.has_key()。使用in操作符進行測試
· exec語句沒有了,現在是exec()函數
· 移除了__oct__()和__hex__()特殊方法。oct()和hex()方法使用__index__()
· 移除了對__members__和__methods__的支持
· nb_nonzero重命名為nb_bool,__nonzero__()重命名為__bool__()
Optimizations
· 一般情況下,python 3.0比python 2.5慢33%左右。不過仍有提升空間。
模塊變動(新的,改進的和廢棄的)
· 移除了cPickle模塊,可以使用pickle模塊代替。最終我們將會有一個透明高效的模塊。
· 移除了imageop模塊
· 移除了audiodev, Bastion, bsddb185,exceptions, linuxaudiodev, md5, MimeWriter, mimify, popen2, rexec, sets, sha,stringold, strop, sunaudiodev, timing和xmllib模塊
· 移除了bsddb模塊(單獨發布,可以從獲取)
· 移除了new模塊
· os.tmpnam()和os.tmpfile()函數被移動到tmpfile模塊下
· tokenize模塊現在使用bytes工作。主要的入口點不再是generate_tokens,而是tokenize.tokenize()
Build and C API Changes
Python's build process和C API的改動包括:
· PEP3118:新的Buffer API
PEP3121:擴展模塊的的Initialization& Finalization
· PEP3123:使PyObject_HEAD符合標准C
其他的改動和修復
㈩ 如何刪除python2 安裝python3
建議不要刪除
Linux下默認系統自帶python2.X的版本,這個版本被系統很多程序所依賴,所以不建議刪除,如果使用最新的Python3那麼我們知道編譯安裝源碼包和系統默認包之間是沒有任何影響的,所以可以安裝python3和python2共存
1、下載linux平台的python3.x的安裝包(我下載的是python3.6版本)
[root@localhost ~]# wget
2、解壓python3.6安裝包
[root@localhost ~]# tar xf Python-3.6.1.tgz
[root@localhost ~]# ll
total 22024
-rw-------. 1 root root 1238 Jun 25 10:54 anaconda-ks.cfg
drwxr-xr-x. 17 501 501 4096 Mar 21 03:47 Python-3.6.1
-rw-r--r--. 1 root root 22540566 Mar 21 03:47 Python-3.6.1.tgz
3、安裝python3.6,默認安裝路徑為/usr/local
--prefix=PREFIX install architecture-independent files in PREFIX
[/usr/local]
#安裝報錯,缺失依賴庫
[root@localhost Python-3.6.1]# ./configure
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking for python3.6... no
checking for python3... no
checking for python... python
checking for --enable-universalsdk... no
checking for --with-universal-archs... no
checking MACHDEP... linux
checking for --without-gcc... no
checking for --with-icc... no
checking for gcc... no
checking for cc... no
checking for cl.exe... no
configure: error: in `/root/Python-3.6.1':
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details
#安裝依賴庫
[root@localhost Python-3.6.1]# yum install gcc
#安裝python3.6
[root@localhost Python-3.6.1]# make && make install
#make && make install 報錯
zipimport.ZipImportError: can't decompress data; zlib not available
make: *** [install] Error 1
#安裝zlib-devel
[root@localhost Python-3.6.1]# yum install zlib-devel
#重新安裝
[root@localhost Python-3.6.1]# make && make install
4、python3.6已安裝成功,在/usr/local下生成命令python3
[root@localhost local]# ll /usr/local/bin/
total 24656
lrwxrwxrwx. 1 root root 8 Jun 25 11:22 2to3 -> 2to3-3.6
-rwxr-xr-x. 1 root root 101 Jun 25 11:22 2to3-3.6
-rwxr-xr-x. 1 root root 242 Jun 25 11:22 easy_install-3.6
lrwxrwxrwx. 1 root root 7 Jun 25 11:22 idle3 -> idle3.6
-rwxr-xr-x. 1 root root 99 Jun 25 11:22 idle3.6
-rwxr-xr-x. 1 root root 214 Jun 25 11:22 pip3
-rwxr-xr-x. 1 root root 214 Jun 25 11:22 pip3.6
lrwxrwxrwx. 1 root root 8 Jun 25 11:22 pydoc3 -> pydoc3.6
-rwxr-xr-x. 1 root root 84 Jun 25 11:22 pydoc3.6
lrwxrwxrwx. 1 root root 9 Jun 25 11:22 python3 -> python3.6
-rwxr-xr-x. 2 root root 12604536 Jun 25 11:21 python3.6
lrwxrwxrwx. 1 root root 17 Jun 25 11:22 python3.6-config -> python3.6m-config
-rwxr-xr-x. 2 root root 12604536 Jun 25 11:21 python3.6m
-rwxr-xr-x. 1 root root 3097 Jun 25 11:22 python3.6m-config
lrwxrwxrwx. 1 root root 16 Jun 25 11:22 python3-config -> python3.6-config
lrwxrwxrwx. 1 root root 10 Jun 25 11:22 pyvenv -> pyvenv-3.6
-rwxr-xr-x. 1 root root 441 Jun 25 11:22 pyvenv-3.6
5、使用python3命令查看版本
[root@localhost local]# python3 -V
Python 3.6.1
[root@localhost local]# python3
Python 3.6.1 (default, Jun 25 2017, 11:20:12)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux
Type "help", "right", "credits" or "license" for more information.