【原创】创建虚拟环境创建时未指定 Python 解释器版本所引发的问题
一、问题描述
-
conda create -n codeExtract
创建虚拟环境 -
pip install -r requirements.txt
安装Python包 -
python xxx.py
运行某Python文件 -
出现报错
Fatal Python error: initfsencoding: unable to load the file system codec ModuleNotFoundError: No module named 'encodings' Current thread 0x00008ad8 (most recent call first):'
-
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
目录下,所有虚拟环境都可使用