我正在尝试遵循 Zed Shaw 的《Learning Python the Hard Way》指南。我需要在 Powershell 中使用 python。我有 Python 2.7.3 安装在C:\Python27
. 每当我在 Powershell 中键入 python 时,我都会收到一条错误消息,指出术语“python”未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。我还输入了这个:[Environment]::SetEnvironmentVariable("Path", "$env:Path;C:\Python27", "User")
这是提供的建议解决方案,但是在 Powershell 中输入 python 仍然没有任何作用。我可以输入“start python”,它会打开一个带有 python 的窗口,但我需要在 Powershell 中使用它。谢谢。
13 回答
尝试以这种方式设置路径:
$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 2015 年 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\'
只需删除“用户”一词。它会起作用的。
- 下载适用于 Windows 的Nodejs
- 安装 node-vxxx.msi
- 找到“为 Node.js 安装附加工具”脚本
- 打开并安装它
- 重新打开一个新的shell提示符,输入“python”>>按“enter”>>它工作!