python人工智能方向第三方库_Python进阶-第三方库管理和虚拟环境
本文為《爬著學(xué)Python》系列第十三篇文章。
Python能在這幾年火起來,靠的不是網(wǎng)上一大片的爬蟲和服務(wù)器后端知識的應(yīng)用(本專題就是這樣的,這么說真的好嗎?不過我們總得認(rèn)清事實是吧。),靠的是Python搭上了大數(shù)據(jù)和人工智能的風(fēng)。而Python之所以能很好地適應(yīng)人工智能方面的應(yīng)用,不是因為該語言對這方面進(jìn)行了優(yōu)化,我認(rèn)為主要的原因有以下兩點:一個是簡單易學(xué),方便了數(shù)學(xué)、工程和金融等行業(yè)各領(lǐng)域的對新技術(shù)開放包容的人士入門;另一個是種類豐富而且文檔詳實的第三方庫滿足了不同的需求。前者讓更多人加入到Python的行列中來,后者讓Python快速實現(xiàn)功能的能力非常強(qiáng)大。
今天我們主要講講Python的第三方庫的管理。這方面的例子有很多,比如剛才提到的數(shù)據(jù)處理機(jī)器學(xué)習(xí),那么不得不提的是SciPy,NumPy和scikit-learn想必很多人都不陌生。不過本專題不是為了學(xué)這個,本專題是借Python學(xué)習(xí)互聯(lián)網(wǎng)相關(guān)知識,所以我們以request和flask為例(哇,突然感覺自己過時了,但是既然本來決定好了專題內(nèi)容,現(xiàn)在也不臨時改了。況且我也不會啊,#無奈。而且我也沒精力同時更新兩個專題啊,#攤手。)。
上面是廢話,下面是正文。
pip
沒錯,首先聲明,我們主要用pip來下載第三方庫,實在特殊的環(huán)境才會使用easy_install。原因也很簡單,virtualenv都開始自帶pip了,我們跟著大佬養(yǎng)成習(xí)慣就好啦。
說了幾句可能有新手還不知道pip到底是什么東西。簡單來說就是Python的yum,好吧這可能是廢話,操作過RedHat不會不知道pip。真正地簡單來說,pip是一個用來便捷管理Python第三方庫的命令行工具。由于前面提到過我們主要用Windows示例,我們就用PowerShell來演示。
如果說不知道PowerShell是什么,可以理解為新一代的cmd。如果是以Windows作為主力開發(fā)環(huán)境,建議把PowerShell固定在任務(wù)欄。想要了解PowerShell的更多知識,可以參考Getting Started with PowerShell 3.0 | Channel 9。其中一個主講Jeffery Snover是PowerShell的主力開發(fā)工程師,是微軟非常厲害的服務(wù)器架構(gòu)和管理方面的大牛,在C9可以免費看到大牛手把手教你敲腳本,如果對英文不自信,該系列甚至還有中文字幕!
之所以如此介紹PowerShell,是因為它真的非常“powerful”,而且我們可以用PowerShell來熟悉Shell編程,熟悉腳本編寫。說到底我們是來學(xué)習(xí)知識的,不要死盯著pip。如果進(jìn)度許可,以后我可能會給一個PowerShell腳本爬蟲實例(大概會吧)。是的,PowerShell的一些特性使得他原生地可以非常完美地實現(xiàn)靜態(tài)網(wǎng)頁的爬蟲功能,甚至要比Python更優(yōu)雅,你就說powerful不powerful。
好了言歸正傳,win+r打開運行命令,輸入powershell即可打開命令行窗口。我們就可以直接使用pip命令來下載第三方庫了。
如果提示沒有該命令,先確保已經(jīng)安裝Python(開個玩笑),我們可以去設(shè)置環(huán)境變量。既然就在PowerShell,那么不妨就用它來設(shè)置好了(嫌麻煩可以直接我的電腦-右鍵屬性-高級系統(tǒng)設(shè)置-高級-環(huán)境變量-用戶變量-Path-加上Python文件夾和scripts文件夾或bin文件夾)。查看所有本地環(huán)境變量可以直接查看虛擬驅(qū)動器,查看具體的環(huán)境變量可以查看全局變量:
PS C:\> ls env:
Name Value
---- -----
ALLUSERSPROFILE C:\ProgramData
APPDATA C:\Users\somarl\AppData\Roaming
...//其他就省略了
或者
PS C:\> $env:path
I:\SecureCRT\;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client
\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPower
Shell\v1.0\;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Fi
les\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R)
Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine C
omponents\IPT;C:\Program Files\Calibre2\;I:\Git\cmd;I:\mysql-5.7.18-winx64\bin;...//還有一大串就省略了
添加環(huán)境變量也很簡單
PS C:\> $Env:path=$Env:Path+";I:\Anaconda3\Scripts;I:\Anaconda3\Scripts"
這里只是我的示例,PowerShell不是我們要介紹的重點,這幾句命令非常簡單,沒有用到pipeline,很容易理解。
總之只要在命令行中輸入pip回車能夠進(jìn)入庫管理工具就可以了。
virtualenv
安裝
我們就用虛擬環(huán)境工具包作為外部庫的第一個示例。使用pip安裝外部庫非常簡單,只要輸入
pip install virtualenv
或者某些情況下(比如有些Linux不同的設(shè)置下)會需要輸入
pip3 install virtualenv
如果沒有安裝過,那么pip就會自動尋找適配的版本開始下載安裝。這里面存在以下幾個問題:
找不到適配的版本怎么辦
下載速度太慢怎么辦
安裝失敗怎么辦
首先適配的版本找不到的話,有可能是平臺(Windows/Linux/Unix)的原因,也有可能是數(shù)位的原因(32/64),也有可能是Python版本的原因(2.4/2.7/3.2/3.5)。這種錯誤不會指出到底是哪個不適配,具體可以去PyPI查看,PyPI是Python官方的庫索引,我主要用來查看各種庫的兼容信息。
下載速度太慢可以換國內(nèi)的鏡像。這個在后面介紹conda的時候會再介紹。我們可以臨時在命令行后面加上參數(shù)
pip install virtualenv -i https://pypi.tuna.tsinghua.edu.cn/simple
這是清華的鏡像,我自己用的是豆瓣的鏡像,好像阿里也有鏡像,這些百度一下就可以看到。Linux習(xí)慣了改各種配置文件,但是Windows總覺得有些不舒服。conda會有比較人性化的命令行直接設(shè)置永久的鏡像。
安裝失敗的話,一般會有報錯信息,可以根據(jù)報錯信息處理。一般來說Windows平臺常見的報錯是CPython庫的C依賴相關(guān)問題報錯,Linux平臺常見的報錯是權(quán)限不足的問題。后者比較好解決,直接在命令前面加上sudo就可以了。
CPython的問題有以下幾種解決辦法:
PyPI或者Github找找看有沒有類似的純Python庫。這么做其實不太推薦,但是這么做也有好處,就是如果完全不用CPython包可以用PyPy加速。
去LFD找找看有沒有編譯好的wheel文件,全稱叫Python Extension Packages for Windows,這是比較推薦的解決方案。關(guān)于wheel文件的使用方法下面會講到。
去庫的Github地址找官方的針對Windows的編譯好的文件(不一定有,一般是沒有的),或者自己編譯(不推薦,我以前做過這種事,體驗很差)。
安裝支持環(huán)境,這個看上去最理所當(dāng)然的方法反而是我不太喜歡的。原因在于VS有些臃腫,我還是喜歡用VS6.0。
關(guān)于wheel文件的使用,其實很簡單,就是pip安裝的時候不要指出安裝包的名字,直接給出wheel文件的地址就可以了。比如:
pip install G:\action\tmp\Twisted?17.9.0?cp36?cp36m?win_amd64.whl
大概是這樣吧,很久沒用過,應(yīng)該是這樣的。如果失敗了,試試先pip install wheel。
OK,那么就算講完了怎么用pip安裝擴(kuò)展包了。
卸載、更新、查看
和安裝對應(yīng),卸載只需要輸入
pip uninstall virtualenv
非常合理的做法。至于更新,其實為了程序的穩(wěn)定運行和兼容性,這個功能其實是不常用的,這也是pip默認(rèn)你想要更新的話其實就和直接重新安裝沒區(qū)別,這個邏輯我覺得設(shè)計也算巧妙(conda有update功能,pip沒有)。
至于你如果要批量更新,去StackOverflow或者百度找會有很多腳本,或者Anaconda控制臺,Pycharm都有相應(yīng)的功能可以實現(xiàn)。當(dāng)然,我并不推薦做這種事情。這也是我們會需要虛擬環(huán)境的原因,庫文件穩(wěn)定性是首要考慮的問題,所以更新要慎重。我的意思也不是不建議各位更新,只是不建議批量更新帶來不必要的麻煩。
查看庫有兩種,一種是查看安裝了哪些庫
pip list
一種是查看某個庫的信息。
pip show virtualenv
list命令也有相關(guān)的參數(shù),也可以寫進(jìn)配置文件中,這里不贅述了。show命令主要是用來看安裝地址location,環(huán)境依賴requires,開源協(xié)議license,當(dāng)然,有些有主頁的可以找到一些文檔。
關(guān)于pip的講解到此為止,如此簡單的工具講了這么多廢話了。還有一些功能沒講呢,會穿插在virtualenv和conda中講。
virtualenv的用法
我們講了這么久我們需要虛擬環(huán)境,那么virtuaenv是什么,到底怎么用呢。
virtualenv是一個虛擬環(huán)境工具,用來構(gòu)建一個Python程序運行的特殊環(huán)境。之所以需要特殊的環(huán)境,是為了方便移植,比如你可以讓別人輕松地還原你的源程序運行的環(huán)境。同時它也方便的環(huán)境測試與管理,比如我們可以測試在不同的Python版本不同的外部庫版本下程序的表現(xiàn),就可以用虛擬環(huán)境來做到,而不必在電腦上安裝多個版本Python,避免互相沖突。
具體的各種參數(shù)我就不講了,virtualenv可以指定Python版本,可以指定包括哪些庫。我們默認(rèn)就是用virtualenv來運行我們主要Python版本,主要是為了管理外部庫環(huán)境復(fù)制和還原,因此我們使用最簡單的命令就可以了(Python版本的切換我傾向于用Conda,后面會講到,比較徹底)。
PS G:\action\pipl> virtualenv venv
如果安裝了virtualenv,那么直接進(jìn)入項目根目錄輸入virtualenv venv就會創(chuàng)建一個目前Python版本的虛擬環(huán)境。其中venv是這個環(huán)境的名字,一般都叫這個。
在比較新的版本virtualenv中,這種默認(rèn)創(chuàng)建方式會自動安裝pip、setuptools、wheel三件套,你也可以通過如--no-pip的參數(shù)來防止安裝這些包。
最簡單的創(chuàng)建方式是有它的道理的,因為這是最常見的應(yīng)用場景,絕大多數(shù)情況下確實是virtualenv venv就能解決問題了。創(chuàng)建完成后目錄下會多出一個虛擬環(huán)境為名字的文件夾。
進(jìn)入虛擬環(huán)境
創(chuàng)建完成后我們需要進(jìn)入虛擬環(huán)境,否則命令行怎么知道你到底想在哪個環(huán)境執(zhí)行命令呢。激活的方式很簡單
PS G:\action\pipl> venv\Scripts\activate
如果出現(xiàn)權(quán)限問題或者安全問題。用管理員運行的PowerShell也是無濟(jì)于事的,直接將出錯信息百度,會有更改安全策略的解決方式。如果是Linux環(huán)境,注意source要把Scripts改成bin,值得一提的是Windows環(huán)境下激活虛擬環(huán)境會卡住幾秒,Linux幾乎是秒進(jìn)。成功進(jìn)入后,命令行會有虛擬環(huán)境的前綴。
這時我們再進(jìn)行一些動作,都是虛擬環(huán)境下了,比如說我們進(jìn)入Python試試引入一些安裝過的外部庫。
在外部環(huán)境中我肯定是安裝了requests的,這怎么說也算是爬蟲的最關(guān)鍵的庫了。我們不妨試試剛學(xué)的列出安裝過的Python庫。
可以看到除了三件套確實什么都沒有。我們可以試試安裝外部庫
可以看到確實可以安裝。
一下子多了許多庫出來。
退出虛擬環(huán)境
這個很簡單,只要在虛擬環(huán)境中輸入deactivate就能退出。
環(huán)境還原
現(xiàn)在我們來講剛才提到的,關(guān)于環(huán)境還原的問題。如果我在開發(fā)中用到了一些依賴環(huán)境,那么我該如何讓別人知道我用了哪些庫呢?是不是對著代碼一個個去找import了哪些庫?這樣做不僅麻煩而且容易遺漏,文件一多就會是很糟糕的體驗了。
換個思路,我們只要讓別人知道用pip安裝過哪些庫就可以了。我們可以用pipeline把powershell的pip list屏幕輸出保存到文件中。但是還有更簡單的方法,pip內(nèi)置了這樣方法。
(venv) PS G:\action\pipl> pip freeze >requirements.txt
這樣項目根目錄下會多出一個需求文件。打開來看一下。
可以看到除了三件套以外的包都在里面了。使用pip生成需求文件還有一個好處,就是可以用pip快速還原環(huán)境。比如我們再新建一個虛擬環(huán)境,并且還原剛才的環(huán)境(注意要把requirements.txt放在新項目的根目錄下)。
PS C:\Users\somarl> cd G:\action\pipm
PS G:\action\pipm> virtualenv venv
Using base prefix 'I:\\Anaconda3'
New python executable in G:\action\pipm\venv\Scripts\python.exe
copying I:\Anaconda3\python.exe => G:\action\pipm\venv\Scripts\python.exe
Installing setuptools, pip, wheel...done.
PS G:\action\pipm> cp G:\action\pipl\requirements.txt G:\action\pipm\requirements.txt
PS G:\action\pipm> venv\Scripts\activate
(venv) PS G:\action\pipm> pip install -r requirements.txt
在實際操作中,我們的項目一般是用git clone下來的,所以不會需要手動去找requirements.txt,而且一般虛擬環(huán)境會被gitignore掉。這也是為什么大家都用venv當(dāng)作虛擬環(huán)境名字,是為了方便git的相關(guān)操作。當(dāng)然,在上面的操作中我也可以不復(fù)制requirements.txt文件,直接在pip install -r中參數(shù)設(shè)置成之前的路徑就可以,這里是為了還原一般的使用場景,而Git相關(guān)的知識我還沒有講過,所以目前先不管它。
當(dāng)然這也不是一勞永逸的。我們可以看看還原了哪些庫。
注意到Twisted不見了,這也是我拿它作示例的原因。這就是我們剛才說過的Windows環(huán)境下pip安裝可能出錯的地方。錯誤信息是這樣的
error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Builds": http://landinghub.visualstudio.com/visual-cpp-build-tools
因此我們確實有的時候需要注意到這些問題。如果你用別人的自構(gòu)爬蟲框架,Twisted是出現(xiàn)率非常高的庫。我們可能會需要手動安裝這樣的庫。不僅爬蟲,科學(xué)計算相關(guān)包中對CPython的依賴其實更明顯,很多庫需要手動安裝。或者你可以使用Linux,當(dāng)然如果這種程度的問題都有很大的困擾,那么Linux系統(tǒng)給你帶來的困擾可能會更多,對計算機(jī)原理和操作系統(tǒng)不是特別了解的不太推薦使用Linux。
Conda
除了virtualenv以外,我們提到虛擬環(huán)境,我比較推薦的還有Conda。在我看來Conda其實更適合本地環(huán)境的構(gòu)建而不是虛擬環(huán)境的構(gòu)建,我個人是把Conda當(dāng)作增強(qiáng)版的pip來使用的。
Conda強(qiáng)在不僅可以改變環(huán)境的包,甚至可以改變環(huán)境本身。比如說我的電腦裝的是Python3.6,但是后來我發(fā)現(xiàn)我其實比較喜歡Python3.5怎么辦呢。我不必每次創(chuàng)建一個虛擬環(huán)境,我不必卸載Python3.6重新安裝一個Python3.5,我不必更改各種軟鏈(Linux)。Conda可以把默認(rèn)的Python運行環(huán)境改掉。
所以說,如果說pip是管理Python庫的,那么Conda可以說是用來管理Python的(它本身也可以管理庫,而且比pip更強(qiáng),只是包的數(shù)量不及pip多)。至少我目前是這么用的。而且其實熟悉Linux的同學(xué)可能知道,Conda不僅僅適用于Python,它的適應(yīng)面還能更廣。
Conda和pip以及virtualenv的關(guān)系,就好比Tornado和Django以及uWSGI甚至Nginx的關(guān)系。它是一種類似的交叉包容但又有所側(cè)重的關(guān)系。
所以Conda是非常全能的工具。它可以做到pip能做到的事情,它可以做到virtualenv能做到的事情,它還可以做到這兩個工具做不到的其他的事情。可惜的事實是Tornado不僅功能上無所不能、性能也強(qiáng)勁得讓人刮目相看,但卻依然沒有Django受歡迎,也不如Flask,幾乎可以說和Bottle、web2py一樣是被冷落的那類框架。
不過好在Conda還是非常受歡迎的。因為它不僅功能強(qiáng),它的虛擬環(huán)境其實比virtualenv更加純粹。它的Python包管理依賴追蹤能力是pip望塵莫及的。但是出于習(xí)慣,現(xiàn)在主流的虛擬環(huán)境工具是virtualenv,主流的庫管理工具是pip,這兩個也是我今天介紹的重點。但我還是要推薦一下Conda,它好到值得你去使用。
具體的使用技巧,本文就不再介紹了,篇幅有限是一方面,另一方面我自己對Conda的使用也算不上理解多深,就不獻(xiàn)丑了。有興趣的不妨去探索吧。
另外再提一下Python3.3以上版本其實是有自帶的虛擬環(huán)境工具的,直接就叫作venv,用它創(chuàng)建環(huán)境的方式是這樣的
python -m venv venv
要注意后面的那個venv是虛擬環(huán)境的名字,前面的那個是工具的名字。有趣的是它的體積小但性能其實也很強(qiáng)。使用方法和virtualenv大同小異,這里也不展開講了。
最后講些廢話
之前說好了在Conda相關(guān)內(nèi)容中講怎么用命令行永久改鏡像,結(jié)果后來還是忘了。其實很簡單,Conda有config方法直接加參數(shù)--add channels 地址就行了。這樣就能避免在Windows系統(tǒng)中編輯配置文件的違和感了。我Conda用的是清華的鏡像,地址百度一下應(yīng)該就有。
這篇還是以介紹pip和virtualenv為主,我能想到的大部分場景都盡量進(jìn)行了說明,如果有缺漏的地方可以直接留言提出來。
鏈接
總結(jié)
以上是生活随笔為你收集整理的python人工智能方向第三方库_Python进阶-第三方库管理和虚拟环境的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux文件查看命令(linux 文件
- 下一篇: 安卓棋牌娱乐软件(安卓棋牌娱乐)