?? BUG
?? VSCode提示的報錯信息
在VSCode中嘗試激活python虛擬環(huán)境時遇到以下報錯信息:
PS F:\test> & f:/test/.venv/Scripts/Activate.ps1
& : 無法加載文件 F:\test\.venv\Scripts\Activate.ps1,因為在此系統(tǒng)上禁止運行腳本。有關(guān)詳細信息,請參閱 https:/go.micro
soft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。
所在位置 行:1 字符: 3
+ & f:/test/.venv/Scripts/Activate.ps1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : SecurityError: (:) [],PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
PS F:\test>
類似問題參考:stackoverflow.com
& : File C:\Users\pc\Documents\python\venv\Scripts\Activate.ps1 cannot be loaded because running scripts is
disabled on this system. For more information, see about_Execution_Policies at
https:/go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:3
+ & c:/Users/pc/Documents/python/venv/Scripts/Activate.ps1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : SecurityError: (:) [], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccessenter code here
這個報錯信息的意思是:嘗試激活一個python虛擬環(huán)境,但是遇到了一個PowerShell的執(zhí)行策略問題。
PowerShell默認禁止運行沒有數(shù)字簽名的腳本,而虛擬環(huán)境的激活腳本可能沒有簽名。
為了解決這個問題,可以使用下面介紹的方法中的任意一種,來修改PowerShell的執(zhí)行策略,從而允許運行虛擬環(huán)境的激活腳本。
?? DEBUG
?? 方案一(已執(zhí)行):修改PowerShell的執(zhí)行策略
三種推薦的可選命令:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted
最終執(zhí)行記錄(如圖所示):
- 以管理員身份運行PowerShell,輸入
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
,然后輸入y
確認。 - 重新啟動VSCode,然后再次嘗試激活虛擬環(huán)境,看看是否還有報錯。
- 如果還有報錯,可以嘗試方案二使用
cmd
或者git bash
作為終端,而不是PowerShell,因為它們沒有執(zhí)行策略的限制。
?? PowerShell的執(zhí)行策略
PowerShell是一種強大的命令行工具,它可以讓我們用編程的方式來管理和自動化Windows系統(tǒng)的各種任務(wù)。
PowerShell也可以運行腳本,腳本是一種包含一系列PowerShell命令的文本文件,它可以讓我們批量執(zhí)行復(fù)雜的操作。
然而,PowerShell并不是隨便就可以運行任何腳本的,它有一種安全機制,叫做執(zhí)行策略(Execution Policy)。
執(zhí)行策略是用來控制PowerShell是否可以運行腳本,以及腳本是否需要數(shù)字簽名的。數(shù)字簽名是一種用來驗證腳本的來源和完整性的技術(shù),它可以防止腳本被篡改或者偽造。
執(zhí)行策略有以下幾種級別:
- Restricted:最嚴格的執(zhí)行策略,禁止運行所有的腳本,只能運行交互式的命令。這是Windows客戶端計算機的默認執(zhí)行策略。
- AllSigned:要求所有的腳本都必須有有效的數(shù)字簽名,無論是本地的還是遠程的,否則不能運行。
- RemoteSigned:只對遠程下載的腳本進行限制,要求它們必須有有效的數(shù)字簽名,而對本地創(chuàng)建的腳本不進行限制,無論是否簽名都可以運行。這是Windows服務(wù)器計算機的默認執(zhí)行策略。
- Unrestricted:對所有的腳本都不進行限制,但是對于遠程下載的未簽名腳本,會提示用戶是否運行。
- Bypass:最寬松的執(zhí)行策略,不對任何腳本進行任何限制,無論是本地的還是遠程的,無論是簽名的還是未簽名的,都可以運行。
?? 三個命令的用途和效果
這三個命令都是用來設(shè)置PowerShell的執(zhí)行策略的,執(zhí)行策略是一種安全機制,用于控制PowerShell是否可以運行腳本,以及腳本是否需要數(shù)字簽名。
這三個命令的區(qū)別是:
-
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force
這個命令會將當前用戶的執(zhí)行策略設(shè)置為Bypass,表示不阻止任何操作,并且沒有任何警告或提示。
這意味著不對任何腳本進行任何限制,無論是本地的還是遠程的,無論是簽名的還是未簽名的,都可以運行。-Force
參數(shù)表示強制覆蓋現(xiàn)有的執(zhí)行策略,不需要用戶確認。
這是最不安全的執(zhí)行策略,因為它可能會讓你運行一些惡意的或者不可信的腳本。 -
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
這個命令會將當前用戶的執(zhí)行策略設(shè)置為RemoteSigned,表示要求受信任的發(fā)布者對從Internet下載的腳本和配置文件的數(shù)字簽名,而在本地計算機上編寫的腳本不需要數(shù)字簽名。
這意味著只對遠程下載的腳本進行限制,要求它們必須有有效的數(shù)字簽名,而對本地創(chuàng)建的腳本不進行限制,無論是否簽名都可以運行。
這是一個比較安全的執(zhí)行策略,因為它可以防止你運行一些未經(jīng)驗證的遠程腳本。 -
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted
這個命令會將當前用戶的執(zhí)行策略設(shè)置為Unrestricted,和上一個命令的區(qū)別是作用域不同,這個命令會影響當前計算機上的所有用戶。
這意味著對所有腳本都不進行限制,但是對于遠程下載的未簽名腳本,會提示用戶是否運行。
這是一個比較靈活的執(zhí)行策略,因為它可以讓用戶自己決定是否運行某個腳本,但是也需要用戶有一定的判斷能力。
這個執(zhí)行策略的安全性取決于用戶的判斷能力。
綜上所述,這三個命令的優(yōu)劣取決于具體需求和場景,以及對安全性和便利性的權(quán)衡。關(guān)于哪個命令更好,這要根據(jù)具體需求和安全考慮來決定。
一般來說,Bypass 是最不安全的執(zhí)行策略,因為它可以讓任何腳本無條件運行,可能會導(dǎo)致惡意腳本的執(zhí)行。
RemoteSigned 是一種比較適中的執(zhí)行策略,因為它可以在一定程度上防止從不可信來源下載的腳本的執(zhí)行,但是也不會限制本地編寫的腳本的執(zhí)行。這里建議使用Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
命令,因為它可以提供一個比較合理和安全的執(zhí)行策略,既可以運行本地的腳本,又可以避免運行不可信的遠程腳本。
當然,執(zhí)行策略并不是限制用戶操作的安全系統(tǒng),而是一種幫助用戶設(shè)置基本規(guī)則的安全功能,用戶可以根據(jù)自己的判斷和需要來更改執(zhí)行策略。
?? 方案二(參考):將默認終端類型設(shè)置為命令提示符
Windows上將默認終端類型設(shè)置為命令提示符有幾種方法可以實現(xiàn),下面介紹其中三種常用的方法。
?? 方法 1:在系統(tǒng)設(shè)置中選擇Windows控制臺主機作為默認終端應(yīng)用程序
這個方法是通過修改Windows的系統(tǒng)設(shè)置,來改變默認的終端應(yīng)用程序,從而影響PowerShell的執(zhí)行策略。
終端應(yīng)用程序是一種可以讓我們在命令行界面下與計算機交互的程序,例如Windows控制臺主機(cmd.exe)、Windows PowerShell、Windows終端等。
不同的終端應(yīng)用程序可能有不同的執(zhí)行策略,例如Windows控制臺主機的執(zhí)行策略是Bypass,而Windows PowerShell的執(zhí)行策略是Restricted。
要使用這個方法,需要按以下的步驟操作:文章來源:http://www.zghlxwxcb.cn/news/detail-828423.html
- 按Win鍵,然后輸入設(shè)置,打開系統(tǒng)設(shè)置。
- 選擇隱私和安全 > 終端,在那里可以看到默認終端應(yīng)用程序的選項。
- 從下拉菜單中選擇Windows控制臺主機,這樣就可以使用cmd.exe作為默認終端了。
優(yōu)點是簡單方便,不需要輸入任何命令,只需要幾次點擊就可以完成。
缺點是可能會影響其他的終端應(yīng)用程序的使用,例如Windows PowerShell或者Windows終端,因為它們的執(zhí)行策略可能不同于Windows控制臺主機的執(zhí)行策略。
?? 方法 2:在Windows終端的設(shè)置中選擇Windows控制臺主機作為默認終端應(yīng)用程序
這個方法是通過修改Windows終端的設(shè)置,來改變默認的終端應(yīng)用程序,從而影響PowerShell的執(zhí)行策略。
Windows終端是一種新的終端應(yīng)用程序,它可以讓我們在一個窗口中同時使用多個終端,例如Windows控制臺主機、Windows PowerShell、PowerShell Core、Azure Cloud Shell等。
Windows終端也可以讓我們自定義終端的外觀和行為,例如字體、顏色、背景、快捷鍵等。
要使用這個方法,需要按以下的步驟操作:
- 按Win鍵,然后輸入wt,打開Windows終端。
- 點擊左上角的下拉菜單,選擇設(shè)置。在設(shè)置窗口中,選擇啟動選項卡,然后在默認終端應(yīng)用程序的下拉菜單中選擇Windows控制臺主機,這樣也可以使用cmd.exe作為默認終端了。
優(yōu)點是可以在Windows終端中方便地切換不同的終端應(yīng)用程序,而不需要修改系統(tǒng)設(shè)置。
缺點是需要安裝Windows終端,它不是Windows系統(tǒng)自帶的,需要從Microsoft Store下載安裝。
?? 方法 3:在Windows控制臺主機的屬性中更改默認終端應(yīng)用程序
這個方法是通過修改Windows控制臺主機的屬性,來改變默認的終端應(yīng)用程序,從而影響PowerShell的執(zhí)行策略。
Windows控制臺主機是一種最基本的終端應(yīng)用程序,它可以讓我們運行各種命令行工具,例如cmd.exe、PowerShell.exe等。
Windows控制臺主機的屬性可以讓我們調(diào)整終端的外觀和行為,例如窗口大小、緩沖區(qū)大小、字體大小、顏色等。
要使用這個方法,需要按以下的步驟操作:
- 如果已經(jīng)打開了一個cmd.exe的窗口,可以右鍵單擊標題欄,然后選擇屬性。如果沒有打開,可以按Win鍵,然后輸入cmd,打開一個新的窗口,然后再右鍵單擊標題欄,選擇屬性。
- 在屬性窗口中,選擇終端選項卡,然后在默認終端應(yīng)用程序的下拉菜單中選擇Windows控制臺主機,這樣也可以使用cmd.exe作為默認終端了。
優(yōu)點是可以針對每個終端窗口進行單獨的設(shè)置,而不需要修改系統(tǒng)設(shè)置或者Windows終端的設(shè)置。
缺點是需要對每個終端窗口進行設(shè)置,而且設(shè)置可能不會保存,需要每次重新設(shè)置。文章來源地址http://www.zghlxwxcb.cn/news/detail-828423.html
到了這里,關(guān)于[PowerShell] 修改執(zhí)行策略解決 VSCode 虛擬環(huán)境報錯“Activate.ps1 cannot...running...on this system.“的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!