sudoImportError: pip包未安装在当前环境的解决方案
Posted 糖果天王
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sudoImportError: 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 (.
后有空格)
以上是关于sudoImportError: pip包未安装在当前环境的解决方案的主要内容,如果未能解决你的问题,请参考以下文章