Python:pip における管理者権限と user install
- 概要
- pip の概要
- 通常のインストールと "user install" の違い
- user install のメリット
- user install 先の確認,変更
- 補足:.bashrc と .bash_profile の違い
- 参考
pipenv のチュートリアルに "user install" という聞き慣れない単語が出てきたので調べた.
概要
管理者権限のないユーザで pip install
をすると Permission Error が起きる.これは,pip のインストール先が管理者権限が必要なディレクトリ(/usr
)だからである.管理者権限のないユーザが pip でパッケージ管理を行いたい場合これでは困る.
本記事では,管理者権限のないユーザが pip install
するための user install という方法を解説する.Unix 系 OS(MacOS,Linux)を想定している.
pip の概要
pip は Python パッケージを管理するためのツールである.PyPI(Python 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
に設定を加えれば心安らかでいられる確率が高いとのこと.
両者の違いは,読み込まれるタイミング.
.bashrc
:シェルが起動される度に読み込まれる..bash_profile
:ログインシェルが起動される時(ログイン画面からログインした瞬間)に読み込まれる.
設定を加える際にどうすべきかは以下の通り.
.bash_profile
- 基本的に デフォルトのまま一切いじらない
- 端末操作以外でも設定しておく必要がある環境変数のみ設定する
.bashrc
.bash_profile
に書いた設定以外はすべてここに書く- ほとんどの人は、 設定は全部.bashrcに書けば良い
以下の記事も参考にした.