? ? ? ? ?本篇博客包含對于虛擬環境概念的講解和代碼實現過程中相關bug的解決
關于虛擬環境
????????我的pytorch虛擬環境在D盤,相應python解釋器也在D盤(一起),但是我的pycharm中的項目在C盤,使用的是pytorch的虛擬環境,這是為什么行得通呢?
????????后來知道 Python 虛擬環境的核心邏輯是?“解釋器與項目路徑分離”,只要 PyCharm 能正確找到虛擬環境中的 Python 解釋器,無論解釋器和項目文件在哪個磁盤分區,都能正常工作。具體原因如下:
1. 虛擬環境的本質:獨立的解釋器與依賴庫
????????虛擬環境(如你在 D 盤的 PyTorch 環境)本質上是一個?包含獨立 Python 解釋器(python.exe
)和依賴庫文件夾(site-packages
)的目錄。例如,它的路徑可能是:
D:\envs\pytorch-gpu\python.exe
????????這個環境的核心作用是:
- 提供一個獨立的 Python 解釋器,不依賴系統默認的 Python。
- 所有安裝的庫(如?
torch
、tensorboard
)都保存在該環境的?site-packages
?文件夾中(如?D:\envs\pytorch-gpu\Lib\site-packages
)。
????????只要 PyCharm 能通過路徑找到這個?python.exe
,就能調用該環境的解釋器和依賴庫,與項目文件(C 盤)的位置無關。
2. PyCharm 的工作邏輯:關聯解釋器而非依賴路徑
????????PyCharm 管理項目時,關鍵是?“指定項目使用哪個 Python 解釋器”,而非 “解釋器必須和項目在同一磁盤”。具體流程是:
1. 你在 PyCharm 中為項目指定了解釋器路徑(D 盤的?pytorch-gpu
?環境)。
2. PyCharm 會記錄這個路徑,并在運行代碼、安裝依賴時,強制使用該解釋器:
- 當你在 PyCharm 終端運行?
pip install xxx
?時,實際調用的是?D:\envs\pytorch-gpu\Scripts\pip.exe
,安裝的庫會存到 D 盤的?site-packages
。 - 當你運行項目代碼時,PyCharm 會用?
D:\envs\pytorch-gpu\python.exe
?執行 C 盤的項目文件(.py
)。
????????這種 “解釋器在 D 盤,項目在 C 盤” 的分離,就像 “用 D 盤的播放器播放 C 盤的視頻文件” 一樣自然,完全不沖突。
3. 跨磁盤工作的底層原理
????????文件讀取機制:操作系統(Windows)允許程序跨磁盤讀取文件,只要路徑正確(例如,D 盤的 Python 解釋器可以讀取 C 盤的?.py
?代碼文件)。
????????環境變量與路徑解析:虛擬環境被激活時,PyCharm 會臨時調整終端的環境變量,讓?python
、pip
?等命令指向 D 盤的解釋器,確保所有操作都基于該環境。
關于tensorboard的實戰bug問題
????????原代碼如下:
from torch.utils.tensorboard import SummaryWriter
# ctrl + 右鍵 也可以查看這個類的說明writer = SummaryWriter('log')# 指定日志保存目錄# writer.add_image()
for i in range(100):writer.add_scalar('y=x', i, i) # 添加標量數據writer.close()
????????在終端運行時,大家可以很清楚看到,使用python來運行和直接使用類來運行的差別,前者可以正常運行,后者會報錯,找不到路徑
(pytorch-gpu) PS C:\Users\admin\Desktop\huahuo\pytorch_learn\pycharm> python -m tensorboard.main --logdir=log
TensorFlow installation not found - running with reduced feature set.
Serving TensorBoard on localhost; to expose to the network, use a proxy or pass --bind_all
TensorBoard 2.19.0 at http://localhost:6006/ (Press CTRL+C to quit)(pytorch-gpu) PS C:\Users\admin\Desktop\huahuo\pytorch_learn\pycharm> tensorboard --logdir=log
tensorboard : 無法將“tensorboard”項識別為 cmdlet、函數、腳本文件或可運行程序的名稱。請檢查名稱的拼寫,如果包括路徑,請確保路徑正確,然后再試一次。
所在位置 行:1 字符: 1
+ tensorboard --logdir=log
+ ~~~~~~~~~~~+ CategoryInfo : ObjectNotFound: (tensorboard:String) [], CommandNotFoundException+ FullyQualifiedErrorId : CommandNotFoundException
? ? ? ? 差別原因在于:在命令行中直接運行?tensorboard
?命令和通過 Python 模塊(python -m tensorboard.main
)調用 TensorBoard 時,系統查找可執行文件的方式存在差異
PATH 環境變量方面:
當使用?
python -m tensorboard.main
?命令時,Python 會依據自身的模塊搜索路徑來查找 TensorBoard,這和環境變量?PATH
?沒有關系。而直接輸入?
tensorboard
?命令時,系統會在?PATH
?環境變量所列出的目錄里查找對應的可執行文件。要是 TensorBoard 的可執行文件所在目錄沒有被包含在?PATH
?中,就會出現找不到命令的錯誤。
Anaconda 環境的特性:
Anaconda 環境在激活之后,會動態地對?
PATH
?進行修改,把環境中的?Scripts
?目錄添加進去。不過,這種修改有時候可能會失敗或者不完整。TensorBoard 的可執行文件一般位于 Anaconda 環境的?
Scripts
?文件夾中,比如:
C:\Users\admin\anaconda3\envs\pytorch-gpu\Scripts\tensorboard.exe
解決辦法
方法 1:使用 Python 模塊調用
????????推薦繼續采用?python -m tensorboard.main --logdir=log
?這種方式來啟動 TensorBoard,因為它不依賴?PATH
?環境變量,所以更加可靠。