靈魂拷問派殷,為什么天選之子是它 ?墓阀?毡惜?
- 主要是想做個(gè)量化工具,看了看招聘渠道需要會(huì)Python和C斯撮,據(jù)說Python用來做數(shù)據(jù)分析最方便快捷,里面存在非常多成熟的數(shù)據(jù)分析用的庫经伙。
思考
Q: 那我怎么開始認(rèn)識(shí)Python呢?我對它不是很熟勿锅,半年的時(shí)候簡單摸索了一下帕膜,后面有事情就暫停摸索了。
A: Python是解釋型語言溢十。
補(bǔ)充A:大家好奇不好奇垮刹,高級(jí)語言是怎么被機(jī)器執(zhí)行的?機(jī)器只能識(shí)別機(jī)器語言0张弛、1這樣源碼或者匯編語言movl $5 荒典、addl這樣的,那高級(jí)語言能被執(zhí)行就需要翻譯成這樣的語言吞鸭,既然是翻譯那就會(huì)有提前翻譯和執(zhí)行期間翻譯寺董。不同翻譯時(shí)機(jī)就造成了兩種名詞:編譯型語言(提前翻譯好)、解釋型語言(執(zhí)行代碼的時(shí)候翻譯)刻剥,關(guān)于兩者的優(yōu)劣就不說了自己查下就好遮咖,無非就是編譯型語言提前翻譯好執(zhí)行效率會(huì)更高一點(diǎn)。解釋型語言擴(kuò)平臺(tái)好造虏,只要平臺(tái)提前安裝了解釋器就可以執(zhí)行
A:再補(bǔ)充一點(diǎn)御吞,是不是有人對動(dòng)態(tài)語言類型和靜態(tài)語言類型也有些懵。順帶解釋下哈漓藕,針對靜態(tài)語言陶珠、動(dòng)態(tài)語言是根據(jù)數(shù)據(jù)類型校驗(yàn)時(shí)間而言的。執(zhí)行前撵术,也就是編譯時(shí)候?qū)?shù)據(jù)類型做了校驗(yàn)背率,明確要求了數(shù)據(jù)類型,這就是靜態(tài)語言也是強(qiáng)類型語言。運(yùn)行期間才做數(shù)據(jù)類型校驗(yàn)的寝姿,開發(fā)時(shí)候不用指定數(shù)據(jù)類型的是動(dòng)態(tài)語言比如(JavaScript交排、Python、PHP)饵筑。通常情況下編譯型語言是靜態(tài)類型埃篓,解釋型語言是動(dòng)態(tài)類型語言。但是也有特殊的根资,比如swift語言就很怪架专,是編譯型語言+動(dòng)態(tài)類型的混合體,C#和Java反而是解釋型語言+靜態(tài)類型
Q:既然明白了Python是解釋型語言玄帕,那就需要安裝解釋器才能用嘍部脚,怎么安裝解釋器呢?
A:解釋器其實(shí)就是安裝Python安裝包就好了裤纹,Mac默認(rèn)的是2.7版本委刘,當(dāng)下流行的是3.11版本,可以安裝多版本鹰椒。win執(zhí)行的時(shí)候可以用py選擇版本執(zhí)行锡移。
Q:那我需要用什么平臺(tái)來開發(fā)Python的項(xiàng)目呢?
A:可用平臺(tái)比較多漆际,常用的PyCharm淆珊、VS等,我還是選擇了pycharm奸汇,主要是看著這個(gè)跟Python開發(fā)看起來就更般配一些施符,具體有什么區(qū)別也沒對比。茫蛹。
Q:Python開發(fā)中的包管理工具是什么操刀?
A: 在語言開發(fā)中,任何語言幾乎都會(huì)有自己的包管理工具婴洼。Python中的包管理工具是pip,可以安裝對應(yīng)的pip3版本,查詢是否安裝了可以通過pip -V
或者 pip3 -V
Q:我寫的Python程序如有運(yùn)行撼嗓?柬采?
A:用編譯器運(yùn)行即可,進(jìn)入到指定目錄且警,然后pyhton xxx.py即可運(yùn)行該文件粉捻。所以我們只要安裝好了解釋器環(huán)境,即可終端運(yùn)行程序斑芜。當(dāng)然PyChram里面的終端也可以運(yùn)行肩刃。
Q:我們?nèi)绾未虬约旱捻?xiàng)目?
A:我們使用Cpython打包exe文件。Cpython是C語言寫的python的代碼解釋器盈包,將python代碼轉(zhuǎn)換成計(jì)算機(jī)識(shí)別的字節(jié)碼沸呐。通過cpython可以直接將Python代碼編譯成exe文件而不需要安裝Python環(huán)境,實(shí)現(xiàn)真正獨(dú)立運(yùn)行呢燥。其次我們需要通過PyInstaller將代碼打包成可獨(dú)立執(zhí)行的工具崭添,可以通過PyInstaller打包成不同平臺(tái)的可執(zhí)行程序(Win、Mac叛氨、Linux)呼渣。
Q:執(zhí)行一遍通過CPython的打包吧
A: 通過CPython打包exe
Q: 我們?nèi)绾我肴綆欤?/em>
A: 我們通過pip管理包,安裝:pip install xxx
查詢當(dāng)前都有哪些包:pip list
查看某個(gè)包的具體信息:pip show xxxx
卸載某個(gè)包:pip uninstall xxxx
Q: 我們?nèi)绾握{(diào)試程序寞埠?
A:我在win上面開發(fā)的屁置,使用的VSCode開發(fā)工具,左側(cè)有個(gè)debug按鈕,項(xiàng)目第一次時(shí)候需要再最上面選擇下Python File Debug .....的選項(xiàng)即可
開始第一個(gè)hello python的程序創(chuàng)建吧
-
打開開發(fā)PyCharm工具仁连,點(diǎn)擊File選擇創(chuàng)建項(xiàng)目蓝角,然后選擇好解釋器進(jìn)行創(chuàng)建即可
截屏2023-08-05 下午6.54.04.png
- 編寫一個(gè)小程序,然后執(zhí)行吧怖糊。找到項(xiàng)目右擊new--> file 創(chuàng)建.py的文件帅容,文件內(nèi)容寫
print("hello python")
,然后工具下面的終端進(jìn)入對應(yīng)的文件件運(yùn)行pyhton xxxx.py
即可。
Q:Queue隊(duì)列怎么回事伍伤?
A: 任何語言都繞不開性能并徘,異步、同步扰魂、線程安全問題
問題匯總
Q: python執(zhí)行時(shí)如何選定某個(gè)版本執(zhí)行麦乞?
A:
Mac工具: python2 xxx.py 或者 python3 xxx.py
Win工具: py -2.7 .\xx.py 或者 py -3.11 .\xxxx.py
Q: 開發(fā)中常見的if __name__ == ‘__main__‘
是什么?
A:通常一個(gè).py的項(xiàng)目文件有兩種運(yùn)行情況劝评,一種是直接運(yùn)行此文件姐直,一種是被引入其他文件中執(zhí)行。此處的判斷就是對這種情況進(jìn)行的蒋畜。
如果直接運(yùn)行此文件則__name__ == 是 __main__
,如果是此文件被導(dǎo)入其他文件中執(zhí)行声畏,則__name__ == 包名.文件名
,這個(gè)名稱是有變化的姻成,所以此處的判斷是對直不直接運(yùn)行此文件的影響插龄。直接運(yùn)行此文件,則此處邏輯代碼執(zhí)行科展,如果被導(dǎo)入其他文件運(yùn)行的代碼均牢,則此處文件不被運(yùn)行。
Q:經(jīng)巢哦茫看到 try: with xxx 和 except: 這些有什么特點(diǎn)呢徘跪?
A:此處可以單獨(dú)開一篇文章介紹
Q: 如何寫內(nèi)容到一個(gè)文件里面
A:用到open()函數(shù)甘邀,里面參數(shù)具體使用參照里面文檔吧。第一參數(shù)是文件名垮庐、寫入讀取的類型松邪、內(nèi)容編碼格式。打開后通過json的fump函數(shù)寫入即可突硝,然后關(guān)閉函數(shù)测摔。
with open(filename, 'a', encoding='utf-8') as fileObj:
json.dump("寫入測試", fileObj, ensure_ascii=False)
fileObj.write('\n')
fileObj.close()
Q: 剛看到一個(gè)with as 的語法,這是什么解恰?
A: Python中with as 語句
Q:ModuleNotFoundError: No module named 'xxx'
A: 這是在Win環(huán)境下锋八,安裝了Python3 到D盤中,項(xiàng)目在桌面的C盤中护盈,剛開始pip install的三方包后挟纱,正常運(yùn)行了幾次,然后突然報(bào)上面錯(cuò)誤腐宋。這就是包沒有被識(shí)別紊服。也就是說項(xiàng)目運(yùn)行時(shí)候需要找到Python解釋器但是在當(dāng)前路徑下沒有找到,那么我們先確定下我們安裝的包是存在的胸竞。
那么Python代碼執(zhí)行邏輯是什么呢欺嗤?
我們import模塊之后卫枝,代碼執(zhí)行的時(shí)候,是先去sys.path
里依次搜索校赤,直到找到對應(yīng)模塊。
那么搜索模塊的sys.path
里面的路徑是怎么來的呢马篮?
A:主要是前兩種
- 一是系統(tǒng)的PYTHONPATH變量,所以我們可以通過設(shè)置此變量來改變Python的默認(rèn)搜索位置
-
sys.path
的另一個(gè)來源就是當(dāng)前執(zhí)行程序所在目錄浑测。注意是文件所在的目錄不是文件路徑 - 第三就是win系統(tǒng)C盤上的一些python路徑,亂七八糟的無啥用迁央。
那我們就知道怎么解決這個(gè)問題了,兩個(gè)方面漱贱,一個(gè)是修改系統(tǒng)的PYTHONPATH變量夭委,另一方面通過 sys.path.append
添加模塊路徑
一募强、先檢查下Pyhton的搜索路徑
先看下當(dāng)前模塊路徑都有哪些
再看下當(dāng)前當(dāng)前PYTHONPATH變量是什么
再找到當(dāng)前安裝的那些三方模塊在哪里
其次就是添加這些路徑即可
import sys
print(sys.path)
print(os.environ.get('PYTHONPATH'))
打印的是None,說明項(xiàng)目本身就找不到Python的解釋器擎值,無法運(yùn)行。
二鸠儿、pip list
查看包確實(shí)存在
三、pip show xxxx
會(huì)把路徑給你打印出來 d:\tools\python\python3\lib\site-packages(1.6.1)
,這樣我們就明確知道包所在的具體位置厕氨。
三进每、添加Win的Python環(huán)境:
方法1:通過sys.path.append()
函數(shù) 雖然是python里面最常用的,但是不推薦
import sys
sys.path.append('d:\tools\python\python3\lib\site-packages')
添加完成后可以通過
print(sys.path)
來查看是否添加成功
此處常用是由于通常項(xiàng)目都是一個(gè)本地電腦運(yùn)行一個(gè)項(xiàng)目命斧,如果同一個(gè)環(huán)境需要多個(gè)環(huán)境來回切換田晚,并且項(xiàng)目類似,那么還是建議修改系統(tǒng)的PYTHONPATH變量來修改模塊掃描路徑国葬。
很奇怪的是贤徒,我明明導(dǎo)入成功了site-packages,但是還是無法識(shí)別到websocket這個(gè)模塊
很神奇的事情汇四,那就是明明導(dǎo)入到了模塊的搜索路徑中接奈,但是有時(shí)候項(xiàng)目重新打開時(shí)候會(huì)失效,所以推薦第二種通孽。
【重點(diǎn)推薦】方法2:修改系統(tǒng)PYTHONPATH變量路徑序宦,不同環(huán)境Win和MacOS還有些區(qū)別,
MacOS環(huán)境可以選擇用命令行利虫。
export PYTHONPATH= d:\tools\python\python3\lib\site-packages:$PYTHONPATH
Win環(huán)境可以手動(dòng)添加:搜索環(huán)境變量挨厚,然后在系統(tǒng)變量模塊里,點(diǎn)擊新建
添加糠惫。當(dāng)然在用戶環(huán)境編輯(推薦)疫剃,或者在系統(tǒng)環(huán)境編輯都可以。但是【問題出現(xiàn)】加入后路徑變量后硼讽,sys.path還是無法顯示出添加的路徑導(dǎo)致導(dǎo)入的模塊還是不能識(shí)別巢价,分別在path和PYTHONPATH都添加了路徑,但是就是無法加載識(shí)別出來固阁,真是奇葩了壤躲。。备燃。碉克。
重新排查一遍問題:
where python
出現(xiàn)兩個(gè)python,一個(gè)是我自己安裝的D盤里的并齐,一個(gè)是C盤WindowsApps里面的漏麦,真是奇怪客税。
import sys;print(sys.executable)
查看我們的python解釋器路徑,理論上同where的路徑一致才對撕贞。但是只是同D盤路徑一致更耻。
在win搜索Python 發(fā)現(xiàn)還同步再微軟商店下載了Python3.11,卸載了這個(gè)捏膨。然后重啟后面發(fā)現(xiàn)添加成功了秧均。。号涯。。讶隐。久又。
記得添加PYTHONPATH路徑后地消,重啟。對了疼阔,還有一個(gè)細(xì)節(jié)需要注意半夷,就是VSCode的右下角突然可以給選擇解釋器了巫橄,選擇對應(yīng)位置的Python解釋器即可。
FillNotFoundError
問題描述:
文件A.py引用了文件B.py宾舅,然后B模塊又引用了C模塊筹我,C模塊中識(shí)別json文件時(shí)候通過debug模式無法識(shí)別帆离,但是直接run的話沒問題。袁串。。
解題思路:
其實(shí)還是文件路徑無法找到的問題。那我們只需要導(dǎo)入正確文件路徑即可王悍。
一、找到正確路徑
二鲜漩、更改當(dāng)前正確的工作目錄即可
我們需要用到
# 查看當(dāng)前工作目錄
os.getcwd()
#正確工作目錄
sys.path[0]
#添加爭取工作目錄到當(dāng)前文件
os.chdir(sys.path[0])
可以通過獲取當(dāng)前工作目錄對比添加前后變化
異常問題解釋
- except的時(shí)候出現(xiàn)Too broad exception clause
A:問題太寬泛導(dǎo)致的孕似,最好明確指出是什么類型的問題需要捕捉
參照文獻(xiàn):
https://blog.csdn.net/lcg910978041/article/details/50696196
https://blog.csdn.net/DALEONE/article/details/122267822
python中路徑什么意思_python基礎(chǔ)教程詳解Python中的路徑問題
ModuleNotFoundError:如何解決Python找不到模塊錯(cuò)誤喉祭?