一、问题描述

  1. conda create -n codeExtract创建虚拟环境

  2. pip install -r requirements.txt安装Python包

  3. python xxx.py运行某Python文件

  4. 出现报错
    Fatal Python error: initfsencoding: unable to load the file system codec ModuleNotFoundError: No module named 'encodings' Current thread 0x00008ad8 (most recent call first):'

  5. pip install 所安装的包不在虚拟环境中

二、排查问题

1. 首先检查已经激活了虚拟环境

2. 使用 pip show <包的名称> 检查安装 Python 包的路径

  • 路径:C:\Users\xxx\anaconda3\lib\site-packages 这个目录下的包是全局的,所有虚拟环境都可以使用

  • 说明使用 pip install 下载的包没有被下载到虚拟环境中,而是被下载到了全局的 Python 环境中(即 base)

  • 使用 pip --version 检查 pip 路径,结果为pip 22.3.1 from C:\Users\xxx\anaconda3\lib\site-packages\pip (python 3.10)
    说明使用的 pip 是 base 环境中的版本

3. 发现创建虚拟环境时未指定 Python 解释器版本

  • 报错原因:虚拟环境中没有 python.exe

  • 未安装到虚拟环境原因:如果创建虚拟环境时未指定 Python 解释器版本,系统就会使用默认的 Python 解释器(即 base 环境中的 Python 解释器)使用的 pip 工具属于 base 的 Python 解释器,故使用 pip install 命令时,包会被下载到 base 环境中

三、解决办法

  • 方法一(推荐):重新创建一个指定 Python 解释器的虚拟环境

    删除原环境:conda env remove --name <env_name>
    新创建环境:conda create -n myenv python=3.9
    再激活虚拟环境并安装相应的包,并使用 python 命令运行即可

  • 方法二:指定某个 Python 解释器的绝对路径:

    C:\Users\xxx\anaconda3\python xxx.py ( 这里使用的解释器是 base 环境中的 )

四、总结

1. 创建虚拟环境是记得指定 Python 解释器版本

2. 使用 base 环境的 Python 解释器 会导致使用 pip install 命令时,安装的包会下载到 c:\users\xxx\anaconda3\lib\site- packages 目录下,所有虚拟环境都可使用