巨坑 之 pip install 和 conda install 的区别 以及 查看 和 修改 虚拟环境下运行路径

先来说明我的问题:首先我在anoconda下建立了自己的虚拟环境,并在我的虚拟环境中用pip安装了对应版本的tensorflow,但是再调用的时候,我发现并没有调用我安装的tensorflow版本。导致我的代码无法运行。因此我产生了一个疑惑,pip安装的包和conda安装的包的位置是否不同,我在运行的时候到底用的是那个环境下的包。

注:miniconda3 和 我文中提到的anoconda3差不多,因为大部分是anoconda3,因此虽然机器上装的是miniconda3,但文章中在写的时候用的是anoconda3,只是命名的问题。

经查阅资料发现:

1.使用conda install在虚拟环境中安装的包都存放在了/anoconda3/pkgs 这个路径下,然后,我们在我们的虚拟环境中要用到或下载时先到该路径下去找,若有则直接将其复制到我们的虚拟环境中包得存放位置:~/anoconda3/envs/xxx/lib/python3.6/site-packages/。若没有,则先下载到/anoconda3/pkgs,在复制到虚拟环境包的路径下。

2.而在虚拟环境中使用pip install 安装时,则直接将包安装在了~/anoconda3/envs/xxx/lib/python3.6/site-packages/路径下。

问题分析

到这里,我们就知道了二者安装包后包所在的位置,那么为什么还会出现我上面的问题呢,原因就是,你虽然在你的虚拟环境下运行代码,但是你的实际运行环境并不一定就是你的包的安装路径,也就是说,你虽然在你创建的虚拟环境中将一切包都安装好了,但是在运行代码,python在编译时,程序并没有去:~/anoconda3/envs/xxx/lib/python3.6/site-packages/这个路径下调用。而是去了优先级更高的别的路径下调用,自然就会出现上述问题。那么如何查看,我当前虚拟环境的实际运行路径呢?

我们使用 python -m site 来查看,结果类似下面:

巨坑 之 pip install 和 conda install 的区别 以及 查看 和 修改 虚拟环境下运行路径_第1张图片

问题解决

查看USER_SITE 和 USER_BASE 是否对应了你的包安装的路径。如果不是,你就要将其按照上面的格式修改:

修改方式:打开 ~/anaconda3/envs/XXX/lib/python3.6/site.py

找到USER_SITE 和 USER_BASE 并人为赋值即可。这样我的问题到此就解决了。

问题思考

那么为什么会产生我这个问题呢,我仔细分析了一下,后来发现:

巨坑 之 pip install 和 conda install 的区别 以及 查看 和 修改 虚拟环境下运行路径_第2张图片

因为这是实验室的服务器大家共用,然后有人将自己的虚拟环境包路径添加到了系统路径中,因此,在我们的虚拟环境中运行程序时,python编译后,找包时,优先去了该虚拟环境,才导致了我开头的问题。我们只需将USER_SITE 和 USER_BASE 改成我们自己的路径就好了(如果我们不想修改系统路径的话,个人建议不要随便修改系统路径,因为机器是大家的)

到此,我们就知道了在虚拟环境中使用pip install 和 conda install 的区别和以及运行时的一些要注意的点。

你可能感兴趣的:(坑)