問題:引入base64模塊,結(jié)果出現(xiàn)如下問題:
AttributeError: 'module' object has no attribute 'b64encode'
原因:而這其實(shí)是.pyc文件存在問題
Python運(yùn)行時(shí)拙徽,會(huì)先查找該程序所在路徑概而,是否有相關(guān)的模塊,有則直接引用掷豺。正好該目錄下有一個(gè)base64.py文件捞烟,而這個(gè)文件非官方的base64庫,自然找不到'b64encode'当船,所以報(bào)錯(cuò)
解決方法:將base64.py重命名题画,并刪除本地的base64.pyc文件
拓展:
1.什么是pyc文件?
pyc文件是python編譯后的字節(jié)碼文件德频。Python的程序中苍息,是把原始程序代碼放在.py文件里,而Python會(huì)在執(zhí)行.py文件的時(shí)候壹置。將.py形式的程序編譯成中間式文件(byte-compiled)的.pyc文件竞思,這么做的目的就是為了加快下次執(zhí)行文件的速度。
2.Python運(yùn)行過程
Python是一種解釋型語言钞护,每次執(zhí)行都需要進(jìn)行一次翻譯盖喷。執(zhí)行?python *.py?后,將會(huì)啟動(dòng) Python 的解釋器难咕,將?*.py?編譯成一個(gè)字節(jié)碼對(duì)象 PyCodeObject课梳,存放在內(nèi)存,當(dāng)這個(gè)模塊的 Python 代碼執(zhí)行完之后就會(huì)將編譯結(jié)果保存到?*.pyc文件中步藕,下一次就不需要編譯惦界,直接加載到內(nèi)存中挑格。
a.模塊在被導(dǎo)入時(shí)會(huì)先檢查本地目錄下是否有pyc文件
b.若有pyc文件咙冗,對(duì)比py文件的修改時(shí)間是否一致,若一致漂彤,直接使用pyc文件雾消,若不一致灾搏,對(duì)py文件進(jìn)行解釋,并將結(jié)果覆蓋本地的pyc文件
c.若未找到pyc文件立润,對(duì)py文件進(jìn)行解釋狂窑,并將結(jié)果回寫到本地的pyc文件中
3.什么情況下會(huì)生成pyc文件?
前提:當(dāng)前用戶擁有該目錄的寫入權(quán)限
a.被導(dǎo)入時(shí)
b.在命令行直接輸入“python path/to/projectDir”(假設(shè)projectDir目錄含有“__main__.py”文件桑腮,以及其他將要調(diào)用的模塊)泉哈,那么程序運(yùn)行結(jié)束后便自動(dòng)為當(dāng)前目錄下所有的腳本生成字節(jié)碼文件
c.通過代碼來生成pyc文件
生成單個(gè)pyc文件
【import py_compilepy
_compile.compile('/path/to/foo.py')】
批量生成pyc文件,針對(duì)目錄下所有py文件
【import compileall
compileall.compile_dir(r'/path')】
參考:
https://www.zhihu.com/question/30296617/answer/112564303
http://blog.csdn.net/kriszhang/article/details/68947242
作者:Tester_miao
鏈接:http://www.reibang.com/p/1f096f252d26
來源:簡(jiǎn)書
著作權(quán)歸作者所有破讨。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)丛晦,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。