anaconda創建新虛擬環境後,pip總是定位到全局Python的pip路徑中(無法定位到虛擬環境的pip)

問題描述 :

創建了新的conda虛擬環境,然後開始用pip安裝相關庫,緊接着報錯,提示pip版本過低——經調試發現,並非該虛擬環境的pip版本低,其實是因爲pip定位到的是全局默認Python的pip了,而全局默認的Python版本是Python2.7。。。

進一步挖掘問題:

我第一反應就是環境變量是否沒配置——所以使用以下命令查看:

echo $PATH

得到結果:

從上圖發現,環境變量已經配置(我虛擬環境就叫“albert”),但問題在於順序搞錯了——我的家目錄(/home/shenfei1)下的全局/bin目錄和/.local/bin目錄竟然排在了環境變量最前面,這也怪不得pip總是索引到這裏的老版本pip了!

問題解決:

發現問題所在了,下一步就是把PATH的順序改回來。這裏又是一個大坑。我本人之前安裝過cuda10.1,因而在~/.bashrc裏重新配置過PATH,具體語句如下:

export PATH=/home/shenfei1/cuda/cuda-10.1/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/home/shenfei1/cuda/cuda-10.1/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/DATA2/shenfei/tensorRT/TensorRT-6.0.1.5/lib

這裏只需要關注第一行就OK。我在第一行明確地寫到,將cuda10.1的路徑添加到現有環境變量路徑的$PATH前面。而.bashrc文件又是會在每次登陸shell被執行,那麼到底爲啥實際上反而是跑到/bin目錄和/.local/bin目錄兩個後面去了?(注意觀察上一張圖/home/shenfei1/cuda/cuda-10.1/bin路徑的位置,它是在第4順位(注意,可以直接當第3順位的路徑不存在,那個是我在調試中臨時加的),按實際情況來說他應該是在第一順位的,這是咋麼回事?!)

經過幾篇博客的閱讀,我意識到.bashrc並非是登錄shell時唯一會被加載的腳本(這個其實早就知道,只不過是這次才知道加載的先後次序,具體加載次序詳見博客:https://blog.51cto.com/zpf666/2334770)。我家目錄的.bashrc,實際上是被家目錄下的.bash_profile(若沒有這個文件,則去找.profile)啓動運行的。所以我追溯到了~/.profile文件,發現它是這樣的: 

# ~/.profile: executed by the command interpreter for login shells.

# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login

# exists.

# see /usr/share/doc/bash/examples/startup-files for examples.

# the files are located in the bash-doc package.



# the default umask is set in /etc/profile; for setting the umask

# for ssh logins, install and configure the libpam-umask package.

#umask 022



# if running bash

if [ -n "$BASH_VERSION" ]; then

    # include .bashrc if it exists

    if [ -f "$HOME/.bashrc" ]; then

        . "$HOME/.bashrc"

    fi

fi


# set PATH so it includes user's private bin directories

PATH="$HOME/bin:$HOME/.local/bin:$PATH"

 注意!!!注意最後一行內容!PATH="$HOME/bin:$HOME/.local/bin:$PATH",這顯然是把兩個全局地址放到了全部環境變量之前嘛!而且這句話是在.profile文件最後一行,這也意味着它的修改是在.bashrc的加載之後的,這當然導致所有在.bashrc中的修改都不會是最終版本咯。

所以把這句改成PATH="$PATH:$HOME/bin:$HOME/.local/bin",一切就都迎刃而解了。但至於爲什麼會變成這樣,我確實不太清楚——爲什麼新建一個虛擬環境會變成這樣?這還得需要大佬來解釋了。

 

後記

想想過去一年時間,我遇到了一系列問題,有的是軟件安裝,有的是代碼debug,有的是爬蟲工具的學習,有的是深度學習模型的調試。雖然自己現在水平還是不足,但毫無疑問已經比之前進步了很多,不少科班出身的同事搞幾天也學不會的工具,我往往可以用更短的時間解決。想當初,碰到今天這類問題,只會覺得自己太菜,根本沒信心可以用自己的能力去解決,總覺得自己和科班出身的人差距太大,只覺“此恨綿綿無絕期”。但通過一個又一個問題的解決,我發現一個淺顯又難以真正踐行的道理,那就是“世上無難事,只怕有心人”。差距是要一點點縮小的,而這取決於你的努力程度和學習能力,而這二者,纔是在“長跑”中更重要的決勝因素,“初始水平”反而不那麼重要。最後,各位,共勉!

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