126

仕事で Windows PC と同じように、Mac を使って 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は避けるべきです。

4

6 に答える 6

48

pip installの下で実行することは許容され、安全sudoですか?

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

于 2016-05-08T21:22:13.080 に答える
28

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

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

/tmp呼び出されたプロセスがそのように書き込むことができるフォルダーに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>
于 2016-07-10T23:19:31.543 に答える
10

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

一時ディレクトリ ( cd /tmp) で実行した場合、 を実行すると IOError は発生しなくなりsudo pip install fooました。

于 2013-10-14T16:40:36.940 に答える