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 (.
後有空格)