Linux環境管理神器-Anaconda

  正所謂,工慾善其事必先利其器,一個好的工具能夠極大地提高工作效率,今天就來介紹一下Linux環境管理神器-Anaconda
  也是一樣,首先來說你爲什麼需要它。老師佈置了個任務,你趕忙在網上找代碼,欣喜地發現GitHub上有類似的代碼,趕忙下載下來,下載來了發現,這貨用的Python 2.7,而你係統上裝的是Python 3.6,不能用啊,不過你一想,先跑通了再說,於是卸載了系統上的Python 3.6,裝上Python 2.7,寄希望於下載來的代碼能賜予你神祕的魔力,很可惜,這個代碼Work不了,你試了很久也沒辦法,只能再次去GitHub上尋找精神支柱。突然你又發現了荒漠中的泉水,找到了另一份代碼,但是呢,這份代碼是用Python 3.6寫的,你恨自己剛卸載了這個版本的Python,沒辦法,再重新來一遍唄,這時,你突然想起曾經一個高人跟你說過一個工具,叫Anaconda,當時你瞧不上,表示打死也不用。但是萬事逃不過真香定律,你現在又回來百度了一波,然後湊巧發現了這篇文章。
  言歸正傳,Anaconda是一個Linux下的環境管理神器,解決的就是上面的問題,不同的代碼需要不同的環境,避免了重複環境裝卸的問題。網上關於Anaconda的博客也算是挺多的,但是吧,都不齊活,我根據自己的學習經驗,將相關內容進行歸納概括。

Anaconda官網

  首先放上Anaconda官網,畢竟官網的內容是最靠譜的,更新也是最及時的,拿捏不準的東西看看官網,https://www.anaconda.com/

Anaconda下載及安裝

  在官網提供了下載鏈接,用戶可以根據自己的系統進行下載安裝。就在https://www.anaconda.com/products/individual這個頁面的最下方,然後上傳到服務器端,利用sh命令就可以安裝,當然也可以利用wget命令進行安裝包下載。這裏要說另一個軟件,Miniconda,這個軟件差不多算是Anaconda的瘦身版吧,對於一般用戶而言,兩者沒有太大的差別,在使用上也是基本類似的,我一般就用Miniconda。https://docs.conda.io/en/latest/miniconda.html,這個呢,就是Miniconda的網頁。
  在安裝完成的時候,會問你是否要將啓動指令寫入到.bashrc裏面,一般都會選擇yes,要是no的話,還得自己再進行配置,比較麻煩。

Anaconda的基本使用

  安裝完Anaconda之後,就可以進行使用了,下面介紹一些基本操作和指令。關於Conda的所有內容,官網上都有,而且非常詳細,這裏只是給大家做一個參考。
  所謂授人以魚不如授人以漁,下面這一條最重要。

# 查詢conda命令
conda -h
conda --help

在這裏插入圖片描述
  通過這個指令可以看到所有的conda指令,比如有conda create這個指令,然後繼續輸入conda create -h就可以看到可以跟在後面的參數了。這裏的話,-h--help作用是一樣的。
  首先來看一下Conda的版本號,這個指令就是:

# 查看當前conda版本
conda --version
conda -V

  首先先來查看一下當前有啥conda環境。

# 查看所有的conda環境
conda env list
conda info --envs

  在沒有自行安裝其他的conda環境的時候,默認會有一個base環境,也就是輸入以上命令,會出現以下的界面。上面兩個指令的含義是一樣的,只要記住一個就行了。
在這裏插入圖片描述
  這裏的*表示,這個是當前處於激活狀態的環境。每次進入conda的時候,默認就是進入了base環境。

# 新建conda環境
conda create -n enviroment

  只有一個環境,那肯定不行啊,所以就利用上面的指令新建環境。比如conda create -n pytorch就是建立了一個名爲pytorch的環境。建完環境之後,再輸入conda env list就可以看到剛纔建的那個環境了,那怎麼進到這個環境裏面呢。

# 進入conda環境
conda activate enviroment

  上述指令就是用來進入這個虛擬環境的,例如conda activate pytorch就進入了名爲pytorch的虛擬環境中了。當你進入這個環境的時候,命令行最左側顯示的就是當前所在的環境名稱。
在這裏插入圖片描述
  有進入,那肯定有退出了,退出conda環境的指令是:

# 退出conda環境
conda deactivate

  在進入這個環境的時候,會默認裝一些必要的包,那這個環境裏裝了什麼包呢。

# 查看環境中所裝的包
conda list

  然後安裝包的話,指令是:

# 安裝包
conda install pkgs[==version]

  你可以指定所安裝軟件包的版本號,如果不指定的話,就默認安裝最新版本。例如需要安裝python,則指令爲conda install python,指定版本的方式就是conda install python==2.7,當然,其實在一開始創建環境的時候就可以指定python版本,具體指令爲:

# 新建包含Python的conda環境
conda create -n enviroment python==2.7

  以上這些內容呢,就基本上是屬於Anaconda的基本操作了,下面就要講一些稍微複雜的了。

鏡像源添加

  都知道,如果是外網的話,網速不保證,下載文件實在是太難了,所以呢,就有鏡像源這麼個東西,別人先幫你把東西下好,放在國內網站上,那肯定下起來就比從國外下方便多了,一般最常用的就是清華鏡像源。https://mirror.tuna.tsinghua.edu.cn/help/anaconda/這個是清華鏡像源的地址,裏面介紹了使用方法,直接打開.condarc文件,然後修改裏面的內容就可以了,將裏面的內容修改爲以下內容:

# 清華鏡像源.condarc文件修改
channels:
  - defaults
show_channel_urls: true
channel_alias: https://mirrors.tuna.tsinghua.edu.cn/anaconda
default_channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
  conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud

  將文件內容進行更改後,輸入conda clean -i,該指令的作用是清除索引緩存,當然實際上不輸入也會更新。

Conda環境的克隆、複製、移植

  假如說我現在已經建了一個名爲env_one的環境,然後我想創建一個一模一樣的,再把中間一個包升級到最新版本,如果我再重新這麼建一遍新環境的話,就很麻煩,所以這時候就用到Conda的克隆功能,指令如下:

# 依據就環境克隆一個新環境
conda create -n new_enviroment --clone old_enviroment

  以上指令呢,就是將old_enviroment克隆到了new_enviroment中,你輸入conda env list就可以看到old_enviromentnew_enviroment,然後你在new_enviroment裏面瞎折騰都沒關係,反正不會影響old_enviroment

# 刪除環境
conda remove -n enviroment --all

  上面這個命令呢,就是刪除名爲enviroment的環境了。
  假如說你要把這個代碼發到網上,你想要別人很快能夠復原你的代碼,這時候你可以上傳你的環境,那怎麼導出這個環境呢。

# 導出環境
conda env export > environment.yml

  執行完上面的指令後,就會在當前目錄下生成一個名爲enviroment.yml的文件,用記事本打開,可以看到裏面的內容大概是這樣的。

# environment.yml內容
name: pytorch
channels:
  - defaults
dependencies:
  - atomicwrites=1.3.0=py37_1
  - attrs=19.3.0=py_0
  - blas=1.0=mkl
  - ca-certificates=2020.1.1=0
  - certifi=2020.4.5.1=py37_0
  - cffi=1.12.1=py37h2e261b9_0
  - cudatoolkit=9.0=h13b8566_0
  - cudnn=7.3.1=cuda9.0_0
  - importlib_metadata=0.23=py37_0
  - intel-openmp=2019.1=144
  - libedit=3.1.20181209=hc058e9b_0
  - libffi=3.3=he6710b0_1
  - libgcc-ng=8.2.0=hdf63c60_1
  - libgfortran-ng=7.3.0=hdf63c60_0
  - libstdcxx-ng=8.2.0=hdf63c60_1
  - mkl=2019.1=144
  - pip:
    - cycler==0.10.0
    - kiwisolver==1.0.1
    - matplotlib==3.0.3
    - opencv-python==3.4.2.17
prefix: /home/lijianquan/miniconda2/envs/pytorch

  這裏面就包含了你當前環境下所有的軟件包, 可以看到這下面有pip,意思就是你在當前的環境下也是可以用pip的。
  當用戶下載了你的代碼之後,又拿到了這個yml文件,就可以利用這個yml文件快速準確地復原環境了,指令如下:

# 根據yml文件創建環境
conda env create -f environment.yml

  那假如現在你的師弟,一個跟你用着同樣的服務器,只不過是不同的用戶名的人,也是用着同一個版本的Conda,問你要環境,你可以把enviroment.yml文件給他讓他再重新安裝,但這樣慢啊,你們都用着同一個服務器,同一個版本的Conda,那有什麼簡單的方法呢,這裏介紹兩個。

利用文件夾複製進行環境拷貝

  首先第一個,不知道算不算歪門邪道,反正是自己搗鼓出來的,咱們看一下conda安裝文件夾下的envs,這下面的文件夾就是咱們有的環境的名稱,所以直接把整個文件夾複製到你師弟那兒不就行了嘛,這麼一試,果然可行,指令如下:

# 將環境文件夾拷貝到另一個用戶下
scp -r /envs/[environment] username@[IP]:[address]/envs

  這裏用到scp指令,就是用在服務器之間傳送文件的,只要知道對方賬號的IP、賬號以及密碼就可以進行文件傳送了,這裏需要用到服務器IP,那如果是同一個服務器呢,就不需要IP了,之間用localhost就行。關於scp這個指令這裏不過多解釋,有興趣的各位可以自行百度。

利用conda pack進行環境拷貝

  這第二種方法呢,就需要藉助額外的打包工具,conda pack,這個打包工具必須安裝在base下才能打包其他的環境。以下的兩種安裝方式任選其一就行。

# 利用conda進行conda-pack包安裝
conda install -c conda-forge conda-pack
# 利用pip進行conda-pack包安裝
pip install conda-pack

  安裝完成之後呢,就可以進行環境打包了,指令如下:

# 打包環境,生成environment.tar.gz
conda pack -n enviroment
# 打包環境,生成defined_name.tar.gz
conda pack -n my_env -o defined_name.tar.gz
# 打包環境,使生成的environment.tar.gz置於[path]下
conda pack -p [path]

  然後打包的環境怎麼安裝呢,首先要在conda安裝目錄下的envs文件夾下新建一個文件夾,這個文件夾的名稱就是環境的名稱,即在[path of conda]/envs/下,然後用以下指令可以實現:

# 定位到conda下的envs文件夾下
cd envs
# 新建用於環境的
mkdir enviroment
# 將打包的環境重新恢復
tar -xzf enviromen.tar.gz -C enviroment

  打包有什麼好處呢,就是方便移植,尤其是對於無法連接外網的服務器,這一點就非常重要了。
  還有一點發現,直接通過scp過來的環境,就無法再使用下面的conda pack進行打包了,所以還是老老實實用conda pack進行環境打包比較好。
  兩種方法,前一種方法怎麼說呢,比較歪門邪道,後面的就是正式的辦法,還有就是base這個環境比較特殊,不能被打包,所以一般就不要去用這個環境,讓它保持它純潔的一面就行。

Conda安裝本地文件

  我們前面講到,關於使用清華鏡像源的問題,爲什麼要使用清華鏡像源呢,就是因爲服務器不穩定唄。所以也有一個問題,那就是清華鏡像源也不穩定,所以就需要手動去下載,然後再手動安裝本地文件。https://anaconda.org/這個是Anaconda包下載的地方,利用搜索框進行搜索,然後下載到服務器端。那有人會說,我是通過ssh,在Windows系統上連接到服務器端啊,這種怎麼操作呢,提示一下用scp指令,過多的就不介紹了。
在這裏插入圖片描述
  下載完了之後,通過以下語句就可以進行軟件包的安裝了,下載下來的軟件包,名字後綴是.tar.bz2

# 安裝本地軟件包
conda install --use-local package.tar.bz2

總結

關於Anaconda的介紹暫時就這麼多,爲了便於大家查閱相關指令,我對主要指令進行了彙總

                      →→→傳送門

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章