我正在以下環境中開發:
- Windows11 21H2。
- Ubuntu-20.04
- 視覺作業室代碼 2022
- VSCode 中的遠程 WSL 擴展
- Python3.8.10 64位
我將 USB 驅動器格式化為 NTFS 格式,并使用以下程序在虛擬環境中安裝了 Django:
sudo python3 -m venv .venv
sudo source .venv/bin/activate
sudo python3 -m pip install django
本來應該在sudo python3 -m django --version執行的時候顯示版本,但是No module named django被顯示了。
如何為每個虛擬環境安裝軟體包?
/usr/local/lib/python3.8/dist-packages/作為檢查的結果,即使(.venv)顯示在命令列的尖端,它似乎也被安裝了。
uj5u.com熱心網友回復:
正如評論中提到的,sudo這里有問題。sudo在這種情況下,使用 venv會出現一些問題:
通常,
sudo python3 -m venv .venv會以 root 身份創建 venv,但您提到您是在 NTFS 格式的 USB 驅動器上執行此操作。由于 WSL 訪問 NTFS 驅動器的方式,NTFS 驅動器上的所有檔案無論如何都將歸您的默認 WSL 用戶所有,因此sudo在這里實際上沒有任何影響。如果您在 WSL 提供的 ext4 檔案系統上執行此操作,那么venv 檔案將歸 root 所有。由于下面描述的 VSCode 問題,這很可能會導致其他問題。
同樣,VSCode 始終以默認用戶身份運行 WSL。實際上,WSL 始終以默認用戶身份運行 VSCode(和任何其他 Windows 應用程式)。因此,當在 VSCode 中時,諸如 Python 擴展之類的工具將以您的默認用戶身份訪問 venv,如果 VSCode(或擴展)嘗試修改其中的任何內容,可能會導致權限問題。
然后是
sudo source .venv/bin/activate,它應該只是給你一個錯誤,簡單明了。sudo在 Linux 中運行應用程式。source是 Bash builtin,而不是應用程式本身。
因此,您應該收到:
sudo: source: command not found...嘗試時。我猜您正在跳過
sudo該命令來解決它,但忘記在問題中將其保留?最后,這里最大的問題是 venv 通過修改當前 shell 的環境來作業
activate。這就是為什么source需要。修改的關鍵環境變數之一當然是 ,PATH,因此當您呼叫python3or時pip3,它使用來自虛擬環境的變數。但是,出于安全原因,默認情況下,不允許
sudo將傳播到在其中運行的環境中。您可以運行以運行傳播了其他環境變數的 shell,但仍將是 root 的默認值。可以通過 更改此設定,但出于安全原因不建議這樣做。PATHsudo -EsPATHvisudo這是您的軟體包安裝在全域/系統環境而不是虛擬環境中的主要原因。
總而言之,在sudo這里使用不會是一個好計劃。使用 venv、VSCode 和 WSL 的默認用戶,事情應該會按預期作業(更多)。
- 附帶問題:您沒有提到 WSL2,但它是大多數安裝的默認設定。在 WSL2 下,由于我在這個答案中提到的原因,在 NTFS 驅動器上甚
python3 -venv .venv至會非常慢。如果可能,強烈建議將您的專案保留在 WSL2 的 ext4 檔案系統上。如果您使用的是 WSL1,則這不適用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/532814.html
標籤:Pythonubuntuwindows-subsystem-for-linuxpython-venv
上一篇:無法在終端中列印西里爾字符
下一篇:將輸出覆寫到ubuntu中的檔案
