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のどこかに実行ファイルを置いてはどうでしょうか。
pipはデフォルトでPythonパッケージをシステムディレクトリ(/usr/local/lib/python3.4
など)にインストールします。これにはrootアクセスが必要です。
--user
は代わりにあなたのホームディレクトリにpipインストールパッケージを作成します。これは特別な特権を必要としません。
--user
は site.USER_SITE
にインストールされます。
私の場合は/Users/.../Library/Python/2.7/bin
でした。それで私はそれを自分のPATHに追加しました(~/.bash_profile
ファイル内):
export PATH=$PATH:/Users/.../Library/Python/2.7/bin
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
他の回答では、Pythonパッケージが配置される場所としてsite.USER_SITE
を挙げています。バイナリを探しているなら、これらは{site.USER_BASE}/bin
に入ります。
このディレクトリをシェルの検索パスに追加したい場合は、次のようにします。
export PATH="${PATH}:$(python3 -c 'import site; print(site.USER_BASE)')/bin"
ただの警告:
この問題 によると、--user
は現在、仮想envのpip
内では無効です。これは、ユーザーの場所は仮想環境にとって意味がないためです。
したがって、仮想環境の内部でpip install --user some_pkg
を使用しないでください。そうしないと、仮想環境のpip
が混乱します。詳細については this answer をご覧ください。
最善の方法はvirtualenv
をインストールすることで、--user
の混乱を必要としません。あなたがより多くの柔軟性を得て、あなたがパッケージをpipインストールする度に異なるpythonのバージョンやプロジェクトを壊すことについて心配することはないでしょう。