web-dev-qa-db-ja.com

PowerShellでpythonを使用しようとしています

私はZed ShawのPython the Hard Wayの学習ガイドに従うつもりです。 Powershellでpythonを使用する必要があります。 Python 2.7.3をC:\Python27にインストールしています。 Powershellにpythonと入力するたびに、「python」という用語がコマンドレット、関数、スクリプトファイル、または操作可能なプログラムの名前として認識されないというエラーが表示されます。私もこれを入力しました:[Environment]::SetEnvironmentVariable("Path", "$env:Path;C:\Python27", "User")それは提供された提案された解決策でしたが、Powershellにpythonを入力してもまだ何もしません。 「start python」と入力すると、pythonでウィンドウが開きますが、Powershellで必要です。ありがとう。

52
masonc15

このようにパスを設定してみてください:

 $env:path="$env:Path;C:\Python27"
82
Mike Shepard

価値のあることについては、このコマンドは私のためにそれをしました(Python3.3):

[System.Environment]::SetEnvironmentVariable("PATH", $Env:Path + ";C:\Python33", "Machine")

その後、Powershellを再起動する必要がありました。

22

$env:path="$env:Path;C:\Python27"は、現在のセッションに対してのみ設定します。次回Powershellを開くときは、同じことを再度行う必要があります。

[Environment]::SetEnvironmentVariable()は正しい方法であり、PATH環境変数を永続的に設定します。この場合の効果を確認するには、Powershellを再度起動する必要があります。

18
manojlds

恒久的な解決策のために、私は次のことがわかった:

[Environment]::SetEnvironmentVariable("Path", "$env:Path;C:\Python 3.5")
8
Matt

ディレクトリが正しく設定されていないため、次の手順に従ってください。

  1. 「MyComputer」>右クリック> Properties>「System Properties」>「Advanced」タブ
  2. 「環境変数」>「パス」>「編集」
  3. [変数値]ボックスで、次が表示されていることを確認します。

    ; c:\ python27 \; c:\ python27\scripts

  4. [OK]をクリックし、Windows PowerShellを再起動してこの変更をテストします。タイプ

    python

  5. これでpythonバージョン2が実行されます!わーい!

8
HeggyHere

これは私にとって永久に機能します:

[Environment]::SetEnvironmentVariable("Path", "$env:Path;C:\Python27","User")

WindowsにPythonをインストールしても、パスが正しく構成されない場合があります。

必ず[Environment]::SetEnvironmentVariable("Path", "$env:Path;C:\Python27", "User")と入力してください
PowerShellで正しく構成します。

また、PowerShellまたはコンピューター全体を再起動して、実際に修正する必要があります。

4
user2145645

Pythonガイド から、これは私のために働いたものです(Python 2.7.9):[Environment]::SetEnvironmentVariable("Path", "$env:Path;C:\Python27\;C:\Python27\Scripts\", "User")

2
myidealab

シェルウィンドウを再起動せずにすぐに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\'
1

この方法でコマンドを試してください:

PS C:\Users\XXX>python.exe

の代わりに:

C:\Users\XXX>python
1
Mao

「ユーザー」という単語を削除するだけです。それが動作します。

0
Xshan

MaxPRafferty前述

ここからグーグルから着陸する人へのメモ、答えの設定パスはすべて正しいですが、この問題はおそらく、パス自体を設定するために必要なpythonインストーラー管理者権限を与えていないことに起因します。または、単にインストーラーを右クリックして、管理者として実行を選択し、インストールを修復することもできます。それでも解決しない場合は、pythonバージョンとインストールディレクトリに対応する以下の[環境]回答を選択してください。 – MaxPRafferty 15年11月18日20:06で

Pythonインストーラーにパス自体を追加させるのが賢明かもしれません。ここでの落とし穴は、デフォルトでPythonインストーラーがではなくパスを追加することです。最後に直接nextingするのではなく、インストールプロセス中に(下にスクロールしてインストールされているものを確認することで)注意深く見る必要があります。

彼が言い逃したのは、一度インストールしたらrun as administratorできないということです。アンインストールと再インストールは可能ですが、最も簡単なのは右クリックしてTroubleshoot compatibilityで、今回はnextを押す前に「インストールするもの」ダイアログで「パスの追加」を確認することです。次に、powershellを再起動します。ほらわたしにはできる。

0
Kangqiao Zhao