像以前一样通过conda 新建虚拟环境时发现环境一团糟,首先新建虚拟环境
conda create -n newenv
这时候activate newenv,通过pip list,会发现有很多很多的包,都是我在其他环境用到的。但诡异的是,来到anaconda下env的目录,却发现newenv下只有一个conda-meta文件。这到底是为啥?
newenv下只有一个conda-meta文件
第一个问题,newenv下只有一个conda-meta文件,通过查找发现大家有一样的问题,并通过这个帖子找到了解决办法。
conda创建虚拟环境后文件夹中只有conda-meta文件夹
这个文字链接经常失效,附上网址http://t.csdnimg.cn/4JBNX
解决办法就是新建环境时加上python版本
conda create -n newenv python=3.8
这个问题解决之后,可以在newenv 下的lib/site-packages发现新装的包,但pip list仍然有巨多的以前安装过的包,这也就是conda 虚拟环境混乱的问题。
标题conda 虚拟环境混乱
通过查找,发现了以下相似问题的帖子
使用Conda创建空的虚拟环境,pip list有很多其他的包
地址:http://t.csdnimg.cn/1Njl1
解决Conda 创建 Python 虚拟环境不纯净的问题
地址:http://t.csdnimg.cn/vdotR
由pip默认安装位置引起的bug
地址:http://t.csdnimg.cn/xITqW
pip总是定位到全局Python的pip路径中(无法定位到虚拟环境的pip)
地址:http://t.csdnimg.cn/TMwHb
很可惜,这些方法我都尝试了,还是没有解决我的问题,于是我通过
pip show packagename
查看pip list中那些包的位置,发现大部分包都在\anaconda3\lib\site-packages这个目录,也就是说,我新建的虚拟环境中会有\anaconda3\lib\site-packages所有的包,这样一来虚拟环境还有个啥用?环境都隔离不了?要知道在 Python 的虚拟环境中,通常不会直接引用主环境的 site-packages 目录。虚拟环境的设计初衷就是为了提供一个隔离的环境,其中只包含特定的库和版本,不受主环境中安装的库的影响。当激活虚拟环境时,Python 解释器会修改其内部的路径设置,以优先使用虚拟环境中的库。那么,为什么新建的虚拟环境看起来包含了主环境的所有包呢?可能的原因是什么?
经过一些猜测,有可能是环境变量的干扰: 如果系统的环境变量(如 PYTHONPATH)被设置为指向主环境的 site-packages 目录,这可能会导致在虚拟环境中也能访问到主环境中的包。
在windows系统中“我的电脑”,选择“属性”。点击“高级系统设置”。在系统属性窗口中,选择“环境变量”。在环境变量中,查找名为 PYTHONPATH 的变量。发现这个值正是\anaconda3\lib\site-packages,将这个路径删除之后,pip list终于干净了。
但我记得这个PYTHONPATH是在安装anaconda的时候设置的,为什么会影响到虚拟环境之间的包?原因还是没搞明白。