pyてよn日記

一寸先は闇が人生

Python:pip における管理者権限と user install

 pipenv のチュートリアル"user install" という聞き慣れない単語が出てきたので調べた.

概要

 管理者権限のないユーザで pip install をすると Permission Error が起きる.これは,pip のインストール先が管理者権限が必要なディレクトリ(/usr)だからである.管理者権限のないユーザが pip でパッケージ管理を行いたい場合これでは困る.

 本記事では,管理者権限のないユーザが pip install するための user install という方法を解説する.Unix 系 OS(MacOSLinux)を想定している.

pip の概要

 pipPython パッケージを管理するためのツールである.PyPIPython Package Index)と呼ばれる「Python パッケージを管理する Web サービス」に登録されているパッケージを pip install [package-name] というコマンドでインストールできる.

通常のインストールと "user install" の違い

 pip でパッケージをインストールする場合,pip install コマンドに --user オプションを付けるか否かの二通りの方法がある.--user オプションを付けるインストール方法を user install と言う.それぞれの方法で numpy をインストールする場合以下のようになる.

  • 通常のインストール:pip install numpy
  • user install:pip install --user numpy

 これらの違いはパッケージがインストールされるディレクトである.通常のインストールでは,管理者権限が必要な /usr 下に,user install では管理者権限の必要ないホームディレクトリ下の ~/.localベースバイナリディレクトという) 下にパッケージがインストールされる.

  • 通常のインストール:管理者権限が必要/usr
  • user install:管理者権限が必要ない ~/.local

 管理者権限のないユーザとして pip でパッケージ管理をしたい場合,通常のインストールでは Permission Error が起こるため,user install を行う必要がある.以下の表にまとめておく.

インストール方法 コマンド 管理者権限 インストール先
通常 pip install [package] 必要 /usr
user install pip install --user [package] 必要ない ~/.local

user install のメリット

 調べが十分ではないかもしれないが,現段階で挙げられる user install のメリットは以下の二つ.

  • 管理者権限のないユーザが pip でパッケージ管理を行える.
  • システム全体に関わるパッケージを壊さずにパッケージをインストールできる(システムを汚さない)

user install 先の確認,変更

インストール先の確認

 user install でパッケージをインストールした場合,デフォルトとしてユーザのベースバイナリディレクト~/.local 下にパッケージがインストールされる.ターミナルで python -m site --user-base と実行することでユーザのベースバイナリディレクトリを出力することができる.

 例えば筆者の環境で実行すると以下のように出力される.

python -m site --user-base
# /Users/mathnuko/.local  ホームディレクトリ下の .local

インストール先の変更

 ベースバイナリディレクトリは PYTHONUSERBASE という環境変数を設定することで変更できる.例えば,~/.local ではなく,~/my-appenv というディレクトリに変更したい場合,下記を .bashrc に加えターミナルを再起動すれば良い.

export PYTHONUSERBASE=~/my-appenv

 これで(管理者権限の必要ない)任意のディレクトリに user install でパッケージをインストールできる.

補足:.bashrc と .bash_profile の違い

 急ぎでさらっと読んだだけのため,復習用に簡単にまとめた.

 環境変数を弄るのが久しぶりだったので .bashrc.bash_profile って何が違うんだっけと戸惑った.以下の記事では,とりあえず .bashrc に設定を加えれば心安らかでいられる確率が高いとのこと.

qiita.com

 両者の違いは,読み込まれるタイミング

  • .bashrc:シェルが起動される度に読み込まれる.
  • .bash_profile:ログインシェルが起動される時(ログイン画面からログインした瞬間)に読み込まれる.

 設定を加える際にどうすべきかは以下の通り.

  • .bash_profile
    • 基本的に デフォルトのまま一切いじらない
    • 端末操作以外でも設定しておく必要がある環境変数のみ設定する
  • .bashrc
    • .bash_profile に書いた設定以外はすべてここに書く
    • ほとんどの人は、 設定は全部.bashrcに書けば良い

 以下の記事も参考にした.

qiita.com

参考