摘要:最近在上使用遇到了問(wèn)題,由于使用了庫(kù),其同時(shí)存在于和,的庫(kù)中,版本為,而最新的為。建議使用參數(shù)將上的開(kāi)發(fā)目錄掛載到容器中,這樣僅僅使用了容器提供的環(huán)境,而代碼跟容器本身并沒(méi)有關(guān)系。支持多種,,,之類(lèi),的確非常方便。
最近在Mac上使用Python遇到了問(wèn)題,由于使用了pyOpenSSL庫(kù),其同時(shí)存在于/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python和/Library/Python/2.7/site-packages,Mac python的庫(kù)中,pyOpenSSL版本為0.13,而最新的pyOpenSSL為0.15.1。使用sudo pip install --upgrade pyopenssl==0.15.1無(wú)法將Mac python的庫(kù)升級(jí),所以無(wú)法使用0.15.1的pyopenssl。
嘗試了Docker, vagrant, virtualenv,這幾個(gè)東西都可以實(shí)現(xiàn)創(chuàng)建一個(gè)較為干凈的python開(kāi)發(fā)環(huán)境,在嘗試了他們之后在這里分享一下心得,僅供參考,這里假定讀者也有以上工具的相關(guān)經(jīng)驗(yàn),不喜勿噴。
1. 基于Docker其實(shí)docker的出現(xiàn),一定程度上就是為了解決這類(lèi)問(wèn)題,我把所有的代碼,庫(kù)文件,二進(jìn)制,配置文件之類(lèi)的,放到集裝箱里,一并打包給你,所以你就得到了一個(gè)跟我環(huán)境一模一樣的環(huán)境,不管是在開(kāi)發(fā),測(cè)試還是生成環(huán)境,對(duì)于應(yīng)用來(lái)說(shuō),周?chē)沫h(huán)境都一模一樣,減少了部署,遷移之類(lèi)的不必要的麻煩。
如果想要用Docker搭建一個(gè)Python開(kāi)發(fā)環(huán)境,極為簡(jiǎn)單,只需要去官方下載Python的docker image即可,啟動(dòng)后,你可能需要安裝一些包,然后記得commit保存下你對(duì)鏡像的修改,下次啟動(dòng)或者把鏡像導(dǎo)給你的同事,得到的環(huán)境都是一模一樣的。
但是千萬(wàn)記得,別把你的代碼直接放到docker image中,這是個(gè)很不好的選擇,萬(wàn)一哪次忘記commit就躲墻角里哭去吧。
建議使用-v參數(shù)將Host上的開(kāi)發(fā)目錄掛載到容器中,這樣僅僅使用了容器提供的環(huán)境,而代碼跟容器本身并沒(méi)有關(guān)系。
OK,說(shuō)到這,你可能覺(jué)得我說(shuō)了一大堆的廢話(huà),的確廢話(huà),因?yàn)檫@一切在Docker中太簡(jiǎn)單了。
2. 基于VagrantVagrant是什么鬼?前段時(shí)間我一直想問(wèn)這個(gè)問(wèn)題,后來(lái)用RancherOS,官方推薦用這貨來(lái)啟動(dòng)RancherOS,就試了一下。這貨實(shí)際上就是一個(gè)Wrapper,你看到的是統(tǒng)一的接口,但是其背后是各種虛擬機(jī),默認(rèn)是VirtualBox。
說(shuō)白了,用Vagrant享受的服務(wù)是虛擬機(jī)提供的,其box的概念,實(shí)際上就是虛擬機(jī)的鏡像文件。Vagrant支持多種provider,VB,VMWare,AWS之類(lèi),的確非常方便。它對(duì)環(huán)境的打包比Docker更兇猛,直接打包的Virtual machine,和Vagrant的配置,想來(lái)并不是那么高效,但是的確方便可行。
如何在Vagrant上,也就是虛擬技術(shù)搭建Python環(huán)境,就變得很簡(jiǎn)單了,就跟在一個(gè)獨(dú)立的系統(tǒng)上一樣,又是一大堆的廢話(huà)就不在重復(fù)了
3. Buildout一個(gè)致力于給Python提供友好干凈的開(kāi)發(fā)環(huán)境的工具,網(wǎng)上說(shuō)這廝已經(jīng)到了機(jī)械時(shí)代,virtualenv+pip還處于手工時(shí)代,但是個(gè)人感覺(jué)比virtualenv+pip還復(fù)雜,看了一眼,就不想看了
4. Virtualenv恩,這家伙差不多解決了我的問(wèn)題,所以非常有好感。
Mac上可以通過(guò)pip或代碼安裝virtualenv,不詳細(xì)說(shuō)了。安裝之后,通過(guò)命令創(chuàng)建一個(gè)新的環(huán)境,假定我們要?jiǎng)?chuàng)建的環(huán)境是叫test-cloud-env,執(zhí)行如下命令:
$ virtualenv test-cloud-env
這會(huì)再當(dāng)前目錄創(chuàng)建test-cloud-env這個(gè)目錄,并在其下創(chuàng)建bin/,lib/,include/
接下來(lái),你會(huì)發(fā)現(xiàn)有不少東西放在了bin/目錄下,其中有python的解釋器,以及一些腳本以及我們的activate腳本?,F(xiàn)在,我們馬上就要?jiǎng)?chuàng)建一個(gè)虛擬的獨(dú)立Python開(kāi)發(fā)環(huán)境了,一個(gè)命令也就搞定,為了有個(gè)直觀(guān)的體驗(yàn),請(qǐng)看以下實(shí)例:
$ env python -c "import OpenSSL as a; print a.__version__" 0.13.1 $ source test-cloud-env/bin/activate $ env python -c "import OpenSSL as a; print a.__version__" 0.15.1
看到區(qū)別了吧,啟用之前Python使用的是系統(tǒng)的庫(kù),啟用之后使用新創(chuàng)建的庫(kù)。
如何給這個(gè)env安裝依賴(lài)庫(kù)?我使用了requirements.txt來(lái)保存需要安裝的庫(kù)及其版本,剩下的交給pip去搞定就行了
$ cat requirements.txt pexpect pyOpenSSL == 0.15.1 requests $ pip install -r requirements.txt
安裝完成后,一個(gè)虛擬的獨(dú)立的Python開(kāi)發(fā)環(huán)境就OK了。你可以為不同項(xiàng)目創(chuàng)建不同的env。
5. something else?寫(xiě)到這就打住就沒(méi)什么意思了,網(wǎng)上不是都搜得到么。。。
我比較喜歡Sublime Text,定制性比較高,已經(jīng)成為我主要的編輯器了。為了能夠讓編輯器里的代碼直接在Sublime Text里使用我們定制的env執(zhí)行,我們得開(kāi)始定制一個(gè)build system。
打開(kāi)編輯器,Tools->Build System->New Build System,添加代碼:
{ "cmd": ["/path/test-cloud/pyenv.sh", "$file"], "file_regex": "^[ ]*File "(...*?)", line ([0-9]*)", "selector": "source.python" }
保存為Python-Virtualenv.sublime-build。
這里用到一個(gè)腳本pyenv.sh,這個(gè)腳本所做的事情就是激活env,然后執(zhí)行當(dāng)前腳本,我們?cè)倏纯磒yenv.sh的內(nèi)容
#!/bin/bash pyfile=$1 source /path/to/env/bin/activate # echo $PWD env python -u $pyfile
記得給這個(gè)腳本加個(gè)可執(zhí)行權(quán)限。最后在sublime text 的build system里選擇Python-Virtualenv,然后你的腳本就會(huì)再自己定制的env中執(zhí)行了。
另外,對(duì)于使用其他環(huán)境的Python環(huán)境,比如Docker之類(lèi),同樣可以通過(guò)定制Build system來(lái)實(shí)現(xiàn)遠(yuǎn)程執(zhí)行,具體可以參照我的另一篇文章?;舅悸肥且粯拥?,隨意定制。
virtualenv還有個(gè)管理器virtualenvwrapper,個(gè)人覺(jué)得用處不大,因?yàn)関irtualenv實(shí)在是太輕量級(jí)了,以至于沒(méi)有必要折騰復(fù)用,當(dāng)然大型項(xiàng)目除外,呵呵。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/37573.html
摘要:另一個(gè)好處是,虛擬環(huán)境不需要管理員權(quán)限。當(dāng)一個(gè)虛擬環(huán)境被激活后,程序的位置會(huì)被添加到中。比如,安裝到虛擬環(huán)境中,使用如下命令安裝過(guò)程會(huì)將和它的依賴(lài)集安裝到虛擬環(huán)境中。 簡(jiǎn)介 在開(kāi)發(fā)不同的應(yīng)用時(shí),我們可能需要不同的 Python 版本,同時(shí)可能還需要處理包的依賴(lài)、版本和間接權(quán)限問(wèn)題。在同系統(tǒng)中,要解決這些問(wèn)題往往非常棘手。在 Python 的開(kāi)發(fā)環(huán)境中,為解決這樣的問(wèn)題最常用的方法是使用...
摘要:本文最早發(fā)表于個(gè)人博客配置環(huán)境在工作開(kāi)發(fā)中,一直使用來(lái)管理的包環(huán)境。很好的解決了不同項(xiàng)目使用不同包的需求。建議路徑為添加環(huán)境變量。設(shè)置面向程序的本地版本,通過(guò)將版本號(hào)寫(xiě)入當(dāng)前目錄下的文件的方式。若找不到,就用版本。 本文最早發(fā)表于個(gè)人博客Pylixmwiki: http://pylixm.cc 配置環(huán)境: CentOS release 6.8 pyenv 20160509 在工作開(kāi)...
摘要:如果應(yīng)用需要,應(yīng)用需要怎么辦這種情況下,每個(gè)應(yīng)用需要各有一個(gè)獨(dú)立的運(yùn)行環(huán)境。虛擬環(huán)境是一個(gè)創(chuàng)建隔離開(kāi)發(fā)環(huán)境的工具。創(chuàng)建一個(gè)包含所有必要的可執(zhí)行文件的文件夾,用來(lái)使用工程所需要的依賴(lài)包。 Python應(yīng)用程序開(kāi)發(fā)中,如果系統(tǒng)只安裝了Python3.6.6。當(dāng)開(kāi)發(fā)者使用pip安裝第三方包時(shí),所安裝的包會(huì)進(jìn)入Python安裝目錄下的site-packages目錄中。Python的優(yōu)勢(shì)之一是有...
摘要:為了安裝科學(xué)計(jì)算環(huán)境,控制好版本,今天上午總算折騰好了。切換和使用新的虛擬環(huán)境這樣就能切換為這個(gè)版本的虛擬環(huán)境。通過(guò)輸入查看現(xiàn)在版本,可以發(fā)現(xiàn)處于虛擬環(huán)境下了。指定包的版本多個(gè)版本并存,尤其是和的并存。下面用創(chuàng)建一個(gè)名叫的版本為的環(huán)境。 為了安裝Anaconda科學(xué)計(jì)算環(huán)境,控制好python版本,今天上午總算折騰好了。 學(xué)習(xí)python有時(shí)希望在python2.7環(huán)境下,有時(shí)希望在...
摘要:打開(kāi)命令提示符輸入出現(xiàn)下面提示說(shuō)明已經(jīng)安裝成功安裝添加的環(huán)境變量環(huán)境變量中加上的路徑,例如。在命令提示符輸入安裝完成,建立一個(gè)全新的環(huán)境,例如我們想建立一個(gè)叫的開(kāi)發(fā)環(huán)境,路徑為,那么我們輸入安裝完成。 工欲善其事,必先利其器。首先我們需要花費(fèi)一些時(shí)間來(lái)搭建開(kāi)發(fā)環(huán)境。 1.安裝python。python是人工智能開(kāi)發(fā)首選語(yǔ)言。 2.安裝virtualenv。virtualenv可以為一個(gè)...
閱讀 3934·2021-11-11 11:02
閱讀 3649·2021-10-11 10:57
閱讀 3778·2021-09-22 16:00
閱讀 2098·2021-09-02 15:15
閱讀 1484·2019-08-30 15:56
閱讀 1172·2019-08-30 15:54
閱讀 2964·2019-08-30 12:43
閱讀 3709·2019-08-29 16:06