目次
WSL2:UbuntuのPythonで「pip install」する前に知るべきこと
Windows11のWSL2:Ubuntu20.04LTSに、Pythonの開発環境をうつしていってます。
今回は、パッケージ管理に使うコマンド「pip」に関して、Windowsと違って注意しなければいけないことがあるよ・・という話題です。
標準では「pip」はインストールされていません
標準のままでWindowsターミナルのWSL2:Ubuntuシェルで「pip」とうつと以下のメッセージが表示されます。
Command 'pip' not found, but can be installed with:sudo apt install python3-pip
そう、Python3は標準ではいっているのに「pip」は標準ではいっていません。
パッケージ管理で「apt」と「pip」の混同は危険です
調べてみると、このような記事がありました。
ポイントを引用します。
通常、Ubuntuの実行環境は apt コマンドで操作しますが、pip コマンドでPyPIなどからのパッケージをインストールすると、Ubuntuのパッケージ管理に不具合が発生する可能性があります。通常は、pip コマンドではなく、apt コマンドを使って、Ubuntuのパッケージ管理の仕組みを使ってパッケージを更新するようにしましょう。
まさにひとつの答えがここにありました。
確かに「apt」と「pip」ではパッケージ管理の細かい仕様が異なりますから、混在させることで問題が発生するのは理解できます。
でも。
pipは使うべきでないのか?
pipを使わないとしたら、pythonのパッケージ追加はどうしたらいいのか?
そこを確認する必要があります。
pipはsudo付きで実行してはいけない
pipコマンドでUbuntuのパッケージ管理に問題があるのは、「apt」と「pip」が同じレベルでパッケージを更新したときだけです。
なので、「sudo pip」みたいに特権ユーザで「pip」を使ったときだけが問題です。
その観点で調べると、こちらのページに答えがありました。
このような記述がありました。
Never ever ever ever use pip or pip3 with sudo. Use pip --user or Python virtual environments instead.
決してsudoでpipやpip3を使ってはいけません。代わりにpip --userやPython仮想環境を使ってください。
pip --userやPython仮想環境を使うということは、「/home/<user>/.local/」以下のユーザ個別ディレクトリにインストールされるようにしろということです。
実は、Ubutuでは特権ユーザ以外だと「--user」が強制されるようになっています。
sudoなしで「 pip install 」を実行してもホームディレクトリの ~/.local ディレクトリにインストールする「安全性の高いpip」なのです。
結論:非特権ユーザで「pip」を使いましょう
結論としては、僕みたいに。
- WSL2上のUbuntuを使っている
- pyenvやpipenvは導入しない
- 個人的な開発環境としてのみ使っている
この前提なら、Pythonのライブラリパッケージをホームディレクトリ以下にインストールするのが正解だということです。
Ubuntuでは非特権ユーザでpipを実行すると「--user」付きと同じ動作をしますので、「--user」オプションはありません。
なので、WSL2:Ubuntuで普通に「pip install」をすれば良くて、「sudo」をつけなければ、pipは普通に使っていい・・ということです。
ただし、pathを通すのは忘れずに
ひとつだけ注意が必要なことがあります。
pipでインストールするPythonのパッケージには「autophp8」みたいな実行モジュールもあることです。
なので「/home/<user>/.local/bin」がPATHに追加されている必要があります。
実は「.profile」に以下の記述がすでに記載されています。
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/.local/bin" ] ; then
PATH="$HOME/.local/bin:$PATH"
fi
なので、何もしなくても大丈夫だろうと思っていたのですが、VsCodeのターミナルから使ったときとか、微妙にうまくいかないケースがあったので、僕は「.bashrc」に以下を記載して対応しました。
export PATH=$PATH:$HOME/.local/bin
気をつけれるのは、そのくらいかと思います。
さて。
ぐるぐる回って、振出しに戻ったみたいなオチになりました。
でも、なんとなく使ってると、うっかり「sudo pip」なんて・・いかにもやってしまいそうですから、事前に調べられたのはよかったと思います。
ではでは。