1. 程式人生 > >【先挖坑】Anaconda虛擬環境與Kernel的管理+virtualenv虛擬環境管理

【先挖坑】Anaconda虛擬環境與Kernel的管理+virtualenv虛擬環境管理

MEMO

  • 旨在對Anaconda虛擬環境的管理做個總結: 多python版本工作環境;
  • 虛擬環境的建立、刪除、匯出, 自己工作python環境做備份,將python環境和自己的搭建的module進行對應匹配,避免版本的不相容性問題;
  • 對python或者其他工具(Julia、Matlab)的Kernel管理做個筆記,方便自己以後查閱。

先給自己挖個坑。。。
[此坑尚未填滿。。。。]

安裝指定版本的python

  • 安裝:
    • 進入下載好的解壓過的資料夾,比如:/home/papageno/Python-2.7.15/
    • 或者 wget 在伺服器上下載: wget this-is-the-dowload-link
      ,
      tar -xvf this-is-the-download-file-tar-gz解壓, 進入資料夾.
# 指定安裝位置為:/home/papageno/python27
./configure --prefix=/home/papageno/python27
# 編譯並安裝
make
make install

安裝setuptools和pip

# 進入資料夾為剛剛下載解壓的setuptool資料夾
/home/papageno/python27/bin/python setup.py install
# 進入的資料夾為剛剛下載並解壓的pip資料夾
/home/papageno/python27/bin/python setup.py install

以上我們安裝了想要的python,還有pip工具,接下來配置虛擬環境。

使用virtualenv管理

  • 沒有root許可權,在使用者本地搭建虛擬環境
  • 對特定project需要對應的python版本和包版本

安裝 virtualenv

pip install virtualenv 

建立虛擬環境( virtualenv)

  • 先進入你想放置虛擬環境的位置,比如我的是 /home/papageno/py-env

    virtualenv -p /home/papageno/python27/bin/python py27env
    

    命令virtualenv -p PYTHON-EXE-YOU-WANT-TO-USE-FOR-THIS-ENV yourEnvName

    py27env是我安裝這個虛擬環境的名字,在當前資料夾下會建立這樣一個虛擬環境,指定了執行的python/home/papageno/python27/bin/python, 就是我剛才裝的那個python

  • 將新建立的虛擬環境的路徑加入使用者環境變數,編輯一般情況下位置為 ~/.bashrc

    # virtualenv py2.7.15 UCS2
    export PATH=$PATH:/home/papageno/py-env/py27env/bin
    

    常用操作source ~/.bashrc,啟用剛剛改的環境變數檔案

    source ~/.bashrc
    
  • 進入與退出虛擬環境py27env

    [注意] 一般我為了防止多個虛擬環境啟用檔案重名,這裡我手動把/home/papageno/py-env/py27env/bin裡面的activate檔案改名為activate27 !

    由於我們已經將剛剛建立的虛擬環境py27env加入了環境變數,進入虛擬環境只需

     # 我已經把activate手動改名為activate27, 不然多個虛擬環境時環境變數中`activate`可能會有同名現象
    source activate27
    

    現在你可以在這個虛擬環境裡通過pip install XXX來安裝了,所有安裝的東西預設位置都在此虛擬環境內。
    退出虛擬環境,shell中輸入

    deactivate
    

在 virtualenv中安裝各種python包

virtualenv 進階管理

當前環境下庫版本的匯出與安裝

pip freeze > my_py27_requirements.txt

我們也可以使用更高階化一點(也許有時候更麻煩一點)的工具Anaconda來實現對包的管理

使用Anaconda (conda) 管理

conda env安裝與管理虛擬環境

Jupyter kernel

Anaconda的python可能會遇到 undefined symbol: PyUnicodeUCS2_DecodeUTF8 , Anaconda的Python都是UCS4. 所以.so檔案在編譯的時候注意選擇encoding的問題
“on Linux all Anaconda Python packages use UCS4, more precisely: Because Anaconda Python 2 itself was compiled using the UCS4 flag, all (C extension) packages build against it, will be only compatible with a UCS4 Python 2 build. In many Linux distributions, e.g. Ubuntu, CentOS, UCS4 is used by the system Python (/usr/bin/python). You can always check this by looking at sys.maxunicode: the value 1114111 means UCS4 and 65535 means UCS2.”

import sys
print(sys.maxunicode)
1114111  # the value 1114111 means UCS4 

或者

import sys
print(sys.maxunicode)
65535   # the value 65535  means UCS2