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
によって所有されています
どうすれば修正できますか?
これは、OS X El Capitanで導入されたシステム整合性保護により発生します。
--user python
をコマンドに追加すると、これが機能するようになりました。
言い換えると
pip install --upgrade setuptools --user python
問題は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_install
はeasy_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を変更する必要があります。
答えは、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を使用することです。