Conda虚拟环境错误加载.local路径TensorFlow包的问题咨询
每次使用conda创建Python虚拟环境时,环境都会错误读取~/.local/lib/python3.6/site-packages路径下的Python包,该异常在使用TensorFlow时被发现。
复现操作流程:
- 执行命令创建conda环境:
conda create -n tensorflow_od pip python=3.9 - 执行命令激活新建环境:
conda activate tensorflow_od - 激活后执行
pip show tensorflow查看当前环境调用的TensorFlow版本信息,返回结果如下:
Name: tensorflow
Version: 2.3.0
Summary: TensorFlow is an open source machine learning framework for everyone.
Home-page: https://www.tensorflow.org/
Author: Google Inc.
Author-email: packages@tensorflow.org
License: Apache 2.0
Location: /home/nwoke/.local/lib/python3.6/site-packages
Requires: absl-py, astunparse, gast, google-pasta, grpcio, h5py, keras-preprocessing, numpy, opt-einsum, protobuf, scipy, six, tensorboard, tensorflow-estimator, termcolor, wheel, wrapt
Required-by: tensorflow-io, tensorflow-text, tf-models-official
返回结果显示,当前环境调用的是用户本地Python3.6目录下的TensorFlow,而非新建的Python3.9版本conda环境内的安装包,conda环境隔离失效。
按优先级依次尝试以下方法即可修复:
- 配置禁用用户级包自动加载:激活对应conda环境后执行
export PYTHONNOUSERSITE=True,当前终端会话内的Python将不再自动扫描加载~/.local路径下的用户级包,执行后重新查询包路径即可恢复正常。如果需要对该conda环境永久生效,先创建对应配置目录mkdir -p $CONDA_PREFIX/etc/conda/activate.d,再新建文件$CONDA_PREFIX/etc/conda/activate.d/disable_user_site.sh,将上述export命令写入文件,后续每次激活该环境时会自动加载该配置,无需重复手动执行。 - 清理异常环境变量配置:执行
echo $PYTHONPATH查看输出内容,如果输出包含~/.local/lib/python3.6/site-packages相关路径,打开当前用户的shell配置文件(bash对应~/.bashrc,zsh对应~/.zshrc),找到配置PYTHONPATH的对应行删除,保存后执行source ~/.bashrc(对应你使用的shell配置文件)重载配置即可。 - 强制绑定当前环境的pip:激活环境后先执行
which pip,确认返回路径为当前conda环境下的pip路径(格式参考{conda安装根目录}/envs/tensorflow_od/bin/pip),如果路径不匹配,后续所有pip操作统一使用python -m pip前缀,例如python -m pip show tensorflow、python -m pip install tensorflow,强制调用当前激活的Python解释器对应的pip,避免误调用全局或用户目录下的pip。 - 移除本地冲突包:如果
~/.local/lib/python3.6/site-packages下的包无保留必要,可直接删除该目录下和conda环境冲突的包,也可以重命名整个python3.6的site-packages目录做备份,彻底避免该路径被错误扫描加载。
内容的提问来源于stack exchange,提问作者Tochukwu Nwoke

