anaconda创建新虚拟环境后,pip总是定位到全局Python的pip路径中(无法定位到虚拟环境的pip)

您所在的位置:网站首页 为什么总是编译错误 anaconda创建新虚拟环境后,pip总是定位到全局Python的pip路径中(无法定位到虚拟环境的pip)

anaconda创建新虚拟环境后,pip总是定位到全局Python的pip路径中(无法定位到虚拟环境的pip)

2023-08-25 13:57| 来源: 网络整理| 查看: 265

问题描述 :

创建了新的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,有的是爬虫工具的学习,有的是深度学习模型的调试。虽然自己现在水平还是不足,但毫无疑问已经比之前进步了很多,不少科班出身的同事搞几天也学不会的工具,我往往可以用更短的时间解决。想当初,碰到今天这类问题,只会觉得自己太菜,根本没信心可以用自己的能力去解决,总觉得自己和科班出身的人差距太大,只觉“此恨绵绵无绝期”。但通过一个又一个问题的解决,我发现一个浅显又难以真正践行的道理,那就是“世上无难事,只怕有心人”。差距是要一点点缩小的,而这取决于你的努力程度和学习能力,而这二者,才是在“长跑”中更重要的决胜因素,“初始水平”反而不那么重要。最后,各位,共勉!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3