Python 多版本共存問題 2

Python 多版本共存問題 2

? 本文主要討論 多種版本的 Python 模塊的共存與調(diào)用問題上煤,并嘗試給出一種清爽的解決辦法锦聊。

多種版本的 Python Module逢净?

? 伴隨 Python 逐步成為數(shù)據(jù)科學(xué)領(lǐng)域的主力研發(fā)語言紧显,越來越多的機(jī)器學(xué)習(xí)庫都發(fā)布了 Python 版本,包括了著名的 scikit-learn茄猫,tensorflow誊抛,keras 等列牺。正是由于數(shù)據(jù)科學(xué)近年來在基礎(chǔ)算法和計(jì)算架構(gòu)上的迅猛發(fā)展,這些Python module 也頻繁地發(fā)布新版本拗窃。

? 最令人惡心的 Tensorflow 還未發(fā)布穩(wěn)定版 1.0.0 之前時昔园,幾乎每個次級版本的Tensorflow的 API都不一樣。當(dāng)然這主要是由于深度學(xué)習(xí)領(lǐng)域的算法層出不窮并炮,另一方面我個人猜測是由于Tensorflow代碼在不斷根據(jù)google的計(jì)算平臺變化做出演進(jìn)

? 那么問題就來了默刚,可能三個月前自己寫的 Seq2Seq 的 tf 代碼,在新版的 Tensorflow 中就已經(jīng)不能運(yùn)行逃魄,這就是因?yàn)榘姹咀兓瘞淼腁PI變化導(dǎo)致荤西。那么有人說,只要我一直不更新 TF 不就好了嗎?

? 理想豐滿邪锌,現(xiàn)實(shí)骨感勉躺!

  • 筆者使用的Ubuntu 機(jī)器是實(shí)驗(yàn)室共有的,TF 是否更新觅丰,服務(wù)器管理員的決定權(quán)也是很重要的饵溅!

  • 最新版本的 TF 的計(jì)算效率相對來說總是在改進(jìn)的:新版的 TF 可以使用更新的 CUDA 版本以及 CUDNN版本。

  • 新來的開發(fā)者通常愿意去采用最新穩(wěn)定版的 TF 來開發(fā)算法妇萄,如果要使用他們開發(fā)的算法蜕企,那么勢必需要在對應(yīng)的 TF 版本中才能運(yùn)行。

    有鑒于此冠句,為了同時運(yùn)行新老代碼轻掩,我們通常選擇在同一臺機(jī)器上配置共存的多版本 Module。

如何配置并使用多種版本 module懦底?

? 一個簡單的想法是唇牧,對每一個開發(fā)任務(wù),創(chuàng)建一個單獨(dú)的環(huán)境聚唐,這個環(huán)境有獨(dú)立于外界的模塊丐重。只要我們進(jìn)入了這個單獨(dú)的環(huán)境,就可以在里面安裝并使用任務(wù)對應(yīng)版本的模塊了杆查。

? 幸運(yùn)的是弥臼,這樣做的方法有很多,例如 docker根灯。但這里我們暫時用不到這么高大上的技術(shù),我們只需要采用 virtualenv 命令即可掺栅。

  • 利用 virtualenv 命令創(chuàng)建獨(dú)立的 Python 環(huán)境

    • virtualenv 的安裝

      # 安裝 Python 2.7下的virtualenv
      sudo pip install virtualenv
      
    • 采用 virtualenv 命令創(chuàng)建一個獨(dú)立的 Python 環(huán)境

      # 創(chuàng)建一個空間放置我可能創(chuàng)建的多個環(huán)境
      mkdir ~/my_lib/py_env
      cd ~/my_lib/py_env
      
      # 假設(shè)系統(tǒng)默認(rèn)的 Python 為 Python 2.7
      # 創(chuàng)建 Python 2.7 的獨(dú)立環(huán)境
      virtualenv py27_env
      
    • 如何進(jìn)入該獨(dú)立的 Python 環(huán)境呢烙肺?

      ? 注意到,這里的進(jìn)入 獨(dú)立的Python環(huán)境的意思并不是一定要 cd 到上一步創(chuàng)建的Python獨(dú)立環(huán)境所在文件夾處氧卧,幾乎可以在任意位置啟動環(huán)境桃笙。

      ? 啟動環(huán)境的意思是,在這個環(huán)境中沙绝,除了 Python 相關(guān)的命令搏明,其余諸如 cd,ls等命令與外界無異闪檬,只有和 Python 相關(guān)的命令例如 pip, python 等才會有獨(dú)立于外界的命令星著。

      cd ~
      # 可以在任意位置進(jìn)入該 Python 環(huán)境
      source ~/my_lib/py_env/py27_env/bin/activate
      # 事實(shí)上,上述命令可以理解為將 ~/my_lib/py_env/py27_env/bin 加入系統(tǒng)路徑粗悯,且優(yōu)先級最高虚循。但 ~/my_lib/py_env/py27_env/bin 文件夾中只存在和 Python 相關(guān)的命令,因此只有 Python 相關(guān)命令的執(zhí)行會受該環(huán)境的影響
      
    • 如何退出該獨(dú)立的 Python 環(huán)境

      deactivate
      
  • 在對應(yīng)的獨(dú)立環(huán)境中安裝任意版本的模塊

    我們這里的任務(wù)是創(chuàng)建一個 Python 3.5 環(huán)境,然后利用 pip 安裝 tensorflow 的1.0.1 gpu版本

    • 先創(chuàng)建 Python 3.5 環(huán)境横缔,激活它

      # 創(chuàng)建 Python 3.5 環(huán)境
      # -p PYTHON_EXE_PATH 參數(shù)铺遂,也可以換成 --python=PYTHON_EXE_PATH
      # 代表創(chuàng)建的該獨(dú)立環(huán)境所依據(jù)的系統(tǒng) Python 命令來自哪兒,改變參數(shù)可以得到不同版本 Python 獨(dú)立環(huán)境
      virtualenv -p /usr/bin/python3.5 ~/my_lib/py_env/py35_env
      # 激活它
      source ~/my_lib/py_env/py35_env/bin/activate
      
    • 安裝 tensorflow 1.0.1 gpu 版本

      pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.0.1-cp34-cp34m-linux_x86_64.whl
      # 這里的執(zhí)行的命令 pip 換成 pip3 或者 pip3.5都可以茎刚,這三個命令都是~/my_lib/py_env/py35_env/bin/ 中的
      # 值得注意的是襟锐,這里可以運(yùn)行 pip2,這里的 pip2就是系統(tǒng)命令了,即 /usr/bin/pip2了膛锭×肝耄可以采用 which pip2 驗(yàn)證一下
      which pip2
      which pip
      which pip3
      which pip3.5
      
    • 可以進(jìn)入 Python 解釋器看看

      # 以下三個命令都可以進(jìn)入 該獨(dú)立環(huán)境對應(yīng)的 Python 3.5環(huán)境
      python
      python3
      python3.5
      

      進(jìn)入解釋器之后

      import tensorflow as tf
      # 查看該 tensorflow 的安裝位置
      print(tf.__path__)
      
  • virtualenv 的更多選項(xiàng)

    這里的系統(tǒng) Python 環(huán)境是指創(chuàng)建該獨(dú)立環(huán)境時的 -p 參數(shù)

    • --no-site-packages 選項(xiàng)代表 安裝到系統(tǒng)Python環(huán)境中的所有第三方包都不會復(fù)制過來,目前我看到這個是默認(rèn)執(zhí)行的
    • --system-site-packages 選項(xiàng)代表該虛擬環(huán)境可以訪問系統(tǒng) Python環(huán)境中的 第三方包
    • 更多的選項(xiàng)直接在 shell 端輸入 virtualenv 即可查看
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末泉沾,一起剝皮案震驚了整個濱河市捞蚂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌跷究,老刑警劉巖姓迅,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異俊马,居然都是意外死亡丁存,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進(jìn)店門柴我,熙熙樓的掌柜王于貴愁眉苦臉地迎上來解寝,“玉大人,你說我怎么就攤上這事艘儒×祝” “怎么了?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵界睁,是天一觀的道長觉增。 經(jīng)常有香客問我,道長翻斟,這世上最難降的妖魔是什么逾礁? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮访惜,結(jié)果婚禮上嘹履,老公的妹妹穿的比我還像新娘。我一直安慰自己债热,他們只是感情好砾嫉,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著窒篱,像睡著了一般焰枢。 火紅的嫁衣襯著肌膚如雪蚓峦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天济锄,我揣著相機(jī)與錄音暑椰,去河邊找鬼。 笑死荐绝,一個胖子當(dāng)著我的面吹牛一汽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播低滩,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼召夹,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了恕沫?” 一聲冷哼從身側(cè)響起监憎,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎婶溯,沒想到半個月后鲸阔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡迄委,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年褐筛,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片叙身。...
    茶點(diǎn)故事閱讀 40,769評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡渔扎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出信轿,到底是詐尸還是另有隱情晃痴,我是刑警寧澤,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布财忽,位于F島的核電站倘核,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏定罢。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一旁瘫、第九天 我趴在偏房一處隱蔽的房頂上張望祖凫。 院中可真熱鬧,春花似錦酬凳、人聲如沸惠况。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽稠屠。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間权埠,已是汗流浹背榨了。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留攘蔽,地道東北人龙屉。 一個月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像满俗,于是被迫代替她去往敵國和親转捕。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,781評論 2 361

推薦閱讀更多精彩內(nèi)容