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