sudoの下でpip installを実行することは受け入れ可能で安全ですか?


114

私はMacを使用して、仕事中のWindows PCで行うのと同じ方法でPythonパッケージをインストールし始めました。しかし、私のMacでは、ログファイルまたはサイトパッケージへの書き込み中に頻繁にアクセス拒否エラーが発生しました。

したがって、私は実行していることについて考えpip install <package>の下sudo、私はちょうどこれを望んだ考えるのsudoの安全な/許容可能な使用は私の現在のユーザーアカウントでインストールすることが、ありますか?

ログファイルI / Oエラーからのトレースバックの例:

Command /usr/bin/python -c "import setuptools;__file__='/Users/markwalker/build/pycrypto/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --single-version-externally-managed --record /var/folders/tq/hy1fz_4j27v6rstzzw4vymnr0000gp/T/pip-k6f2FU-record/install-record.txt failed with error code 1 in /Users/markwalker/build/pycrypto
Storing complete log in /Users/markwalker/Library/Logs/pip.log
Traceback (most recent call last):
  File "/usr/local/bin/pip", line 8, in <module>
    load_entry_point('pip==1.1', 'console_scripts', 'pip')()
  File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/__init__.py", line 116, in main
    return command.main(args[1:], options)
  File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/basecommand.py", line 141, in main
    log_fp = open_logfile(log_fn, 'w')
  File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/basecommand.py", line 168, in open_logfile
    log_fp = open(filename, mode)
IOError: [Errno 13] Permission denied: '/Users/markwalker/Library/Logs/pip.log'

更新 これはおそらく権限の問題でしたが、最善のアプローチは、Pythonプロジェクトに仮想環境を使用することです。sudo pip絶対に必要な場合を除いて、実行は避けてください。


12
cd /tmp; sudo pip install foo」は適切な回避策です。
ブライアンカイン


@pradyunsgなぜこのような古い質問にフラグを付けるのですか?
markwalker_

3
本質的に、現在受け入れられている回答(および質問の更新)は、「sudo pip」を実行することを示唆しています。 MacOSおよび多く(すべて?)の主要なLinuxディストリビューション。私は、誰かが自分の状況をデバッグしている可能性があるという用語を使用してここに着陸しました。この質問を実際に持ってくることを考えなかったので、上記の説明に沿った方が答えはよくなります。(文字切れ)
pradyunsg

@markwalker_は、質問からそのアドバイスを削除して、おそらく--userまたはvirtualenvを使用してより良いアドバイスに置き換えることをいとわないでしょうか?
pradyunsg

回答:


105

仮想環境を使用する:

$ virtualenv myenv
.. some output ..
$ source myenv/bin/activate
(myenv) $ pip install what-i-want

sudoシステム全体のグローバルなPythonインストール用のものをインストールする場合にのみ、アクセス許可または昇格した権限を使用します。

パッケージを隔離する仮想環境を使用するのが最善です。そうすることで、Pythonのグローバルインストールを汚染することなく、いじることができます。

おまけとして、virtualenvには昇格したアクセス許可は必要ありません。


2
彼の権限が彼のホームディレクトリに混乱している場合、virtualenvを使用しても役に立たない可能性があります
hd1

1
はい、可能ですが、すでに発生しているため、続行する前に修正する必要があります。
hd1 2013

1
皆さん、ありがとうございます。前にvirtualenvについて読んだことがあるので、これらの2つのソリューションを一緒に使用して、軌道に乗ることができます:)
markwalker_

1
また、virtualenvをインストールするには、sudoする必要があります...または回避策はありますか?
jimijazz

8
なぜこれが最良の答えなのかわかりません。問題は仮想環境についてではありません。それはを使用することの妥当性についてsudo pip installです。多くのプロジェクトまたはシステムレベルで使用するパッケージをインストールする必要があるとしましょう。などのCLIツールなどpgcli。もちろん、仮想環境は必要ありません。グローバルにインストールしたいと思います。使用するsudo pip install必要がありますか、それとももっと正しい方法がありますか?それが問題です。
Alex Belyaev 2017年

42

pip install下で実行しても問題ありsudoませんか?

安全ではなく、眉をひそめています- 「sudo pip」を実行するリスクは何ですか?を参照してください Pythonパッケージをホームディレクトリにインストールするには、root権限は必要ありません。pip のオプションの説明を参照してください--user


あなたのソリューションは実際に機能した最初のソリューションでしたが、@ throws_exceptions_at_youは、ドキュメントへのリダイレクトではなく、実際のコードを含む応答を作成しました
Edenshaw

私はなかったsudo pip install、それを使用しての損害賠償を知りません。このコマンドまたはブロックを元に戻して実行するにはどうすればよいsudoですか?
EmreDeğirmenci

26

元の問題は、pipがログをフォルダーに書き込めないことです。

IOError: [Errno 13] Permission denied: '/Users/markwalker/Library/Logs/pip.log'

呼び出されたプロセスが/tmpaのように書き込むことができるフォルダーにcdする必要があります。cd /tmpコマンドを再度呼び出すと、おそらく機能しますが、希望どおりではありません。

しかし、実際にはこの特定のケース(sudoPythonパッケージのインストールに使用したくない)で、グローバルパッケージのインストールは必要ないため、次の--userようなフラグを使用できます。

pip install --user <packagename>

そしてそれはうまくいきます。

私はあなたが1人のユーザーのpython pythonインストールをしていて、virtualenv(あまりユーザーフレンドリーではない)やpipenvについて読むことに煩わされたくないと思います。

コメントセクションの一部の人が次のアプローチを指摘しているので、何をすべきかわからずに行き詰まらない限り、次のアプローチはあまり良いアイデアではありません。

あなたのようなグローバルパッケージのための別のアプローチはあなたが次のようなことをしたいのです:

chown -R $USER /Library/Python/2.7/site-packages/

より一般的に

chown -R $USER <path to your global pip packages>

9
-1グローバルなサイトパッケージフォルダーの所有権を変更することは恐ろしいことです。--userあなたが書いたときにすでに存在していた私の答えの解決策として、pip のオプションが与えられました。
Piotr Dobrogost 2016

1
ここでは議論はありません。また、そのようなエントリレベルの質問をする人はおそらくunixの許可システムに慣れていないため、1ユーザーインストールを実行することは問題ではないという事実も考慮に入れてください。また、あなたの答えは、実際にはグローバルパッケージにインストールしたいという私のユースケースに対処できません。その後、アクセス許可を簡単にプレインストールに戻すことができました。
throws_exceptions_at_you 16

2
コマンド全体を実際に書き込むための+1 。一部の人々は、OPがコマンドラインでオプションを実装する方法を知っていると想定します。同意しない、@ PiotrDobrogost?

追加--userすると役立ちます!
Honghao Zhang

2
システムのパーミッションをPythonのsite-packagesディレクトリ全体に変更することは、レンチでポンプを叩いてポンプを「修正」することに似ています。それは理由で保護されています-あなたはそこにものをインストールすることになっています。真の解決策は、日々のプログラミングでシステムのPythonの配布を混合することではありません。別のPythonディストリビューション(Python.org、Homebrew、Canopyなど)をインストールします。
charlesreid1 2017年

9

同じ問題があったため、実際にはブライアンカインの最初のコメントが「IOError:[Errno 13]」問題の解決策であることを強調しておきます。

一時ディレクトリ(cd /tmp)で実行した場合、実行してもIOErrorは発生しませんsudo pip install foo


2
なぜこれがあなたのために問題を解決するのか説明できますか?
Chris

8
あなたはまだsudo pipこの「解決策」を使用しているため、root権限でパッケージをインストールしています。
Chris

これが機能する理由を推測することしかできません:(一部の)pipインストールスクリプトの一部には、現在のディレクトリへの書き込みアクセスが必要ですが、別のユーザーが必要です。そのため、ホームディレクトリ内で実行すると、書き込みアクセス権がないために不思議なことに失敗します。/tmp誰もがそこに書き込みアクセス権を持っているため、内部から呼び出された場合は機能します。
エドガー

彼は '/Users/markwalker/Library/Logs/pip.log'への書き込みアクセス権を持っていません
throws_exceptions_at_you

5

virtualenvwrapper正常にインストールした後、インストールに問題がありましたvirtualenv

私がこれをした後、私のターミナルは不平を言いました:

pip install virtualenvwrapper

だから、私はこれを試しましたが失敗しました(非推奨)

sudo pip install virtualenvwrapper

次に、これで正常にインストールしました:

pip install --user virtualenvwrapper

あなたが書いたときにすでに存在していた私の答えの解決策として、pipの--userオプションが与えられました。これは回答ではなくコメントでした。
Piotr Dobrogost 2017

推奨されていませんが、公式のインストールノートには、sudoを使用してvirtualenvwrapperをインストールしてもよいと書かれています。virtualenvについても同様です。ここでの質問はこれら2つについては言及していないため、ここでの他のすべての回答は一般的なpythonパッケージに関するものであると思います。
2018

将来の読者には、上記のコメントのために私の回答の「非推奨」フラグを取り消しましたが、まだ確認していません。そのため、フラグはまだ削除していません。
それについてレッツミーティンク

4

権限がめちゃくちゃになっているようです。chown -R markwalker ~ターミナルに入力してpip再試行しますか?並べ替えられているかどうかをお知らせください。


これで権限の問題は解決するかもしれませんが、質問には答えません。
Burhan Khalid

1
知らなかった問題の解決はボーナスです!chownOperation not permittedような多くの隠されたディレクトリを与え.shshています&私はそれが現在設定できるファイルを介して動作していると思いますが、cliプロンプトが戻ったときに何が起こるかを確認します。
markwalker_ 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.