私は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
の実行は、どうしても必要な場合を除いて避けてください。
仮想環境 を使用します。
$ virtualenv myenv
.. some output ..
$ source myenv/bin/activate
(myenv) $ pip install what-i-want
グローバルなシステム全体のPythonインストール用のものをインストールする場合は、Sudo
または昇格されたアクセス許可のみを使用します。
パッケージを分離する仮想環境を使用するのが最善です。そうすれば、グローバルpythonインストールを汚染することなく、いろいろと試すことができます。
ボーナスとして、virtualenvは昇格されたアクセス許可を必要としません。
Sudo
の下でpip install
を実行しても安全ですか?
安全ではなく、眉をひそめています。 「Sudo pip」を実行するリスクは何ですか? ホームディレクトリにPythonパッケージをインストールするには、root権限は必要ありません。 pipの--user
オプションの 説明 を参照してください。
元の問題は、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は発生しません。
virtualenvwrapper
を正常にインストールした後、virtualenv
のインストールで問題が発生しました。
私がこれをした後、私の端末は不平を言いました:
pip install virtualenvwrapper
だから、私はこれを試して失敗しました (非推奨):
Sudo pip install virtualenvwrapper
次に、I successfullyこれでインストールします:
pip install --user virtualenvwrapper
権限が台無しになっているようです。ターミナルにchown -R markwalker ~
と入力し、pip
を再試行しますか?ソートされているかどうかを教えてください。