很多學(xué)習(xí)python的初學(xué)者甚至學(xué)了有一段時間的人接觸到anaconda或者其他虛擬環(huán)境工具時覺得無從下手, 其主要原因就是不明白這些工具究竟有什么用, 是用來做什么的, 為什么要這么做, 比如筆者一開始也是不明白為啥除了python之外我還需要這么一個東西, 他和python到底有啥聯(lián)系和區(qū)別, 為啥能用來管理python.
在使用過之后我才逐漸發(fā)現(xiàn)其實anaconda等環(huán)境管理工具究竟在做啥, 以及為什么我們需要他們來管理我們的python環(huán)境
首先我們需要先去了解Anaconda誕生的目的.再去了解Anaconda的使用方法.
Python本身
首先我們需要從python本身說起, 從根源尋找問題, 我們在使用python語言編寫程序之前需要下載一個python解釋器, 這才是python的本體, 沒了python解釋器, 我們即使寫了無比正確優(yōu)雅的python腳本也沒辦法運行, 那這個解釋器在哪呢.就在你安裝python的地方,比如我的在C:\Users\Acring\AppData\Local\Programs\Python\Python36-32
項目結(jié)構(gòu)如上圖,這里有我們很熟悉的python.exe, 也就是Python解釋器
除此之外還有個很重要的東西, Lib, 也就是python包文件, 包括自帶的包和第三方包
Lib文件夾
\
Lib目錄如上圖, 這里有python自帶的包, 如筆者常用的日志包logging, 異步包 concurrent, 而所有的第三方包都放在site-packages文件夾里面
了解了這些我們就對整個python環(huán)境有了大概的了解, 其實最關(guān)鍵的, 一個python環(huán)境中需要有一個解釋器, 和一個包集合.
解釋器
解釋器根據(jù)python的版本大概分為2和3. python2和3之間無法互相兼容, 也就是說用python2語法寫出來的腳本不一定能在python3的解釋器中運行.
包集合
包集合中包含了自帶的包和第三方包, 第三方包我們一般通過pip或者easy_install來下載, 當(dāng)一個python環(huán)境中不包含這個包, 那么引用了這個包的程序不能在該python環(huán)境中運行.
比如說一個爬蟲腳本用到了第三方的requests包,而另一臺計算機(jī)是剛剛裝好原始python的, 也就是說根本沒有任何第三方包, 那么這個爬蟲腳本是無法在另一臺機(jī)器上運行的.
問題所在
python環(huán)境解釋完了, 那么接下來就要說明這樣的環(huán)境究竟產(chǎn)生哪些問題, 因為anaconda正式為了解決這些問題而誕生的
- 到底該裝 Python2 呢還是 Python3
python2和python3在語法上是不兼容的, 那我的機(jī)器上應(yīng)該裝python2還是python3呢, 可能一開始選一個學(xué)習(xí)就好了, 但是如果你要開發(fā)的程序必須使用python2而不能使用python3,那這時候你就不得不再下載一個python2, 那這時候環(huán)境變量該設(shè)誰的目錄呢, 如果還是切換環(huán)境變量豈不是很麻煩.
- 包管理
如果我在本地只有一個python環(huán)境那我所有程序用到的各種包都只能放到同一個環(huán)境中, 導(dǎo)致環(huán)境混亂, 另外當(dāng)我將寫好的程序放到另一電腦上運行時又會遇到缺少相關(guān)包, 需要自己手動一個個下載的情況, 實在是煩人, 要是能每個程序開發(fā)都選用不同的環(huán)境, 而開發(fā)好之后又能將該程序需要的環(huán)境(第三方包)都獨立打包出來就好了.
Anaconda
那么接下來就到我們的anaconda上場了, 先讓我們安裝好Anaconda然后我再來告訴你如何用Anaconda一個個解決我們上面的問題吧.
官網(wǎng)下載
推薦下載python3版本, 畢竟未來python2是要停止維護(hù)的.
安裝
按照安裝程序提示一步步安裝就好了, 安裝完成之后會多幾個應(yīng)用
- Anaconda Navigtor :
用于管理工具包和環(huán)境的圖形用戶界面,后續(xù)涉及的眾多管理命令也可以在 Navigator 中手工實現(xiàn)。
- Jupyter notebook :
基于web的交互式計算環(huán)境,可以編輯易于人們閱讀的文檔,用于展示數(shù)據(jù)分析的過程。
- qtconsole :
一個可執(zhí)行 IPython 的仿終端圖形界面程序,相比 Python Shell 界面,qtconsole 可以直接顯示代碼生成的圖形,實現(xiàn)多行代碼輸入執(zhí)行,以及內(nèi)置許多有用的功能和函數(shù)。
- spyder :
一個使用Python語言、跨平臺的、科學(xué)運算集成開發(fā)環(huán)境。
暫時先不用管, 了解一下就行了
配置環(huán)境變量
如果是windows的話需要去 控制面板\系統(tǒng)和安全\系統(tǒng)\高級系統(tǒng)設(shè)置\環(huán)境變量\用戶變量\PATH 中添加 anaconda的安裝目錄的Scripts文件夾, 比如我的路徑是D:\Software\Anaconda\Scripts, 看個人安裝路徑不同需要自己調(diào)整.
之后就可以打開命令行(最好用管理員模式打開) 輸入 conda --version
如果輸出conda 4.4.11之類的就說明環(huán)境變量設(shè)置成功了.
為了避免可能發(fā)生的錯誤, 我們在命令行輸入conda upgrade --all 先把所有工具包進(jìn)行升級
管理虛擬環(huán)境
接下來我們就可以用anaconda來創(chuàng)建我們一個個獨立的python環(huán)境了.接下來的例子都是在命令行操作的,請打開你的命令行吧.
activate
activate 能將我們引入anaconda設(shè)定的虛擬環(huán)境中, 如果你后面什么參數(shù)都不加那么會進(jìn)入anaconda自帶的base環(huán)境,
你可以輸入python試試, 這樣會進(jìn)入base環(huán)境的python解釋器, 如果你把原來環(huán)境中的python環(huán)境去除掉會更能體會到, 這個時候在命令行中使用的已經(jīng)不是你原來的python而是base環(huán)境下的python.而命令行前面也會多一個(base) 說明當(dāng)前我們處于的是base環(huán)境下.
activate
創(chuàng)建自己的虛擬環(huán)境
我們當(dāng)然不滿足一個base環(huán)境, 我們應(yīng)該為自己的程序安裝單獨的虛擬環(huán)境.
創(chuàng)建一個名稱為learn的虛擬環(huán)境并指定python版本為3(這里conda會自動找3中最新的版本下載)
conda create -n learn python=3
于是我們就有了一個learn的虛擬環(huán)境, 接下來我們切換到這個環(huán)境, 一樣還是用activae命令 后面加上要切換的環(huán)境名稱
切換環(huán)境
activate learn
如果忘記了名稱我們可以先用
conda env list
去查看所有的環(huán)境
現(xiàn)在的learn環(huán)境除了python自帶的一些官方包之外是沒有其他包的, 一個比較干凈的環(huán)境我們可以試試
先輸入python打開python解釋器然后輸入
>>> import requests
會報錯找不到requests包, 很正常.接下來我們就要演示如何去安裝requests包
exit()
退出python解釋器
安裝第三方包
輸入
conda install requests
或者
pip install requests
來安裝requests包.
安裝完成之后我們再輸入python進(jìn)入解釋器并import requests包, 這次一定就是成功的了.
卸載第三方包
那么怎么卸載一個包呢
conda remove requests
或者
pip uninstall requests
就行啦.
查看環(huán)境包信息
要查看當(dāng)前環(huán)境中所有安裝了的包可以用
conda list
導(dǎo)入導(dǎo)出環(huán)境
如果想要導(dǎo)出當(dāng)前環(huán)境的包信息可以用
conda env export > environment.yaml
將包信息存入yaml文件中.
當(dāng)需要重新創(chuàng)建一個相同的虛擬環(huán)境時可以用
conda env create -f environment.yaml
其實命令很簡單對不對, 我把一些常用的在下面給出來, 相信自己多打兩次就能記住
activate // 切換到base環(huán)境activate learn // 切換到learn環(huán)境conda create -n learn python=3 // 創(chuàng)建一個名為learn的環(huán)境并指定python版本為3(的最新版本)conda env list // 列出conda管理的所有環(huán)境conda list // 列出當(dāng)前環(huán)境的所有包conda install requests 安裝requests包conda remove requests 卸載requets包conda remove -n learn --all // 刪除learn環(huán)境及下屬所有包conda update requests 更新requests包conda env export > environment.yaml // 導(dǎo)出當(dāng)前環(huán)境的包信息conda env create -f environment.yaml // 用配置文件創(chuàng)建新的虛擬環(huán)境
深入一下
或許你會覺得奇怪為啥anaconda能做這些事, 他的原理到底是什么, 我們來看看anaconda的安裝目錄
這里只截取了一部分, 但是我們和本文章最開頭的python環(huán)境目錄比較一下, 可以發(fā)現(xiàn)其實十分的相似, 其實這里就是base環(huán)境. 里面有著一個基本的python解釋器, lLib里面也有base環(huán)境下的各種包文件.
那我們自己創(chuàng)建的環(huán)境去哪了呢, 我們可以看見一個envs, 這里就是我們自己創(chuàng)建的各種虛擬環(huán)境的入口, 點進(jìn)去看看
可以發(fā)現(xiàn)我們之前創(chuàng)建的learn目錄就在下面, 再點進(jìn)去
這不就是一個標(biāo)準(zhǔn)的python環(huán)境目錄嗎?
這么一看, anaconda所謂的創(chuàng)建虛擬環(huán)境其實就是安裝了一個真實的python環(huán)境, 只不過我們可以通過activate,conda等命令去隨意的切換我們當(dāng)前的python環(huán)境, 用不同版本的解釋器和不同的包環(huán)境去運行python腳本.
與pycharm連接
在工作環(huán)境中我們會集成開發(fā)環(huán)境去編碼, 這里推薦JB公司的pycharm, 而pycharm也能很方便的和anaconda的虛擬環(huán)境結(jié)合
在Setting => Project => Project Interpreter 里面修改 Project Interpreter , 點擊齒輪標(biāo)志再點擊Add Local為你某個環(huán)境的python.exe解釋器就行了
比如你要在learn環(huán)境中編寫程序, 那么就修改為D:\Software\Anaconda\envs\learn, 可以看到這時候下面的依賴包也變成了learn環(huán)境中的包了.接下來我們就可以在pycharm中愉快的編碼了.
結(jié)語
現(xiàn)在你是不是發(fā)現(xiàn)用上anaconda就可以十分優(yōu)雅簡單的解決上面所提及的單個python環(huán)境所帶來的弊端了呢, 而且也明白了其實這一切的實現(xiàn)并沒有那么神奇.
當(dāng)然anaconda除了包管理之外還在于其豐富數(shù)據(jù)分析包, 不過那就是另一個內(nèi)容了, 我們先學(xué)會用anaconda去換一種方法管里自己的開發(fā)環(huán)境, 這已經(jīng)是一個很大的進(jìn)步了.