關於Conda
conda
是一個專爲python而生的包管理器和環境管理器,可以方便的創建虛擬環境和管理環境中的第三方庫。目前該工具有兩個不同的發行版,分別爲Anaconda和MiniConda,在使用時並無太大區別
值得一提的是,Anaconda的鏡像源服務器位於境外,因此速度不夠理想,不過最近清華大學Tuna協會得到了Anaconda的官方授權,得以在國內建立了第一個有授權的鏡像源,可以大大提高conda的下載速度,詳情戳這裏。
其他關於conda
使用的教程和信息,都可以在互聯網上輕易找到,這裏不贅述。
爲什麼要使用Powershell
如果你不是像筆者一樣使用windows作爲主力開發環境,那麼bash/zsh等任君挑選;如果是,Powershell將提供更強大的功能和更高的效率。
- 爲什麼不使用CygWin/GitBash等工具?
使用此類工具主要是爲了獲得和Linux/Unix下相近的命令環境,但是Powershell提供Linux風格的命令別名,甚至部分命令的選項也是完全一致的;退一步講,即使有些微區別,也可以很迅速的獲取各種幫助:
使用這條命令就可以方便的查看微軟的在線文檔,如果去除C:\> Get-Help your_cmdlet -Online
-Online
選項則可以查看本地的幫助文檔。注意:windows並不嚴格區分大小寫。可以看到,Powershell中的命令稱爲cmdlet
,而且都是以“動詞-名詞”的形式命名的,這就更加方便理解了。如果使用Linux風格的命令別名,上面的命令也可以這麼寫:
此外,CygWin等工具實現Linux命令的原理大抵是在POSIX兼容層上編譯Linux源碼得到的——由於使用了POSIX接口,其性能肯定是不如原生的Powershell的C:\> help your_cmdlet -Online
- 相比cmd有何優勢?
相比cmd,Powershell的優勢在於命名邏輯清晰,文檔易得。此外,Powershell支持以OOP的方式編寫腳本,語法較爲簡單,既然都會用Python了,那麼Powershell的腳本自然不在話下 - 怎麼選擇終端(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_envs
和conda 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環境,注意一下即可,小問題。