關(guān)于Python2還是Python3的討論依然到處可見誓琼,我們一起來看看為什么要用Python3.
為什么要用python3倔韭?
Sat Mar 10 20:54:35 EST 2018,Python之父在開發(fā)者郵箱回復(fù)說,Python2.7的EOL日期是2020年1月1日,之后不會再有任何更新例嘱,包括源碼的安全補丁。
在來看看眾所周知的Django怎么說宁舰,
Since newer versions of Python are often faster, have more features, and are better supported, the latest version of Python 3 is recommended.
大致翻譯為新版本的Python速度更快蝶防,特性更多,擁有更高的支持明吩,所以推薦最新版本的Python3.
python3的很多特性確實很棒,看這哥們整理的一份簡短的python3特性介紹
諸如Numpy等有名的第三方庫也是和Django一樣殷费,針對舊版本的Python不會再去支持印荔。
前兩年有人說因為很多第三方包不支持Python3低葫,但這個已經(jīng)是過去時,當(dāng)下活躍的第三方包都是在積極的去支持Python3.
綜上仍律,為何還不用Python3呢嘿悬?
還有一分部人是因為老項目是Python2,遷移到Python3工作量較大水泉,那接下來就是干貨時刻善涨,教你如何快速的把已有項目遷移到Python3
2to3
2to3是腳本的名稱,是隨著python解釋器一起安裝的草则。2to3 will usually be installed with the Python interpreter as a script. It is also located in the Tools/scripts directory of the Python root钢拧。
linux和mac下可以直接使用】缓幔基礎(chǔ)的用法可以點擊鏈接查看官網(wǎng)源内。
文章中介紹了幾種使用方法,我們使用文件夾轉(zhuǎn)換的方式份殿,命令如下
2to3 --output-dir=python3-version/mycode -W -n python2-version/mycode
這個命令會遞歸的把python2-version/mycode路徑下需要做轉(zhuǎn)換的文件輸出到python3-version/mycode路徑下膜钓,如不需要轉(zhuǎn)換的不會輸出到新目錄。
本人把近2G的Flask正式項目做了一次轉(zhuǎn)換卿嘲,特別注意項目包含靜態(tài)文件颂斜,在轉(zhuǎn)換的時候要注意排除,以及env等文件夾也要繞過拾枣。
轉(zhuǎn)換過程中terminal打印的一些信息:
# has_key轉(zhuǎn)為in
@@ -405,7 +405,7 @@
def sort_by_data(data_obj, desc=False):
data_province = dict()
for each_data in data_obj:
- if data_province.has_key(each_data['name']):
+ if each_data['name'] in data_province:
if each_data["value"] != "-":
# filter轉(zhuǎn)為列表推導(dǎo)式
last_result = graph_last(endpoint_counters)
- last_result = filter(lambda x: x['counter'].find('name') > -1, last_result)
+ last_result = [x for x in last_result if x['counter'].find('name') > -1]
last_result.sort(key=lambda x: x['value']['timestamp'], reverse=True)
- last_result = filter(lambda x: x['value']['timestamp'] == last_result[0]['value']['timestamp'], last_result)
+ last_result = [x for x in last_result if x['value']['timestamp'] == last_result[0]['value']['timestamp']]
last_result.sort(key=lambda x: x['value']['value'], reverse=True)
# urllib路徑轉(zhuǎn)換
-import urllib
-import urllib2
-import urlparse
+import urllib.request, urllib.parse, urllib.error
+import urllib.request, urllib.error, urllib.parse
+import urllib.parse
轉(zhuǎn)換過程不過幾分鐘沃疮,但是轉(zhuǎn)換好后遇到了一些沒有轉(zhuǎn)換好的坑。從轉(zhuǎn)換開始到測試發(fā)現(xiàn)并解決這些坑為止放前,也只是一個用了1個小時時間忿磅。把坑共勉
坑
1.python3.5和低版本的xlwt不兼容,所以有用到這個包且版本較低的話需要升級到最新凭语。目前最新的1.3.0
2.email模塊的調(diào)整
from email.mime.multipart import MIMEMultipart # import MIMEMultipart
from email.mime.text import MIMEText # import MIMEText
from email.mime.base import MIMEBase # import MIMEBase
from email.encoders import encode_base64
# 發(fā)送附件時文件名
filename=('gbk', '', file_name)
3.write函數(shù)
參數(shù)必須是bytes類型
with open(dst + '/cfg.json', 'wb') as f:
f.write(str.encode(scfg))
如后面發(fā)現(xiàn)其他坑葱她,會再次更新。
把上面的坑解決后似扔,項目就正常運行了吨些。有如此方便的神器,還有那么多新的特性炒辉,還不趕快把項目升級到python3豪墅?
人生苦短,我用python3