web-dev-qa-db-ja.com

OSX El Capitanでのsetuptoolsのアップグレード

Setuptoolsをアップグレードしようとしています。実際、私はansibleをアップグレードしようとしていますが、setuptoolsをアップグレードしようとして失敗しています。自分でやろうとしても失敗します。アンインストールしようとしても失敗する

$ Sudo -H pip install --upgrade setuptools
Collecting setuptools
  Using cached setuptools-18.4-py2.py3-none-any.whl
Installing collected packages: setuptools
  Found existing installation: setuptools 1.1.6
    Uninstalling setuptools-1.1.6:
Exception:
Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/pip-7.1.2-py2.7.Egg/pip/basecommand.py", line 211, in main
    status = self.run(options, args)
  File "/Library/Python/2.7/site-packages/pip-7.1.2-py2.7.Egg/pip/commands/install.py", line 311, in run
    root=options.root_path,
  File "/Library/Python/2.7/site-packages/pip-7.1.2-py2.7.Egg/pip/req/req_set.py", line 640, in install
    requirement.uninstall(auto_confirm=True)
  File "/Library/Python/2.7/site-packages/pip-7.1.2-py2.7.Egg/pip/req/req_install.py", line 716, in uninstall
    paths_to_remove.remove(auto_confirm)
  File "/Library/Python/2.7/site-packages/pip-7.1.2-py2.7.Egg/pip/req/req_uninstall.py", line 125, in remove
    renames(path, new_path)
  File "/Library/Python/2.7/site-packages/pip-7.1.2-py2.7.Egg/pip/utils/__init__.py", line 315, in renames
    shutil.move(old, new)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 299, in move
    copytree(src, real_dst, symlinks=True)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 208, in copytree
    raise Error, errors
Error: [('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.py', '/tmp/pip-OyTXsR-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.py', "[Errno 1] Operation not permitted: '/tmp/pip-OyTXsR-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.py'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.pyc', '/tmp/pip-OyTXsR-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.pyc', "[Errno 1] Operation not permitted: '/tmp/pip-OyTXsR-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.pyc'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.py', '/tmp/pip-OyTXsR-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.py', "[Errno 1] Operation not permitted: '/tmp/pip-OyTXsR-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.py'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.pyc', '/tmp/pip-OyTXsR-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.pyc', "[Errno 1] Operation not permitted: '/tmp/pip-OyTXsR-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.pyc'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib', '/tmp/pip-OyTXsR-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib', "[Errno 1] Operation not permitted: '/tmp/pip-OyTXsR-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib'")]

私は何が間違っているのか、最も霧深い考えを持っていません。 /System/Library/Frameworks/Python.framework/Versions/2.7/以下のすべてのファイルを見ると、すべてのファイルはroot:wheelによって所有されています

どうすれば修正できますか?

79
gman

これは、OS X El Capitanで導入されたシステム整合性保護により発生します。

--user pythonをコマンドに追加すると、これが機能するようになりました。

言い換えると

pip install --upgrade setuptools --user python
186
Kof

概要

問題はPythonライブラリの競合であり、システムPythonライブラリを保護するMac OSのシステム整合性保護(SIP)と組み合わされています。

私の意見では、独自のPythonインストールをアンインストールして再インストールし、SIPで保護されているMac OSが提供するPythonライブラリとは別にすることが最善の方法です。

SIPは将来のMac OSリリースの一部であると予想されるので、SIPを無効にすることをお勧めします。ここでSIPが原因ではなく、 Pythonライブラリの競合の問題。

詳細

また、ansibleをインストールしようとすると、この問題が発生しました。

私の問題は、Mac OSのansibleインストール手順に従ったときに始まりました。pip経由でインストールし、 Pip経由の最新リリース で説明されているeasy_installでpipをインストールします

この方法でpipをインストールすると、easy_installeasy_install/usr/bin/easy_installで提供されるMac OSですが、easy-install.pth/Library/Python/2.7/site-packages/easy-install.pthファイルとそのファイルに書き込みますMac OSが提供するPythonライブラリを参照します。

続いてpip install ansibleでansibleをインストールすると、/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/pythonにあるPythonライブラリが提供するMac OSによってsetuptoolsの要件が満たされていることが報告されます
Ansibleはsetuptoolsを必要としますが、バージョンを指定しません。別の依存パッケージparamikoには、11.3以上のsetuptoolsが必要ですが、pipを使用してansibleをインストールする場合、これはチェックされていないようです。 ansibleを実行しようとすると、セットアップツールは1.1.6であると文句を言われますが、これはMac OSで提供されるsetuptoolsのバージョンであり、SIPで保護されているため、アップグレードできません。

SIPを無効にするのではなく、 https://docs.python.org/2.7/using/mac.html#getting-and-installingで示唆されているようにローカルPythonをアンインストールすることでこれを修正しました-macpython そして、再度ダウンロードしてインストールします。

Rmが心配な場合は、代わりにmvを実行できます
アンインストールするために

Sudo rm -rf /Library/Python
Sudo rm -rf /Applications/Python\ 2.7/
Sudo rm /usr/local/bin/ansible  # executable
Sudo rm /usr/local/bin/python*  # symlinks to /Library/Python/2.7
Sudo rm /usr/local/bin/easy_install*
# and so on for references to /Library/Python/2.7 in /usr/local/bin

その後、Mac OS X用の2.7.13インストーラーパッケージを https://www.python.org/downloads/ からダウンロードしてインストールしました。

これにより、ローカルpythonとpipが/Library/Frameworks/Python.framework/Versions/2.7にインストールされ、/usr/local/binにシンボリックリンクが追加され、$ PATHに/Library/Frameworks/Python.framework/Versions/2.7が追加されます。これにより、Mac OSが提供する/System/Library/Frameworks/Python.frameworkおよび/usr/binのライブラリとすべてが分離されるため、

which pip
/Library/Frameworks/Python.framework/Versions/2.7/bin/pip

その後、pip install ansibleでansibleをインストールしました
それからwhich ansibleを実行すると、

/Library/Frameworks/Python.framework/Versions/2.7/bin/ansible

およびpip list

setuptools (28.8.0)
six (1.10.0)

mac OS Pythonライブラリが新しいインストールで参照されないため、ansibleが機能するようになりました。

インストーラーは$ PATHを設定しているため、which python/Library/Frameworks/Python.framework/Versions/2.7/bin/pythonになり、/usr/local/bin/pythonはこれへのシンボリックリンクになります。
システムPythonが必要な場合は、/ usr/bin/pythonを使用するか、$ PATHを変更する必要があります。

2
Jason S

答えは、OSに付属するファクトリpythonのOSXでsetuptoolsを更新できないことです。理由は、/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python内のファイルをユーザーが削除または変更できないためです。通常のユーザーだけでなく、root権限を持っている場合でも、それらのファイルを変更することはできません。

もちろん、他のさまざまな方法でsetuptoolsの新しいバージョンをインストールできますが、デフォルトのシステムパッケージは上書きされません。 --user pythonフラグを使用して推奨ルートに進むか、ルートなしで~/Libraryにインストールすることを選択した場合、これらはシステムファイルバージョンをオーバーライドしません。

あなたまたはrootがシステムのデフォルトを変更できない理由は、El Capitan +のSIPパーミッション制限によるものです。 SIPを無効にすることもできますが、これは通常お勧めしません。

代わりに、唯一の合理的な解決策は、python virtualenvを使用することです。

1
I K