一、問題描述
-
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
目錄下,所有虛擬環境都可使用