使用Python3進行信號處理和分析(二)——在Powershell中使用conda進行環境管理

關於Conda

conda是一個專爲python而生的包管理器和環境管理器,可以方便的創建虛擬環境和管理環境中的第三方庫。目前該工具有兩個不同的發行版,分別爲Anaconda和MiniConda,在使用時並無太大區別
值得一提的是,Anaconda的鏡像源服務器位於境外,因此速度不夠理想,不過最近清華大學Tuna協會得到了Anaconda的官方授權,得以在國內建立了第一個有授權的鏡像源,可以大大提高conda的下載速度,詳情戳這裏
其他關於conda使用的教程和信息,都可以在互聯網上輕易找到,這裏不贅述。

爲什麼要使用Powershell

如果你不是像筆者一樣使用windows作爲主力開發環境,那麼bash/zsh等任君挑選;如果是,Powershell將提供更強大的功能和更高的效率。

  1. 爲什麼不使用CygWin/GitBash等工具?
    使用此類工具主要是爲了獲得和Linux/Unix下相近的命令環境,但是Powershell提供Linux風格的命令別名,甚至部分命令的選項也是完全一致的;退一步講,即使有些微區別,也可以很迅速的獲取各種幫助:
    C:\> Get-Help your_cmdlet -Online
    
    使用這條命令就可以方便的查看微軟的在線文檔,如果去除-Online選項則可以查看本地的幫助文檔。注意:windows並不嚴格區分大小寫。可以看到,Powershell中的命令稱爲cmdlet,而且都是以“動詞-名詞”的形式命名的,這就更加方便理解了。如果使用Linux風格的命令別名,上面的命令也可以這麼寫:
    C:\> help your_cmdlet -Online
    
    此外,CygWin等工具實現Linux命令的原理大抵是在POSIX兼容層上編譯Linux源碼得到的——由於使用了POSIX接口,其性能肯定是不如原生的Powershell的
  2. 相比cmd有何優勢?
    相比cmd,Powershell的優勢在於命名邏輯清晰,文檔易得。此外,Powershell支持以OOP的方式編寫腳本,語法較爲簡單,既然都會用Python了,那麼Powershell的腳本自然不在話下
  3. 怎麼選擇終端(terminal)?
    Terminal的選擇完全是個人喜好了,例如筆者非常討厭原生的藍底終端,於是使用ConEmu代替;在微軟發佈Windows Terminal Preview以後,我就同時使用這兩個Terminal來完成工作;在使用vs code時,也會使用它的內建終端使用Powershell,這些都是極爲便利的。(至少都比原生好使)

conda添加Powershell支持

這篇文章主要提一下筆者在Powershell中使用conda遇到的問題。
在使用Python前,必須激活某個conda環境以保證環境下有當前使用的第三方庫。但是如果在安裝好conda後不進行設置,直接運行python命令會遇到warning

This Python interpreter is in a conda environment, but the environment has not been activated. Libraries may fail to load. To activate this environment
please see https://conda.io/activation

出現這種問題的原因是conda尚未配置對Powershell的支持。如果conda的版本較低,則應該使用第三方模塊進行配置,否則應該使用conda init命令進行配置。
首先查看conda的版本:

C:\> conda -V

如果版本號低於4.6,則推薦使用pscondaenvs,該鏈接內附教程,參考即可。
如果版本號高於4.6,例如筆者所用版本號爲4.7.11,則應該使用conda init命令:

C:\> conda init powershell

待命令執行完畢後,重新打開Terminal窗口,即可在Powershell中使用conda activate your_envsconda deactivate命令了
此外,設置完成以後,如果不修改conda的配置文件,則可能會在每次打開Powershell時自動激活base環境。如果不需要自動激活該環境,可以使用如下命令關閉自動激活功能:

(base) C:\ > conda config --set auto_activate_base False

該命令參考自conda幫助文檔

與msys2的衝突

本文的讀者大致應該是電子信息方向的本科生,因此不少人估計也有寫C/C++的需求,如果選擇msys2作爲默認的開發環境則必然會用到內建的gdb。**很不幸的是,msys2的gdb是依賴於python的。**因此如果在Terminal中執行python命令,則可能是執行的gdb自帶的python.exe文件,這時候無論如何都無法導入Anaconda環境下的包,所以這種問題是要加以避免的。
在windows上,環境變量的搜索順序是由上至下的,即如果%Anaconda_DIR%%MSYS2_HOME%之前的話,可以保證執行的一定是由conda配置的python環境,注意一下即可,小問題。

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