【sudo】ImportError: pip包未安裝在當前環境的解決方案

0x00 前言

通常在使用 pip 指令安裝 Python 需求的包時,會需要使用 sudo pip install 獲取權限,
或者,在 Jupyter Notebook 裏可以採用 ! 的語法調用 pip 指令直接安裝需要的包,例如:

! pip install xlrd
! sudo pip install xlrd

但有時安裝後發現當前環境或虛擬環境(conda-env)中,
其實是因爲 sudo 指令後的指令實際上不是在當前環境的原因。

0x01 實例測試

以實際操作情況舉例,目標爲在 tf1.10 環境下安裝 xlrd

情境重現

(tf1.10) [chend@cx ~] $ python -c "import xlrd"  # ImportError,缺少xlrd包
(tf1.10) [chend@cx ~] $ pip install xlrd  # 安裝失敗,權限不夠,需要sudo提權
(tf1.10) [chend@cx ~] $ sudo pip install xlrd  # 成功安裝
(tf1.10) [chend@cx ~] $ python -c "import xlrd"  # ImportError,缺少xlrd包

解決方案

(tf1.10) [chend@cx ~] $ source deactivate  # 退出當前虛擬環境
[chend@cx ~] $ sudo su  # 提權到root
[root@cx ~] # which python  # /bin/python
[root@cx ~] # source /etc/profile  # root 重載環境
[root@cx ~] # which python  # /usr/local/anaconda2/...
[root@cx ~] # source activate tf1.10  # 進入需要安裝的虛擬環境
(tf1.10) [root@cx ~] # pip install xlrd  # 在虛擬環境中安裝需求的包
(tf1.10) [root@cx ~] # su chend  # 退出root,回到一般用戶
(tf1.10) [chend@cx ~] $ python -c "import xlrd"  # 成功 import

0x02 如何重載環境變量

環境變量在 /etc/profile 文件中,通常是在系統啓動時會重載,
那麼在不重啓系統的時候需要重載系統變量(如上述中爲 root 用戶重載 python 位置)

方法1:
讓/etc/profile文件修改後立即生效 ,可以使用如下命令:
# . /etc/profile

方法2:
讓/etc/profile文件修改後立即生效 ,可以使用如下命令:
# source /etc/profile

附:Linux中source命令的用法
source命令:
source命令也稱爲“點命令”,也就是一個點符號(.)。
source命令通常用於重新執行剛修改的初始化文件,使之立即生效,而不必註銷並重新登錄。
用法:
source filename 或 . filename (. 後有空格)

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