Python conda环境的小坑

由于时效问题,该文某些代码、技术可能已经过期,请注意!!!本文最后更新于:1 年前

令人不解的包导入顺序

这个坑就是conda环境的包导入顺序。具体就是:

在 Conda 环境中,包的版本决定了其加载的优先级。通常情况下,较高版本的包会优先加载,而不考虑其所在的位置(例如当前环境或家目录的 .local 目录)。
如果当前环境中的包版本较低,而家目录的 .local 目录中存在较高版本的包,那么 Python 解释器会优先加载 .local 目录中的较高版本包。这是因为 Python 解释器会根据版本号来决定使用哪个包,而不是根据包所在的位置。
这是妥妥的要抛弃低版本的东西啊。

我使用conda单独创建环境不就是想做隔离确保安全。好家伙直接一个版本号大小就打破了这生殖隔离!果然在隔离上还是容器靠谱点。

解决方法也有:

移除较高版本的包:如果 .local 目录中的包版本较高,并且你希望使用当前环境中的较低版本包,可以尝试在 .local 目录中删除较高版本的包文件。
简单粗暴,直接把高版本的删了!

但是我就是想保留我 .local 目录下较高版本的包呢。那就只能更改代码删除python的搜素路径。

1
2
3
4
import sys
paths_to_remove = [path for path in sys.path if '.local' in path]
for path in paths_to_remove:
sys.path.remove(path)

使用pip查看包的安装路径

1
pip show xxx