我正在尝试遵循Zed Shaw的“艰难学习Python”指南。我需要在Powershell中使用python。我在C:\Python27
中安装了Python 2.7.3。每当我将python键入Powershell时,我都会收到一条错误消息,指出术语“python”未被识别为cmdlet,函数,脚本文件或可操作程序的名称。我也输入了这个:[Environment]::SetEnvironmentVariable("Path", "$env:Path;C:\Python27", "User")
这是一个提供的建议解决方案,但在Powershell中输入python仍然无效。我可以输入“start python”并打开一个带有python的窗口但是我需要它在Powershell中。谢谢。
答案 0 :(得分:79)
尝试以这种方式设置路径:
$env:path="$env:Path;C:\Python27"
答案 1 :(得分:20)
对于什么是值得的,这个命令为我做了(Python3.3):
[System.Environment]::SetEnvironmentVariable("PATH", $Env:Path + ";C:\Python33", "Machine")
之后我不得不重新启动Powershell。
答案 2 :(得分:18)
$env:path="$env:Path;C:\Python27"
只会为当前会话设置它。下次打开Powershell时,你将不得不再次做同样的事情。
[Environment]::SetEnvironmentVariable()
是正确的方法,它会永久地设置您的PATH环境变量。你只需要再次启动Powershell以查看这种情况下的效果。
答案 3 :(得分:8)
对于永久解决方案,我发现以下方法有效:
[Environment]::SetEnvironmentVariable("Path", "$env:Path;C:\Python 3.5")
答案 4 :(得分:7)
目录未正确设置,请按照以下步骤操作。
在“变量值”框中,确保您看到以下内容:
; C:\ python27 \; C:\ python27 \脚本
单击“确定”,通过重新启动Windows PowerShell来测试此更改。输入
蟒
现在python版本2运行了!耶!
答案 5 :(得分:4)
这对我来说永久有效:
[Environment]::SetEnvironmentVariable("Path", "$env:Path;C:\Python27","User")
答案 6 :(得分:3)
有时您在Windows上安装Python并且它没有正确配置路径。
确保输入[Environment]::SetEnvironmentVariable("Path", "$env:Path;C:\Python27", "User")
在PowerShell中正确配置它。
您还必须重新启动PowerShell或整个计算机才能使其真正得到修复。
答案 7 :(得分:2)
从Python Guide开始,这对我有用(Python 2.7.9):
[Environment]::SetEnvironmentVariable("Path", "$env:Path;C:\Python27\;C:\Python27\Scripts\", "User")
答案 8 :(得分:1)
以这种方式尝试命令:
PS C:\Users\XXX>python.exe
而不是:
C:\Users\XXX>python
答案 9 :(得分:0)
删除“用户”一词。它会起作用。
答案 10 :(得分:0)
对于任何从谷歌登陆这里的人来说,答案设置路径都是正确的,但这个问题可能源于没有给予设置路径本身所需的python安装程序管理权限。另一种方法是简单地右键单击安装程序并选择以管理员身份运行,然后修复安装。如果仍然无效,请选择下面与您的python版本和安装目录对应的[Environment]答案。 - MaxPRafferty于2015年11月18日20:06
让Python安装程序自己添加路径也许是明智之举。这里的陷阱是默认情况下,Python安装程序为您添加 NOT 路径。在安装过程中,您应该仔细查看(通过向下滚动查看已安装的内容),而不是直接next
到最后。
他错过的说法是你安装后不能run as administrator
。卸载并重新安装可能会这样做,但最简单的方法是右键单击Troubleshoot compatibility
,这次要小心,在点击next
之前检查“安装内容”对话框中的“添加路径”。然后重启powershell。瞧。它对我有用。
答案 11 :(得分:0)
要在不重新启动外壳窗口的情况下立即使用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\'
答案 12 :(得分:0)