【原創】建立虛擬環境建立時未指定 Python 直譯器版本所引發的問題

无限进步_2023發表於2024-05-07

一、問題描述

  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 目錄下,所有虛擬環境都可使用

相關文章