PR

【Python Windows】pip install でPATHが通らない時の解決方法

OSS開発

Windowsでpip installしても、PATHが正しく通っていない場合、コマンドが認識されないことがあります。しかし、PATHを正しく設定することは、慣れていない人にとってはストレスの原因になり得ます。

この記事では、初心者でも簡単に「WindowsでPythonのPATHを正しく設定する方法」について解説します。PATHの設定がスムーズに行えれば、Pythonの利用がより快適になるでしょう。

WordPressブロガーの方必見! 外出先でもブログ執筆作業がはかどる、 Ankerの大容量モバイルバッテリー をご紹介します。

1.pipでコマンドをインストールしたのに使えない!?

試しに、自分が作成した「marktree」をインストールしてみましょう。これは、marktree hoge.mdとすると、Markdownの#の数に基づいて木構造を生成してくれるコマンドです。

pipを使用してインストールしてみます。Powershellを開いて、以下のコマンドを貼り付けて実行してみてください。

PowerShell
pip install marktree

これで問題なくインストールできれば、marktreeがそのまま使えるはずですが、一部のデバイスでは以下のような「警告」が表示されることがあります。

PowerShell
WARNING: The script marktree.exe is installed in 'C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\Scripts' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.

上記を日本語に訳すと、以下のようになります。

警告: marktree.exe スクリプトは ‘C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\Scripts’ にインストールされていますが、これはPATHにありません。
このディレクトリをPATHに追加するか、この警告を抑制したい場合は、–no-warn-script-location を使用してください。

この翻訳はChatGPTによるものです(出典: ChatGPT

注目すべきは、「PATHにありません」という表現です。

とりあえずコマンドを実行してみましょう。すると、以下のようにmarktreeは実行されませんでした。

PowerShell
> marktree hoge.md
marktree: The term 'marktree' is not recognized as a name of a cmdlet, function, script file, or executable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

marktree: ‘marktree’ という用語は、cmdlet、関数、スクリプトファイル、または実行可能プログラムの名前として認識されません。
名前のスペルを確認するか、パスが含まれている場合は、そのパスが正しいことを確認して再試行してください。

この翻訳はChatGPTによるものです(出典: ChatGPT

パスが含まれている場合は、そのパスが正しいことを確認して再試行してください」と言われています。これはどういうことでしょうか?

2.そもそもパッケージ管理ツールとは何か?

パッケージ管理ツールとは、プログラムやライブラリなど必要なものを簡単に「追加」「更新」「削除」できるツールです。

これらのツールは通常、特定のプログラミング言語やフレームワークに特化しており、「そのプログラミング言語のみが扱える」というルールがあります。例えば、Pythonのプロジェクトではpip、JavaScriptのプロジェクトではnpmが、それぞれのツールとして使われます。

それぞれのツールとして使われるということは、インストールしたファイルの保存場所も異なるということです。

Pythonのパッケージ管理ツール「pip」もまた専用のフォルダに保存されています。では、marktreeはどこに保存されているのでしょうか?

パッケージの詳細を確認するには、pip show パッケージとコマンドを実行します。

PowerShell
> pip show marktree
Name: marktree
Version: 1.0.0
Summary: convert headings in a Markdown file (.md) into a tree-like structure and output.
Home-page: https://github.com/yusu79/marktree
Author: yusu79
Author-email: yusu79oss@gmail.com
License: MIT
Location: C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages
Requires: 
Required-by: 

見るべき項目は “Location” です。ここに「marktree」は保存されています。ここで先程の警告をもう一度見ると、「C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\Scriptsにインストールされていますが、これはPATHにありません」と書かれています。

注意が必要です。インストールされている場所とpip showで表示されている場所が微妙に異なります

実は、pipのインストール先の「Python311」には二種類のフォルダが入っています。「Scripts」と「site-packages」です。このうち、「site-packages」にはインストールしたPythonパッケージそのものが格納され、「Scripts」にはインストール時に生成された .exe ファイルが格納されることになります。

  • Python311
    • Scripts
      • marktree.exeなどのWindowsの実行ファイルが格納される
    • site-packages
      • marktree/などのPythonパッケージが格納される

つまり、「PATHにはありません」とは、「あなたのパソコンは、 marktree .exe ファイルを実行できない状態ですよ」という意味となります。

3.環境変数PATHが通っていないとは、どういうこと?

PATHは「環境変数」の一種で、OSやアプリケーションが使用する設定情報のセットです。プログラムやシステムはこれらの変数にアクセスして動作をカスタマイズします。例えば、HOMEはユーザーのディレクトリを指定します。これにより、システムやプログラムがユーザーに合わせた動作をすることができます。

では、PATHはどんな環境変数なのでしょうか。簡単に言えば、コンピュータ上のどのディレクトリにプログラムがあるかを指定する一連のディレクトリパスです。OSは、ユーザーがコマンドや実行ファイルを入力したとき、PATH内のディレクトリから対応する実行ファイルを探して実行します。

PATHがなければ、ユーザーはプログラムを実行するたびに、そのプログラムがあるディレクトリまでのフルパスを指定する必要があります。しかし、PATHが設定されていれば、OSはそのパスを検索し、指定されたプログラムが見つかるまでディレクトリを順番に検索します。

つまり、実はフルパスを指定すれば PATH を通さなくてもmarktreeは実行できます。

PowerShell
> C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\Scripts\marktree.exe --help_jp

使用法: marktree [-h|--help] [-L|-l|--level 階層] [hoge.md]

説明: Markdownファイル(.md)の見出しを木構造で表示するコマンド

引数:
    hoge.md           木構造で表示したいMarkdownファイルを引数に指定します。

オプション:
    -h|--help         ヘルプを表示します
       --help_jp      日本語のヘルプを表示します
    -L|-l|--level     指定した階層までの見出しを表示します(デフォルトは「6」)

ちゃんとmarktree.exe --help_jpが実行されました。

ですが、これではとても不便ですよね。そのため、PATHを通して、marktreeだけで実行できるようにします。

4.【これで解決!】 Profile.ps1にPATHを通そう!

Windowsでは環境変数は$env:で表されます。PATHはコロンの後にくっついて$env:pathで表されます。

Windowsの環境変数は、「ドキュメント」フォルダの中に特定のフォルダprofile.ps1 を作ることで設定ができます(参考: Windows PowerShell 5.1 から PowerShell 7 への移行 – 個別のプロファイル)。そのフォルダは、Powershellのバージョンによって変わるので注意してください

  • もし、Powershellのバージョンが5なら
    • C:\Users\user\Documents\WindowsPowerShell\profile.ps1」を作成する
  • もし、Powershellのバージョンが7なら
    • C:\Users\user\Documents\PowerShell\profile.ps1」を作成する

そして、profile.ps1に以下のように$env:path += フォルダパスを記述します。

PowerShell
# コマンドのPATH
$env:path += ";C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\Scripts"

書いたら一度 PowerShell を閉じてください。そして、Powershell を再度起動すると、marktreeが実行できているはずです。

PowerShell
> marktree --help_jp

使用法: marktree [-h|--help] [-L| -l|--level 階層] [hoge.md]

説明: Markdownファイル(.md)の見出しを木構造で表示するコマンド

引数:
    hoge.md           木構造で表示したいMarkdownファイルを引数に指定します。

オプション:
    -h|--help         ヘルプを表示します
       --help_jp      日本語のヘルプを表示します
    -L|-l|--level     指定した階層までの見出しを表示します(デフォルトは「6」)

以上で、「Windowsでpip installしたのにコマンドが実行できない問題」が解決できます。

より詳しくPATHについて知りたい方は、以下の記事をご参照ください。

まとめ

この記事では、pip installしているにも関わらず、PATHが通っていないが為にコマンドを実行できない問題の解決方法をまとめました。

  1. pip installしたにも関わらずコマンドを実行できないのは、PATHが通っていないためです。
  2. pip はPythonのパッケージ管理システムであり、インストールしたパッケージは「Python311/site-packages」に、実行ファイルは「Python311/Scripts」に格納されます。
  3. PATHが通っていないとは、「Python311/Scripts にアクセスできないために〇〇.exe を実行できない」ということです。
  4. Python311/Scriptsにアクセスするためには、profile.ps1$env:path += ";C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\Scripts"と記述します。
  5. Powershellを一旦閉じて、もう一度立ち上げます(PC本体の再起動はいりません)。

これで、Windowsでpip installしたにも関わらず、コマンドが実行できない問題が解決されます。

タイトルとURLをコピーしました