web-dev-qa-db-ja.com

OS X El Capitanでは、python 6つの互換性ユーティリティに依存するパッケージをアップグレードできませんNOR

スクレイプを使用しようとしていますが、問題があります。

six.movesからxmlrpc_clientをxmlrpclibとしてインポート

ImportError:名前xmlrpc_clientをインポートできません

次に、pip install --upgrade six scrape、しかし:

  Found existing installation: six 1.4.1
    DEPRECATION: Uninstalling a distutils installed project (six) has been deprecated and will be removed in a future version. This is due to the fact that uninstalling a distutils project will only partially uninstall the project.
Uninstalling six-1.4.1:
Exception:
Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/pip/basecommand.py", line 211, in main
status = self.run(options, args)
  File "/Library/Python/2.7/site-packages/pip/commands/install.py", line 311, in run
root=options.root_path,
  File "/Library/Python/2.7/site-packages/pip/req/req_set.py", line 640, in install
requirement.uninstall(auto_confirm=True)
  File "/Library/Python/2.7/site-packages/pip/req/req_install.py", line 716, in uninstall
paths_to_remove.remove(auto_confirm)
  File "/Library/Python/2.7/site-packages/pip/req/req_uninstall.py", line 125, in remove
renames(path, new_path)
  File "/Library/Python/2.7/site-packages/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 302, in move
copy2(src, real_dst)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 131, in copy2
copystat(src, dst)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 103, in copystat
os.chflags(dst, st.st_flags)

OSError: [Errno 1] Operation not permitted: '/var/folders/3h/r_2cxlvd1sjgzfgs4xckc__c0000gn/T/pip-5h86J8-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/six-1.4.1-py2.7.Egg-info'
34
R.hui

クイックフィックス:

私は同じ問題だと思うことを回避しました。これを試してみてください(必要に応じて、Sudo):

pip install scrape --upgrade --ignore-installed six

Github は最終的に私がこの答えを得た場所です(そして、これがあなたの問題を解決しない場合、あなたが考慮するかもしれないいくつかの提案があります)。また、これはエルキャピタンの問題のようです。

また、これは技術的には duplicate かもしれません。しかし、他の投稿が思いついた答えは、デフォルトのosx Pythonに依存するのではなく、独自のPythonをインストールすることでした。


より長い、本当の修正:

最終的に、他のライブラリをインストールするためにsixを実際にアップグレードする必要がある状況に陥りましたが、その時点で無視するだけでは十分ではありませんでした。 6つをアップグレードする最も簡単な方法は、pipを使用せず、代わりに手動で.tar.gz from 6ページ 、解凍、新しく解凍された6パッケージディレクトリに移動し、インストールを手動で実行します(必要に応じて、Sudo):

python setup.py install

この回答 のガイダンスに感謝します。

52
stephenlechner

これは重複しているとは思いませんが、実際には この問題はpip GitHubリポジトリの問題リストで説明されています です。

注:インストールするパッケージに応じて、ソリューションで参照されているコマンドを変更する必要があります。以下の私のケースでは、virtualenvとvirtualwrapperをセットアップしようとしていました。 aws-cliまたはその他のパッケージのインストールに失敗した場合は、それをスクリプトに挿入するだけです

この問題の核心は、El Capitanに同梱されたAppleの新しいSIPに関係しています。もっと 具体的に

OS X 10.11のpythonは、Appleがpythonディストリビューションに変更を加えたため、削除できない6つの独自のコピーを保持しています。 1.4.1は最新ではなく、1.10.0は最新です。また、Pythonのインポートパスの早い段階で提供されるため、通常はインストールした後のバージョンをオーバーライドします。

今のところ、異なるpythonを使用することをお勧めします。 Python.orgの、またはHomebrew、またはAnaconda Pythonを介してインストールされます。

Ask Different Stack Exchangeに関する非常に詳細な議論 があり、これはSIPの問題がEl Capitanの最初のリリース以来どのように識別され、対処され、進化したかをカバーしています。私はそれが魅力的であると感じましたが、あなたが読むのにかかるよりも以下の指示に従う時間は少ないので、以下を終えた後にチェックアウトすることをお勧めします...

VirtualEnvとVirtualEnvWrapperをアップグレードしようとしたときに、まったく同じエラーが発生しました。上記のスレッドでいくつかの提案がありましたが、最終的に最も安定したのは

  1. Sudo OPTIONの組み込みサポートを活用して、HOME環境変数を指定します
$ man Sudo

  -H   The -H (HOME) option option sets the HOME environment variable 
        to the home directory of the target user (root by default) as specified 
        HOME environment variable depends on sudoers(5) settings.  By default, 
        Sudo will set HOME if env_reset or always_set_home are set, or if
        set_home is set and the -s option is specified on the command line.
  1. Pipのオプションを活用して、アップグレードを強制し、既存のパッケージを無視します
$ pip install --help | grep upgrade

  -U, --upgrade   Upgrade all specified packages to the newest available 
        version. This process is recursive regardless of whether a dependency 
        is already satisfied.

beejhuff@ignatius:~/mac_setup$ pip install --help | grep ignore-installed

  -I, --ignore-installed  Ignore the installed packages (reinstalling instead).

最初に、私の最初の試みとエラー:

$ Sudo pip install virtualenv virtualenvwrapper

The directory '/Users/beejhuff/Library/Caches/pip/http' or its parent directory 
is not owned by the current user and the cache has been disabled. 
Please check the permissions and owner of that directory. If executing 
pip with Sudo, you may want Sudo's -H flag.

The directory '/Users/beejhuff/Library/Caches/pip' or its parent directory 
is not owned by the current user and caching wheels has been disabled. 
check the permissions and owner of that directory. If executing pip with 
Sudo, you may want Sudo's -H flag.

Collecting virtualenv
  Downloading virtualenv-15.0.0-py2.py3-none-any.whl (1.8MB)
    100% |████████████████████████████████| 1.8MB 335kB/s 
Collecting virtualenvwrapper
  Downloading virtualenvwrapper-4.7.1-py2.py3-none-any.whl
Collecting virtualenv-clone (from virtualenvwrapper)
  Downloading virtualenv-clone-0.2.6.tar.gz
Collecting stevedore (from virtualenvwrapper)
  Downloading stevedore-1.12.0-py2.py3-none-any.whl
Collecting pbr>=1.6 (from stevedore->virtualenvwrapper)
  Downloading pbr-1.8.1-py2.py3-none-any.whl (89kB)
    100% |████████████████████████████████| 92kB 362kB/s 
Collecting six>=1.9.0 (from stevedore->virtualenvwrapper)
  Downloading six-1.10.0-py2.py3-none-any.whl
Installing collected packages: virtualenv, virtualenv-clone, pbr, six, stevedore, virtualenvwrapper
  Running setup.py install for virtualenv-clone ... done
  Found existing installation: six 1.4.1
    DEPRECATION: Uninstalling a distutils installed project (six) has been deprecated and will be removed in a future version. This is due to the fact that uninstalling a distutils project will only partially uninstall the project.
    Uninstalling six-1.4.1:
Exception:
Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/pip-8.1.0-py2.7.Egg/pip/basecommand.py", line 209, in main
    status = self.run(options, args)
  File "/Library/Python/2.7/site-packages/pip-8.1.0-py2.7.Egg/pip/commands/install.py", line 317, in run
    prefix=options.prefix_path,
  File "/Library/Python/2.7/site-packages/pip-8.1.0-py2.7.Egg/pip/req/req_set.py", line 726, in install
    requirement.uninstall(auto_confirm=True)
  File "/Library/Python/2.7/site-packages/pip-8.1.0-py2.7.Egg/pip/req/req_install.py", line 746, in uninstall
    paths_to_remove.remove(auto_confirm)
  File "/Library/Python/2.7/site-packages/pip-8.1.0-py2.7.Egg/pip/req/req_uninstall.py", line 115, in remove
    renames(path, new_path)
  File "/Library/Python/2.7/site-packages/pip-8.1.0-py2.7.Egg/pip/utils/__init__.py", line 267, in renames
    shutil.move(old, new)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 302, in move
    copy2(src, real_dst)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 131, in copy2
    copystat(src, dst)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 103, in copystat
    os.chflags(dst, st.st_flags)
OSError: [Errno 1] Operation not permitted: '/tmp/pip-GQL8Gi-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/six-1.4.1-py2.7.Egg-info'

ソリューション

3つの特定の方法でインストールコマンドを変更する必要がありました。

  1. -HフラグをSudoに追加する必要がありました
  2. アップグレードするパッケージの名前の後に--upgradeオプションを追加する必要がありました(virtualenv
  3. --ignore-installedフラグを使用し、sixパッケージを無視するように指定する必要がありました。
  4. *注意:一般的なコマンドは$ Sudo -H pip install <packagename> --upgrade --ignore-installed six-<packagename>をインストールする必要のある特定のパッケージに置き換えます `

最終作業例

最初のアップグレードvirtualenv

$ Sudo -H pip install virtualenv --upgrade --ignore-installed six

Password:

Collecting virtualenv
  Using cached virtualenv-15.0.0-py2.py3-none-any.whl
Collecting six
  Using cached six-1.10.0-py2.py3-none-any.whl
Installing collected packages: virtualenv, six
Successfully installed six-1.4.1 virtualenv-15.0.0

2回目のvirtualenvwrapperのアップグレード

$ Sudo -H pip install virtualenvwrapper --upgrade --ignore-installed six

Password:

  Downloading virtualenvwrapper-4.7.1-py2.py3-none-any.whl
Collecting six
  Downloading six-1.10.0-py2.py3-none-any.whl
Collecting virtualenv (from virtualenvwrapper)
  Downloading virtualenv-15.0.0-py2.py3-none-any.whl (1.8MB)
    100% |████████████████████████████████| 1.8MB 751kB/s 
Collecting virtualenv-clone (from virtualenvwrapper)
  Downloading virtualenv-clone-0.2.6.tar.gz
Collecting stevedore (from virtualenvwrapper)
  Downloading stevedore-1.12.0-py2.py3-none-any.whl
Collecting pbr>=1.6 (from stevedore->virtualenvwrapper)
  Downloading pbr-1.8.1-py2.py3-none-any.whl (89kB)
    100% |████████████████████████████████| 92kB 417kB/s 
Installing collected packages: virtualenv, virtualenv-clone, pbr, six, stevedore, virtualenvwrapper
  Running setup.py install for virtualenv-clone ... done
Successfully installed pbr-1.8.1 six-1.4.1 stevedore-1.12.0 virtualenv-15.0.0 virtualenv-clone-0.2.6 virtualenvwrapper-4.7.1

以前の回答はどちらも私にとってはうまくいきません。最後に、以下の抜粋のとおり、 GitHub、aws/aws-cli から解決策を得ました。

OS Xでは、El Capitanのdistutilsに付属している6のバージョンに関するエラーが表示された場合、-ignore-installedオプションを使用します。

$ Sudo pip install awscli --ignore-installed six
4
SparkAndShine

これは動作します!!

Sudo pip install awsebcli --upgrade --ignore-installed six
1
Gaurav Magan