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包未安装在当前环境的解决方案的主要内容,如果未能解决你的问题,请参考以下文章

Pypi 包未安装

Nuget 包未安装在 .Net Framework 中

该安装包未包含任何证书啥鬼

安装一个软件提示,该安装包未包含任何证书,安装失败,怎么解决

linux安装源码包未解决

AEM 6.0 Web 控制台捆绑包(OSGi 捆绑包)中安装的包未正确安装(状态应为活动未安装)