[英]I'm trying to use python in powershell
我正在嘗試按照 Zed Shaw 的指南學習 Python 艱難之路。 我需要在 Powershell 中使用 python。我在C:\Python27
中安裝了 Python 2.7.3。 每當我在 Powershell 中鍵入 python 時,我都會收到一條錯誤消息,指出術語“python”未被識別為 cmdlet、function、腳本文件或可運行程序的名稱。 我還輸入了這個: [Environment]::SetEnvironmentVariable("Path", "$env:Path;C:\Python27", "User")
這是提供的建議解決方案,但是在 Powershell 中輸入 python 仍然沒有任何作用。 我可以輸入“啟動 python”,它會打開一個 window 和 python,但我需要它在 Powershell。謝謝。
嘗試以這種方式設置路徑:
$env:path="$env:Path;C:\Python27"
值得一提的是,這個命令為我做了 (Python3.3):
[System.Environment]::SetEnvironmentVariable("PATH", $Env:Path + ";C:\Python33", "Machine")
之后我只需要重新啟動 Powershell。
$env:path="$env:Path;C:\Python27"
只會為當前會話設置它。 下次打開 Powershell 時,您將不得不再次執行相同的操作。
[Environment]::SetEnvironmentVariable()
是正確的方法,它會永久設置您的 PATH 環境變量。 在這種情況下,您只需再次啟動 Powershell 即可查看效果。
目錄設置不正確,因此請按照以下步驟操作。
在“變量值”框中,確保您看到以下內容:
;c:\python27\;c:\python27\scripts
單擊“確定”,通過重新啟動 windows powershell 來測試此更改。 類型
Python
現在 python 版本 2 運行了! 耶!
對於永久解決方案,我發現以下方法有效:
[Environment]::SetEnvironmentVariable("Path", "$env:Path;C:\Python 3.5")
這對我永久有效:
[Environment]::SetEnvironmentVariable("Path", "$env:Path;C:\Python27","User")
從Python Guide中,這對我有用(Python 2.7.9): [Environment]::SetEnvironmentVariable("Path", "$env:Path;C:\Python27\;C:\Python27\Scripts\", "User")
有時您在 Windows 上安裝 Python,但它沒有正確配置路徑。
確保輸入[Environment]::SetEnvironmentVariable("Path", "$env:Path;C:\Python27", "User")
在 PowerShell 中正確配置它。
您還必須重新啟動 PowerShell 或您的整個計算機才能真正修復它。
以這種方式嘗試命令:
PS C:\Users\XXX>python.exe
代替:
C:\Users\XXX>python
請注意任何從谷歌登陸這里的人,答案設置路徑都是正確的,但這個問題可能源於沒有給 python 安裝程序管理權限,它需要設置路徑本身。 另一種方法可能是簡單地右鍵單擊安裝程序並選擇以管理員身份運行,然后修復安裝。 如果仍然不起作用,請選擇下面與您的 python 版本和安裝目錄相對應的 [Environment] 答案。 – MaxPRafferty 15 年 11 月 18 日 20:06
也許讓 Python 安裝程序自己添加路徑是明智的。 這里的陷阱是默認情況下 Python 安裝程序不會為您添加路徑。 安裝過程中應該仔細查看(通過向下滾動查看已安裝的內容),而不是直接next
到最后。
他沒有說的是,一旦你安裝了它,你就不能run as administrator
。 卸載並重新安裝可能會,但最簡單的是右鍵單擊並Troubleshoot compatibility
問題,這次要小心,在點擊next
之前檢查“要安裝的內容”對話框中的“添加路徑”。 然后重啟powershell。 瞧。 這個對我有用。
為了能夠在不重新啟動 shell 窗口的情況下立即使用 Python,您需要更改機器、進程和用戶的路徑。
Function Get-EnvVariableNameList {
[cmdletbinding()]
$allEnvVars = Get-ChildItem Env:
$allEnvNamesArray = $allEnvVars.Name
$pathEnvNamesList = New-Object System.Collections.ArrayList
$pathEnvNamesList.AddRange($allEnvNamesArray)
return ,$pathEnvNamesList
}
Function Add-EnvVarIfNotPresent {
Param (
[string]$variableNameToAdd,
[string]$variableValueToAdd
)
$nameList = Get-EnvVariableNameList
$alreadyPresentCount = ($nameList | Where{$_ -like $variableNameToAdd}).Count
#$message = ''
if ($alreadyPresentCount -eq 0)
{
[System.Environment]::SetEnvironmentVariable($variableNameToAdd, $variableValueToAdd, [System.EnvironmentVariableTarget]::Machine)
[System.Environment]::SetEnvironmentVariable($variableNameToAdd, $variableValueToAdd, [System.EnvironmentVariableTarget]::Process)
[System.Environment]::SetEnvironmentVariable($variableNameToAdd, $variableValueToAdd, [System.EnvironmentVariableTarget]::User)
$message = "Enviromental variable added to machine, process and user to include $variableNameToAdd"
}
else
{
$message = 'Environmental variable already exists. Consider using a different function to modify it'
}
Write-Information $message
}
Function Get-EnvExtensionList {
$pathExtArray = ($env:PATHEXT).Split("{;}")
$pathExtList = New-Object System.Collections.ArrayList
$pathExtList.AddRange($pathExtArray)
return ,$pathExtList
}
Function Add-EnvExtension {
Param (
[string]$pathExtToAdd
)
$pathList = Get-EnvExtensionList
$alreadyPresentCount = ($pathList | Where{$_ -like $pathToAdd}).Count
if ($alreadyPresentCount -eq 0)
{
$pathList.Add($pathExtToAdd)
$returnPath = $pathList -join ";"
[System.Environment]::SetEnvironmentVariable('pathext', $returnPath, [System.EnvironmentVariableTarget]::Machine)
[System.Environment]::SetEnvironmentVariable('pathext', $returnPath, [System.EnvironmentVariableTarget]::Process)
[System.Environment]::SetEnvironmentVariable('pathext', $returnPath, [System.EnvironmentVariableTarget]::User)
$message = "Path extension added to machine, process and user paths to include $pathExtToAdd"
}
else
{
$message = 'Path extension already exists'
}
Write-Information $message
}
Function Get-EnvPathList {
[cmdletbinding()]
$pathArray = ($env:PATH).Split("{;}")
$pathList = New-Object System.Collections.ArrayList
$pathList.AddRange($pathArray)
return ,$pathList
}
Function Add-EnvPath {
Param (
[string]$pathToAdd
)
$pathList = Get-EnvPathList
$alreadyPresentCount = ($pathList | Where{$_ -like $pathToAdd}).Count
if ($alreadyPresentCount -eq 0)
{
$pathList.Add($pathToAdd)
$returnPath = $pathList -join ";"
[System.Environment]::SetEnvironmentVariable('path', $returnPath, [System.EnvironmentVariableTarget]::Machine)
[System.Environment]::SetEnvironmentVariable('path', $returnPath, [System.EnvironmentVariableTarget]::Process)
[System.Environment]::SetEnvironmentVariable('path', $returnPath, [System.EnvironmentVariableTarget]::User)
$message = "Path added to machine, process and user paths to include $pathToAdd"
}
else
{
$message = 'Path already exists'
}
Write-Information $message
}
Add-EnvExtension '.PY'
Add-EnvExtension '.PYW'
Add-EnvPath 'C:\Python27\'
只需刪除“用戶”一詞。 它會起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.