[英]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.