web-dev-qa-db-ja.com

sudoの下でpip installを実行することは許容でき安全ですか?

私はMacを使ってPythonパッケージを職場のWindows PCと同じようにインストールし始めました。しかし、私の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の実行は、どうしても必要な場合を除いて避けてください。

103
markwalker_

仮想環境 を使用します。

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

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

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

ボーナスとして、virtualenvは昇格されたアクセス許可を必要としません。

98
Burhan Khalid

Sudoの下でpip installを実行しても安全ですか?

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

39
Piotr Dobrogost

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

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

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

BUTこの特定のケースでは実際に(pythonパッケージのインストールにSudoを使用したくない)、グローバルパッケージのインストールの必要はありません--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>

私は同じ問題を抱えていたので、実際に Brian Cain による最初のコメントが「IOError:[Errno 13]」問題の解決策であることを強調したい:

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

9
Edgar

virtualenvwrapperを正常にインストールした後、virtualenvのインストールで問題が発生しました。

私がこれをした後、私の端末は不平を言いました:

pip install virtualenvwrapper

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

Sudo pip install virtualenvwrapper

次に、I successfullyこれでインストールします:

pip install --user virtualenvwrapper
5
Mowzer

権限が台無しになっているようです。ターミナルにchown -R markwalker ~と入力し、pipを再試行しますか?ソートされているかどうかを教えてください。

4
hd1