OSX ElCapitanのsetuptoolsのアップグレード


81

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

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


2
解決策はありませんが、説明があります。おそらく、新しいシステム整合性保護が原因です。pipは、が使用されていても、許可されなくなったものを変更しようとしていsudoます。この質問を参照してください。私はまだこれに対処するために時間をかけていません。--userピップのオプションは、私がに見たいものを考えられます。すべてを「更新」するための実用的な解決策を見つけたら、共有してください!
アーサー

ipdbリンクされているエラーが発生しsetuptoolsます。setuptoolsのアップグレードは機能しません。それは動作し--user=pythonますが、ipdbエラーはまだ修正されません。
R11G 2018

回答:


189

これは、OS X ElCapitanで導入されたシステム整合性保護が原因で発生します。

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

言い換えると

pip install --upgrade setuptools --user python

2
pip(とは異なりeasy_install)sudoは必要ありませんpython。ユーザーに使用させるため、動作することを確認しました。
kof 2015年

1
Dockerコンテナ内のCentOS7でも動作します。何らかの理由で失敗していました(2016年5月以前はこの手順なしでまったく同じセットアップが機能しましたが...)
geerlingguy

2
それを機能させることができず、-userオプションがどのように機能するのか理解できません。私にとってうまくいったのは、setuptoolsのアップグレード中に(ipythonのインストールに関連して)システム整合性保護を一時的に無効にし、その後再度有効にすることでした。これを行うには:リカバリモード(cmd + R)で起動し、ターミナルを起動して、を入力しcsrutil disableます。再起動し、アップグレード後、リカバリモードで再起動して、に入りcsrutil enableます。再起動後、ipythonは引き続き正常に機能しました。
Grav

このコマンドは正常に実行できますが、更新は行われません。このような出力ルックスCollecting setuptools Using cached setuptools-28.2.0-py2.py3-none-any.whl Requirement already up-to-date: python in /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload Installing collected packages: setuptools Successfully installed setuptools-1.1.6
diidu

:私は最終的に指示に従って作業物事がここで与えられ得ることができたapple.stackexchange.com/questions/209572/...
diidu

2

概要概要

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

私の意見では、独自のPythonインストールをアンインストールして再インストールし、SIPで保護されているMacOSが提供するPythonライブラリとは別にしておくのが最善の解決策です。

SIPは将来のMacOSリリースの一部であり、SIPはここでは原因ではなく、Pythonライブラリの競合の問題を明らかにするだけなので、SIPを無効にするよりもこれを好みます。

詳細

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

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

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

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

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

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 at/Library/Frameworks/Python.framework/Versions/2.7およびsymlinksがインストールされ、$ PATHの/usr/local/bin前に追加さ/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を変更する必要があります


1

答えは、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を無効にすることもできますが、これは通常はお勧めしません。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.