web-dev-qa-db-ja.com

「pip install --user ...」という目的は何ですか?

pip install --helpから:

 --user      Install to the Python user install directory for your platform. Typically ~/.local/, or %APPDATA%\Python on
             Windows. (See the Python documentation for site.USER_BASE for full details.)

Site.USER_BASEのドキュメントは私が理解できない興味深い* NIX主題の恐ろしいワームホールです。

普通の英語での--userの目的は何ですか? ~/.local/へのパッケージのインストールが重要なのはなぜですか?私の$ PATHのどこかに実行ファイルを置いてはどうでしょうか。

89
Rob Truxal

pipはデフォルトでPythonパッケージをシステムディレクトリ(/usr/local/lib/python3.4など)にインストールします。これにはrootアクセスが必要です。

--userは代わりにあなたのホームディレクトリにpipインストールパッケージを作成します。これは特別な特権を必要としません。

112
duskwuff

--usersite.USER_SITE にインストールされます。

私の場合は/Users/.../Library/Python/2.7/binでした。それで私はそれを自分のPATHに追加しました(~/.bash_profileファイル内):

export PATH=$PATH:/Users/.../Library/Python/2.7/bin
15

MAC OSでは、--userフラグを使用する理由は、OSが依存しているライブラリを破損しないようにするためです。多くのMAC OSユーザーにとって 保守的な のアプローチは、Sudoを必要とするコマンドでpipをインストールまたは更新するのを避けることです。したがって、これには/usr/local/bin...へのインストールが含まれます。

参照:Neovimにpythonをインストールする( https://github.com/zchee/deoplete-jedi/wiki/Setting-up-Python-for-Neovim

私はそうではありません all システムが/usr/local/bin/Library/Frameworks/のpythonバイナリにのみ依存しているという事実を考えると、/usr/binにインストールすることがMACのリスクである理由は明らかではありません。おそらく、/usr/local/binへのインストールにはSudoが必要であり、これがシステムライブラリとの間でコストのかかるミスを犯す可能性があります。したがって、~/.local/binにインストールすることは、このリスクを回避するための確実な方法です。

参照:Macでpythonを使う( https://docs.python.org/2/using/mac.html

最後に、パッケージを/usr/local/binにインストールすることの利点があるという点で、ディレクトリの所有者をrootからuserに変更することは意味があるのでしょうか。 システムに依存した変更を加えないようにしながらSudoを使う必要性を避けます。 *これはセキュリティ上のデフォルト設定で、過去にUnixシステムが(サーバーとして)どのように使用されたかを示したものですか?それとも、少なくとも、サーバーをホストしていないMACユーザーのために行くためのちょうど良い方法は?

*注意:Macのシステムインテグリティ保護(SIP)機能もシステム依存のライブラリを変更することからユーザを保護するようです。

- E

7
Edmund's Echo

他の回答では、Pythonパッケージが配置される場所としてsite.USER_SITEを挙げています。バイナリを探しているなら、これらは{site.USER_BASE}/binに入ります。

このディレクトリをシェルの検索パスに追加したい場合は、次のようにします。

export PATH="${PATH}:$(python3 -c 'import site; print(site.USER_BASE)')/bin"
4
Ryan Govostes

ただの警告:

この問題 によると、--userは現在、仮想envのpip内では無効です。これは、ユーザーの場所は仮想環境にとって意味がないためです。

したがって、仮想環境の内部でpip install --user some_pkgを使用しないでください。そうしないと、仮想環境のpipが混乱します。詳細については this answer をご覧ください。

1
YaOzI

最善の方法はvirtualenvをインストールすることで、--userの混乱を必要としません。あなたがより多くの柔軟性を得て、あなたがパッケージをpipインストールする度に異なるpythonのバージョンやプロジェクトを壊すことについて心配することはないでしょう。

https://virtualenv.pypa.io/en/stable/

0
user603749