入門指南:從環(huán)境搭建到實(shí)戰(zhàn)項(xiàng)目全覆蓋)
0. 開篇Python基礎(chǔ)到底該學(xué)什么、怎么學(xué)Python基礎(chǔ)這四個(gè)字幾乎是所有自學(xué)編程的人繞不開的第一站。網(wǎng)上搜Python出來的東西五花八門——安裝教程、爬蟲代碼、量化交易策略、轉(zhuǎn)exe工具、語法速查、數(shù)據(jù)分析可視化還有一大票讓人眼花繚亂的源碼大全。說實(shí)話信息越多新手越容易懵我到底該從哪開始裝完P(guān)ython之后該干什么為什么別人的代碼我能跑通自己一寫就報(bào)錯(cuò)我玩Python也有好多年了期間幫不少人解決過入門階段的問題。這篇文章不打算給你堆一堆碎片化的知識(shí)點(diǎn)而是站在一個(gè)過來人的角度把“Python基礎(chǔ)”這件事拆開揉碎講清楚學(xué)習(xí)路線、環(huán)境搭建、核心語法、常用庫以及新手一定會(huì)踩的那些坑。適合完全零基礎(chǔ)的小白也適合那些已經(jīng)零零散散學(xué)過一點(diǎn)、但總覺得不成體系的讀者??赐曛竽阒辽倌芨闱宄患翽ython基礎(chǔ)不只是一個(gè)語法清單而是一套能讓你獨(dú)立寫腳本、跑數(shù)據(jù)、做小工具的最小知識(shí)閉環(huán)。1. 內(nèi)容整體設(shè)計(jì)與思路拆解1.1 Python基礎(chǔ)的本質(zhì)是一套“最小閉環(huán)”很多初學(xué)者有個(gè)誤區(qū)覺得Python基礎(chǔ)就是背語法。其實(shí)不是。語法只是工具真正的Python基礎(chǔ)是讓你能用這套工具完成一個(gè)完整的小任務(wù)。什么叫完整就是你知道代碼為什么要這么寫、運(yùn)行之后為什么是這個(gè)結(jié)果、報(bào)錯(cuò)了怎么排查。這三個(gè)“為什么”串起來才叫真正入門。我習(xí)慣把Python基礎(chǔ)拆成五個(gè)模塊環(huán)境、語法、函數(shù)與模塊、文件與數(shù)據(jù)、常用第三方庫。環(huán)境解決“在哪寫”語法解決“怎么寫”函數(shù)與模塊解決“怎么組織”文件與數(shù)據(jù)解決“怎么落地”第三方庫解決“怎么偷懶”。這五個(gè)模塊不是并列關(guān)系而是遞進(jìn)關(guān)系。你把前三個(gè)搞定就能看懂絕大多數(shù)的入門教程加上后兩個(gè)就能獨(dú)立做點(diǎn)實(shí)用的小工具比如批量改文件名、爬取網(wǎng)頁信息、分析Excel數(shù)據(jù)。為什么我特別強(qiáng)調(diào)這個(gè)遞進(jìn)關(guān)系因?yàn)槲乙娺^太多人卡在中間。有人裝好Python就不知道下一步了有人背了一個(gè)星期語法還是不會(huì)寫代碼有人跟教程爬蟲跑通了但稍微改個(gè)網(wǎng)站就完全抓瞎。這些問題歸根結(jié)底都是因?yàn)橹R(shí)是散的沒有形成閉環(huán)。這篇文章就是幫你把散的片段串起來。1.2 為什么選擇“先跑通、再理解”的學(xué)習(xí)路徑官方教程和很多書籍喜歡從“什么是變量”“什么是數(shù)據(jù)類型”講起邏輯嚴(yán)謹(jǐn)?shù)浅裢?。我的建議正好反過來先讓代碼跑起來哪怕是抄一段愛心代碼、畫一個(gè)簡單圖形先看到輸出結(jié)果再回頭理解每一行在干嘛。這個(gè)思路在認(rèn)知科學(xué)上是有依據(jù)的。人類學(xué)習(xí)新技能先建立“體感”比先掌握“理論”效率更高。就好比學(xué)開車你先坐進(jìn)駕駛室踩一腳油門對“車會(huì)往前走”有了體感再學(xué)離合、換擋、看后視鏡這些細(xì)節(jié)就不容易暈。寫代碼也一樣先跑通一段代碼看到屏幕上輸出“Hello World”或者畫出一個(gè)圖案你對“代碼如何被執(zhí)行”就有了直覺。有了這個(gè)直覺后面學(xué)任何語法細(xì)節(jié)都會(huì)覺得“哦原來是為這個(gè)服務(wù)的”。所以我建議你的Python基礎(chǔ)學(xué)習(xí)路徑是這樣花半小時(shí)把環(huán)境裝好花一小時(shí)把下面第三節(jié)的核心語法過一遍然后立刻找一個(gè)小項(xiàng)目做比如寫一個(gè)“李白打酒”的算法題或者寫一個(gè)從網(wǎng)頁抓天氣信息的爬蟲。遇到不懂的語法再回來查。這個(gè)“項(xiàng)目驅(qū)動(dòng)及時(shí)查漏”的模式比從頭到尾啃教材快得多。2. 環(huán)境搭建與工具鏈配置Python基礎(chǔ)的地基2.1 安裝Python時(shí)的三個(gè)關(guān)鍵選擇先說安裝。很多新手在“python安裝”這一步就會(huì)遇到各種稀奇古怪的問題其實(shí)絕大多數(shù)坑都是可以提前避開的。第一版本選擇。Python目前有2.x和3.x兩個(gè)大版本2.x已經(jīng)停止維護(hù)多年新學(xué)的人直接無視它。3.x版本里選哪個(gè)小版本我的建議是選當(dāng)前最新的穩(wěn)定版最低也要用3.8以上。為什么因?yàn)楹芏嗟谌綆旌凸ぞ哝溡呀?jīng)放棄對舊版本的支持了你裝個(gè)3.6后面裝numpy、pandas可能官方都不給你編譯好的安裝包硬要裝又得折騰編譯環(huán)境純屬浪費(fèi)時(shí)間。第二安裝路徑。Windows下安裝時(shí)安裝界面第一頁最下方有個(gè)“Add Python to PATH”的復(fù)選框一定要勾上。這個(gè)勾的作用是讓系統(tǒng)全局都能識(shí)別python命令不勾的話你在命令行里敲python會(huì)提示“不是內(nèi)部或外部命令”。我見過太多人栽在這一步上而且很多人勾了還是不行那大概率是裝的時(shí)候用了自定義路徑里面帶了中文或空格導(dǎo)致環(huán)境變量解析出問題。最穩(wěn)妥的做法就是保持默認(rèn)路徑安裝別自作聰明去改。第三環(huán)境變量。很多時(shí)候我們需要在同一個(gè)電腦上裝多個(gè)Python版本比如一個(gè)給日常開發(fā)一個(gè)給某個(gè)特定項(xiàng)目。這時(shí)候手動(dòng)配環(huán)境變量就比安裝器自動(dòng)配更可控。具體做法是右鍵“此電腦”-“屬性”-“高級系統(tǒng)設(shè)置”-“環(huán)境變量”在“Path”里新增兩個(gè)路徑一個(gè)是Python安裝目錄本身另一個(gè)是該目錄下的Scripts文件夾。這個(gè)Scripts文件夾很重要因?yàn)楹竺嬗胮ip安裝的很多命令行工具比如將Python打包成exe的PyInstaller都會(huì)放到這里。2.2 用虛擬環(huán)境隔離項(xiàng)目依賴而不是把一切都裝在全局這項(xiàng)建議是我希望自己當(dāng)年入門時(shí)有人早點(diǎn)兒告訴我的從一開始就學(xué)會(huì)用虛擬環(huán)境別把所有第三方庫都裝到全局。虛擬環(huán)境的作用是給每個(gè)項(xiàng)目一個(gè)獨(dú)立的Python運(yùn)行空間你在A項(xiàng)目里裝requests的1.0版本完全不影響B(tài)項(xiàng)目里用requests的2.0版本。具體操作有兩種主流方式。老牌的是virtualenv新建一個(gè)環(huán)境用virtualenv venv激活環(huán)境在Windows下是venv\Scripts\activate在Linux或macOS下是source venv/bin/activate。新版Python自帶venv模塊用法差不多python -m venv venv。激活之后你會(huì)注意到命令行前面多了個(gè)(venv)前綴說明你已經(jīng)在虛擬環(huán)境里了這時(shí)候pip install裝的所有包都只屬于這個(gè)項(xiàng)目。為什么我這么強(qiáng)調(diào)這一步因?yàn)閹缀跛小拔艺罩坛套鲈趺磮?bào)ModuleNotFoundError”的問題根源都是環(huán)境沖突。比如教程作者用的是python3.9你用的是python3.6某個(gè)依賴包不支持你的版本或者你的全局環(huán)境里早有一個(gè)舊版本的庫把新版本覆蓋了。虛擬環(huán)境把這些問題直接歸零。實(shí)話實(shí)說養(yǎng)成這個(gè)習(xí)慣能讓你的Python之路少走至少兩個(gè)月的彎路。2.3 IDE選擇VSCode還是PyCharm看完不再糾結(jié)編輯器這塊我推薦新手只用兩個(gè)選項(xiàng)VSCode和PyCharm。VSCode勝在輕量、免費(fèi)、插件生態(tài)豐富。配置Python環(huán)境的步驟其實(shí)很簡單先去擴(kuò)展市場裝一個(gè)Python插件微軟官方出品然后CtrlShiftP打開命令面板輸入“Python: Select Interpreter”選擇你剛裝好的Python解釋器就可以開始寫了。如果你要跑代碼只需要打開一個(gè).py文件點(diǎn)右上角的三角形運(yùn)行按鈕或者直接在終端里敲python 文件名.py。PyCharm則更適合做稍微大一點(diǎn)的項(xiàng)目它的項(xiàng)目結(jié)構(gòu)管理、調(diào)試器、代碼補(bǔ)全和Git集成做得更成熟。缺點(diǎn)是對低配置電腦不太友好啟動(dòng)慢內(nèi)存占用高。我的建議是如果你用的是Windows本且內(nèi)存只有8G老老實(shí)實(shí)用VSCode如果內(nèi)存16G以上且你打算以后走開發(fā)這條路那用PyCharm社區(qū)版也完全夠起步。很多人的誤區(qū)是追求“最強(qiáng)大”的工具其實(shí)Python基礎(chǔ)階段最重要的是能快速看到代碼運(yùn)行結(jié)果減少工具本身帶來的心智負(fù)擔(dān)。選哪個(gè)不重要重要的是別把時(shí)間花在折騰編輯器主題和插件上。等到你寫了三個(gè)月代碼自然就知道自己需要什么了。3. 核心語法基礎(chǔ)與實(shí)操要點(diǎn)3.1 變量與數(shù)據(jù)類型一切都在圍繞“對象”在轉(zhuǎn)Python的變量聲明非常簡單不用寫類型直接x 5就完事。這個(gè)“不用寫類型”讓新手覺得很輕松但也帶來一個(gè)隱患你不清楚這背后到底發(fā)生了什么。在Python里一切數(shù)據(jù)都是對象。你寫x 5實(shí)際上是創(chuàng)建了一個(gè)值為5的整數(shù)對象然后讓變量名x指向它。如果你寫y x并沒有復(fù)制一個(gè)新的整數(shù)對象而是讓y也指向同一個(gè)對象。這就是為什么在列表操作中會(huì)出現(xiàn)“改了a但b也變了”的問題。Python的基本數(shù)據(jù)類型就那么幾種整數(shù)int、浮點(diǎn)數(shù)float、字符串str、布爾值bool、列表list、元組tuple、字典dict、集合set。這些類型里面前四個(gè)是不可變類型后面四個(gè)是可變類型。不可變的意思是你試圖修改它實(shí)際上是創(chuàng)建了一個(gè)新對象原對象沒變。初學(xué)者最容易在這里翻車的是列表和字典的賦值與拷貝問題。3.2 數(shù)據(jù)類型轉(zhuǎn)換、abs函數(shù)等“高頻小工具”別死記硬背熱搜詞里出現(xiàn)了“python abs函數(shù)”和“python類型轉(zhuǎn)換”這兩個(gè)都是非常典型的“高頻小工具”。abs函數(shù)就是取絕對值abs(-5)返回5簡單到不能再簡單。類型轉(zhuǎn)換更基礎(chǔ)int(123)把字符串轉(zhuǎn)成整數(shù)str(123)把整數(shù)轉(zhuǎn)成字符串float(3.14)轉(zhuǎn)成浮點(diǎn)數(shù)list(abc)得到[a,b,c]。這些內(nèi)容單獨(dú)看都很簡單但我要說的是一個(gè)學(xué)習(xí)方法別試圖一次性記全這些“小工具”因?yàn)橛洸蛔?。更聰明的做法是記住兩點(diǎn)。第一Python有一個(gè)內(nèi)置函數(shù)列表官方文檔叫Built-in Functions你用之前去查一下就行。第二很多“折磨人”的報(bào)錯(cuò)都和數(shù)據(jù)類型的隱式轉(zhuǎn)換有關(guān)。比如你用input()讀到的永遠(yuǎn)是字符串你要做加法就必須先int()轉(zhuǎn)換。比如1除以2在Python 3里返回的是0.5而不是0。比如字符串乘以整數(shù)是重復(fù)拼接字符串列表乘以整數(shù)是重復(fù)列表元素。這些細(xì)節(jié)靠背很難記住但用多了自然就刻在腦子里了。3.3 控制流if、for、while的使用邏輯和嵌套技巧控制流是編程邏輯的核心也是很多非科班同學(xué)從“看代碼”到“寫代碼”的一道門檻。if語句的邏輯很簡單條件為真就執(zhí)行某個(gè)分支否則執(zhí)行另一個(gè)分支。每個(gè)條件表達(dá)式都會(huì)得到一個(gè)布爾值True或者False。for循環(huán)和while循環(huán)的區(qū)別值得多說幾句。for循環(huán)適合遍歷一個(gè)已知的序列比如遍歷列表里的每個(gè)元素、遍歷1到100的數(shù)字、遍歷字符串里的每個(gè)字符。while循環(huán)適合你不知道什么時(shí)候會(huì)停下來的場景比如寫一個(gè)猜數(shù)字游戲用戶沒猜對就一直循環(huán)。很多新手把for和while混著用明明可以用for的偏用while結(jié)果循環(huán)變量忘了遞增形成死循環(huán)。這里分享一個(gè)排查經(jīng)驗(yàn)如果代碼運(yùn)行后卡住不動(dòng)、CPU狂轉(zhuǎn)大概率是死循環(huán)了。這時(shí)候按CtrlC強(qiáng)制終止程序然后檢查你的while循環(huán)條件是不是永遠(yuǎn)不會(huì)變成False。3.4 函數(shù)、文件讀寫、異常處理三個(gè)構(gòu)成“可用程序”的拼圖語法學(xué)到一定程度就要開始寫函數(shù)。函數(shù)的本質(zhì)是“把一段邏輯包裝起來給它一個(gè)名字方便反復(fù)調(diào)用”。Python定義函數(shù)用def關(guān)鍵字比如def add(a, b): return a b定義函數(shù)時(shí)要注意兩點(diǎn)。一是參數(shù)和返回值參數(shù)是函數(shù)的輸入return是函數(shù)的輸出。沒有return的函數(shù)會(huì)隱式返回None。二是作用域函數(shù)內(nèi)部定義的變量一般只在函數(shù)內(nèi)部有效想要修改全局變量需要加global關(guān)鍵字但我很少這么干因?yàn)樵O(shè)計(jì)良好的代碼通常不需要依賴全局變量。文件讀寫是Python基礎(chǔ)里最容易被忽視但實(shí)際上超實(shí)用的功能。打開文件用open(文件名, 模式)模式主要有r讀取、w寫入、a追加、b二進(jìn)制。讀寫完后要close但更推薦用with語法它會(huì)幫你自動(dòng)關(guān)閉文件with open(data.txt, r, encodingutf-8) as f: content f.read()異常處理用try/except把可能出錯(cuò)的代碼放在try塊里出錯(cuò)后執(zhí)行except塊里的邏輯。這一步看起來不起眼但寫爬蟲和數(shù)據(jù)處理時(shí)極其關(guān)鍵。沒有異常處理的程序碰到一個(gè)臟數(shù)據(jù)可能就整個(gè)崩潰有了異常處理你就能跳過壞數(shù)據(jù)繼續(xù)跑完整個(gè)任務(wù)。4. 實(shí)用派Python進(jìn)階路徑爬蟲、數(shù)據(jù)分析與界面工具4.1 Python爬蟲入門從requests到BeautifulSoup的完整流程很多同學(xué)學(xué)Python基礎(chǔ)就是為了做爬蟲這個(gè)方向確實(shí)很能調(diào)動(dòng)學(xué)習(xí)興趣。爬蟲的本質(zhì)就三步用requests庫向服務(wù)器發(fā)起請求、拿到響應(yīng)的HTML內(nèi)容、用解析庫提取你要的數(shù)據(jù)。聽不懂拿生活類比一下requests就是你在瀏覽器地址欄輸入網(wǎng)址后按回車HTML就是網(wǎng)頁的源代碼解析庫就是幫你從源代碼里精準(zhǔn)找到某一條內(nèi)容的高亮筆。先用pip把依賴裝上pip install requests beautifulsoup4然后一個(gè)最基本的爬蟲長這樣import requests from bs4 import BeautifulSoup url https://example.com resp requests.get(url) resp.encoding utf-8 soup BeautifulSoup(resp.text, html.parser) title soup.find(h1).text print(title)這就是完整流程真的沒有那么神秘。不過我要強(qiáng)調(diào)三個(gè)坑。第一headers參數(shù)要帶上很多網(wǎng)站會(huì)攔截不帶瀏覽器標(biāo)識(shí)的請求。第二別拿爬蟲去高頻請求別人網(wǎng)站給自己惹麻煩不說也不道德做學(xué)習(xí)用途的話本地起個(gè)測試網(wǎng)頁就行。第三拿到HTML之后一定要先print出來看一眼編碼問題、動(dòng)態(tài)加載問題都是在這步暴露的。4.2 數(shù)據(jù)分析numpy、pandas和Matplotlib的最小配合數(shù)據(jù)分析也是Python基礎(chǔ)的重要分支。做數(shù)據(jù)分析我建議直接學(xué)這三個(gè)庫numpy負(fù)責(zé)數(shù)值計(jì)算pandas負(fù)責(zé)表格數(shù)據(jù)處理Matplotlib負(fù)責(zé)畫圖。三者配合基本能覆蓋日常80%的數(shù)據(jù)分析需求。安裝方法很簡單在命令行里運(yùn)行pip install numpy pandas matplotlib如果安裝時(shí)提示缺少什么包或者報(bào)一些奇怪的錯(cuò)誤比較常見的原因是Python版本太舊或者使用了Pypi默認(rèn)源下載過慢。解決辦法是換用國內(nèi)鏡像源比如清華源pip install numpy pandas matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simplepandas的核心數(shù)據(jù)結(jié)構(gòu)叫DataFrame你可以把它理解成一張Excel表格。讀入CSV文件用pd.read_csv(data.csv)篩選數(shù)據(jù)用df[df[列名] 100]分組統(tǒng)計(jì)用df.groupby(列名).mean()。熱搜詞里提到了“python tip.groupby()屬于哪個(gè)庫”答案就是pandas庫。Matplotlib畫圖最常用的是plt.plot(x, y)畫折線圖、plt.bar(x, y)畫柱狀圖、plt.scatter(x, y)畫散點(diǎn)圖最后plt.show()把圖彈出來。學(xué)數(shù)據(jù)分析有一個(gè)很實(shí)用的路徑找一份真實(shí)數(shù)據(jù)比如天氣記錄、股票歷史行情、電商訂單數(shù)據(jù)然后按照“讀入-清洗-統(tǒng)計(jì)-可視化”的順序做一遍。這個(gè)過程會(huì)逼迫你把文件讀寫、數(shù)據(jù)類型轉(zhuǎn)換、控制流、函數(shù)這些基礎(chǔ)語法全部用一遍比做一百道練習(xí)題都有效。5. 從Python代碼到可分享的程序打包exe與常用開發(fā)工具5.1 用PyInstaller把Python腳本打包成獨(dú)立應(yīng)用寫完一個(gè)Python腳本想要發(fā)給別人用你會(huì)發(fā)現(xiàn)對方電腦上未必裝了Python。這時(shí)候就需要把腳本打包成exe文件。PyInstaller是干這個(gè)事的首選工具。安裝和基本用法是這樣的pip install pyinstaller pyinstaller -F my_script.py-F參數(shù)表示生成單個(gè)exe文件方便分發(fā)。命令運(yùn)行完之后dist目錄下就會(huì)出現(xiàn)my_script.exe。這個(gè)exe文件就可以直接拷給Windows用戶使用對方不需要安裝Python。打包過程中有幾個(gè)常見問題我得提醒你。第一生成的exe體積很大一個(gè)簡單的腳本打包出來就有幾十MB這是正常的因?yàn)镻yInstaller把Python解釋器和你的依賴庫一起打進(jìn)去了。第二如果腳本里使用了動(dòng)態(tài)導(dǎo)入或者隱藏導(dǎo)入的模塊打包后可能報(bào)ModuleNotFoundError這時(shí)候需要額外加--hidden-import參數(shù)。第三如果你的程序用了圖標(biāo)可以用-i icon.ico指定。第四第一次打包的時(shí)候殺毒軟件可能會(huì)報(bào)警因?yàn)镻yInstaller打包出的程序特征有點(diǎn)像病毒這是誤報(bào)但你需要知道這個(gè)情況。5.2 必備的Python學(xué)習(xí)和開發(fā)工具清單除了Python解釋器和IDE我建議新手按需使用這些工具pip用于管理第三方庫virtualenv或venv用于環(huán)境隔離Git用于代碼版本管理Jupyter Notebook用于寫數(shù)據(jù)分析代碼它支持分格運(yùn)行、直接看到圖表輸出我處理數(shù)據(jù)的時(shí)候經(jīng)常用它。這些工具不需要一次全學(xué)但最好知道它們的存在和用途免得在社區(qū)看到別人聊的時(shí)候一頭霧水。還有一個(gè)免費(fèi)源碼的話題很多初學(xué)者喜歡收藏“免費(fèi)python源碼大全”總想著下載別人項(xiàng)目來學(xué)。我的看法是源碼可以看但別只收藏不看更別直接復(fù)制粘貼交作業(yè)??丛创a的正確姿勢是挑一個(gè)你感興趣的小項(xiàng)目先把它跑起來然后逐行讀代碼弄懂每一行的作用最后嘗試改一兩個(gè)功能。按照“讀得懂-改得動(dòng)-自己寫”的節(jié)奏來源碼才能真正變成你的東西。5.3 遇到“請安裝缺失的包以使用此工作流”怎么辦最近在下載一些開源項(xiàng)目時(shí)經(jīng)??吹筋愃啤罢埌惭b缺失的包以使用此工作流。要安裝缺失的節(jié)點(diǎn)請先在你的python環(huán)境中運(yùn)行pip install -u --pre comfyui-m...”的提示。這種提示通常出現(xiàn)在AI繪畫工具比如ComfyUI或者一些開源工作流項(xiàng)目里本質(zhì)上是缺少依賴包。處理方法是按提示找到對應(yīng)的requirements.txt文件在項(xiàng)目目錄下執(zhí)行pip install -r requirements.txt如果項(xiàng)目給出的是具體包名直接pip install那個(gè)包就行。這里有個(gè)細(xì)節(jié)值得注意盡量在虛擬環(huán)境里裝這些依賴而不是直接裝進(jìn)全局環(huán)境否則很容易和其他項(xiàng)目的依賴打架?!班盼已b的包挺多的啊怎么報(bào)缺包”這種問題幾乎都是因?yàn)榄h(huán)境不對。你先確認(rèn)一下你當(dāng)前用的是不是項(xiàng)目指定的那個(gè)Python環(huán)境再確認(rèn)一下依賴有沒有裝全基本就能解決。6. 常見問題與排查技巧實(shí)錄6.1 Python命令不生效的排查思路“python不是內(nèi)部或外部命令”和“Python安裝詳細(xì)步驟”經(jīng)常被同時(shí)搜到說明很多人在安裝之后遇到了同樣的問題。如果遇到這個(gè)情況按順序排查打開命令行輸入python如果提示不存在先重開一個(gè)命令行窗口試試——環(huán)境變量修改后需要重新打開才生效。如果重開還是不行去環(huán)境變量設(shè)置里確認(rèn)有沒有你Python的安裝路徑和Scripts路徑。確認(rèn)你的Python安裝目錄里確實(shí)有python.exe這個(gè)文件。如果沒有說明安裝過程出了問題卸載重裝。如果你的電腦同時(shí)裝了好幾個(gè)Python版本建議把需要用到的那個(gè)版本的路徑順序調(diào)到最前面或者用py -3.9來指定版本運(yùn)行。6.2 ModuleNotFoundError缺包問題的定位與解決ModuleNotFoundError是新手最常見的報(bào)錯(cuò)之一。比如你明明裝了numpy運(yùn)行代碼還是提示沒有這個(gè)模塊。這時(shí)候先別急著重裝包先確認(rèn)你的解釋器是不是對的。在VSCode里點(diǎn)右下角的解釋器版本號看看當(dāng)前選中的是哪個(gè)環(huán)境的Python。如果你在命令行里用python命令裝包但VSCode里選的解釋器是另一個(gè)比如虛擬環(huán)境里的Python那VSCode自然就import不到你剛裝好的包。解決辦法就一句話在所有場合用同一個(gè)Python環(huán)境。裝包用python -m pip install xxx而不是用pip install前者會(huì)明確裝到你正在使用的那個(gè)python解釋器對應(yīng)的環(huán)境里。6.3 中文亂碼與編碼問題用Python處理中文文件時(shí)經(jīng)常會(huì)遇到UnicodeDecodeError或者亂碼。這個(gè)問題十有八九是編碼格式不統(tǒng)一。Python 3里字符串默認(rèn)是Unicode編碼但讀寫文件時(shí)需要指定編碼。打開文件時(shí)建議明確寫encodingutf-8讀寫Excel或CSV時(shí)也要注意文件的原始編碼。如果遇到GBK編碼的文件就用encodinggbk。一個(gè)小經(jīng)驗(yàn)utf-8和gbk這兩個(gè)編碼的切換能解決90%的中文亂碼問題。6.4 安裝包時(shí)常見的問題速查表問題現(xiàn)象產(chǎn)生原因解決方案pip install報(bào)網(wǎng)絡(luò)超時(shí)默認(rèn)源在國外速度慢換清華源或阿里源鏡像pip install提示PermissionError權(quán)限不足Windows下用管理員命令行重試macOS下加--user參數(shù)安裝numpy提示需要編譯工具Python版本太老或平臺(tái)無預(yù)編譯包升級Python到3.8盡量使用官網(wǎng)版提示“No module named pip”Python環(huán)境受損或未安裝pip執(zhí)行python -m ensurepip --upgrade裝好了但import報(bào)錯(cuò)環(huán)境不對或安裝了多個(gè)Python確認(rèn)解釋器路徑用python -m pip list查看當(dāng)前環(huán)境包列表還有一個(gè)小技巧要分享如果你實(shí)在排查不出問題不妨把當(dāng)前Python環(huán)境完全卸載再重新安裝一遍。很多所謂的疑難雜癥其實(shí)都是環(huán)境太亂導(dǎo)致的。清清爽爽的干凈環(huán)境能省掉一大半問題。6.5 多版本Python的共存管理熱搜詞里有“windows安裝python多個(gè)版本”和“卸載python”說明多人在這兩個(gè)需求上踩了坑。同一臺(tái)電腦裝多個(gè)Python版本是完全可以的但需要一些管理技巧。最簡單的做法安裝時(shí)給不同版本分別勾選“Add Python to PATH”把它們都裝進(jìn)默認(rèn)路徑下。然后在命令行里用py -3.9和py -3.11來指定版本運(yùn)行用py -3.9 -m pip install xxx給指定版本裝包。如果你早學(xué)會(huì)了虛擬環(huán)境其實(shí)多個(gè)Python版本的問題也很好解決每個(gè)虛擬環(huán)境都可以指定使用哪個(gè)Python解釋器創(chuàng)建項(xiàng)目之間天然隔離。卸載Python時(shí)要注意先在“設(shè)置-應(yīng)用”里卸載主程序再去環(huán)境變量里刪除對應(yīng)的路徑條目最后檢查一下C:\Users\用戶名\AppData\Local\Programs\Python目錄下有沒有殘留文件有的話手動(dòng)清掉。卸載干凈再裝新版能避免很多說不清道不明的靈異問題。7. 從基礎(chǔ)到實(shí)戰(zhàn)一個(gè)小命令搞定版本管理前面聊了不少環(huán)境問題和報(bào)錯(cuò)排查最后再給你一個(gè)能立刻用上的小技巧用python -m pip來統(tǒng)一管理包。很多人習(xí)慣直接敲pip install xxx但如果你的電腦里有多個(gè)Python環(huán)境你根本不知道pip裝到哪兒去了。而python -m pip明確指定了是哪個(gè)Python在干活。同樣的道理運(yùn)行腳本時(shí)你可以用python xxx.py而不是雙擊運(yùn)行。雙擊運(yùn)行的缺點(diǎn)是看不到報(bào)錯(cuò)信息程序一閃而過你不知道發(fā)生了什么。在終端里運(yùn)行則能看到完整的輸出和錯(cuò)誤堆棧排查問題方便得多。這個(gè)小習(xí)慣我推薦給你它比任何工具都更實(shí)用。最后再分享一點(diǎn)我的個(gè)人體會(huì)Python基礎(chǔ)最難的階段不是學(xué)語法而是從“看教程”切換到“自己寫代碼”的那個(gè)瞬間??词榻坛滩蝗缬H手寫一個(gè)能跑的小程序。你可以找一個(gè)最簡單的題目比如“讓用戶輸入兩個(gè)數(shù)輸出它們的和”“生成一個(gè)九九乘法表”“統(tǒng)計(jì)一篇文章里每個(gè)單詞出現(xiàn)了幾次”然后關(guān)掉教程獨(dú)立完成。做完這三個(gè)你對Python基礎(chǔ)的掌握就已經(jīng)超過一大半徘徊在門口的初學(xué)者了。剩下的事情就是帶著問題繼續(xù)往前走遇到什么學(xué)什么這本來就是編程的學(xué)習(xí)常態(tài)。