【先挖坑】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