Honestly, I decided to live without python-openstackclient on my Mac, and chose to just manage OpenStack from the Linux node where it was running. The issue still irked me, but there are only so many hours in the day, and it's important to prioritize and choose your battles.

Fast forward about three weeks, and I found myself getting a similar traceback when trying to install boto3 for some AWS action. Now I had to get to the bottom of this.

I found this pip bug with some very helpful comments. The most important part is this sequence of comments:

Problem described in detail:

This is because OS X El Capitan ships with six 1.4.1 installed already and when it attempts to uninstall it (because awscli depends on botocore, botocore depends on python-dateutil, and python-dateutil depends on six >= 1.5) it doesn't have permission to do so because System Integrity Protection doesn't allow even root to modify those directories.

Ideally, pip should just skip uninstalling those items since they aren't installed to site-packages they are installed to a special Apple directory. However, even if pip skips uninstalling those items and installs six into site-packages we'll hit another bug where Apple puts their pre-installed stuff earlier in the sys.path than site-packages. I've talked to Apple about this and I'm not sure if they're going to do anything about it or not.

Follow up question:

This affects many other packages which rely on Six, pardon my obliviousness, but is there any way to tell pip to either 1. install an updated version to /Library's site-packages and be pointed to prefer that one (instead of saying 'requirement satisfied! and exiting) or 2. ignore the version found in /System on 10.11+?

Solution:

pip install --ignore-installed six

All of this may be very obvious to someone more familiar with MacOS or pip, but this combination of circumstances was new to me. My recent experiences with MacOS have been steadily more and more disappointing, and pip has always 'just worked' for me. I have been through dependency hell with rpm, up2date, and yum, as well as other Linux package managers, but this was a first for me on MacOS. I am on the latest (as of this writing) release, 10.12.6, and to Apple's credit, this is the first problem of this type I have had after many years of MacOS use. To Apple's discredit, I have had more issues with MacOS in the last year than I had in all the years prior.

Pip will do it

I followed the suggestion after skimming the thread and a couple others, and was able to install both packages that had failed for me in the past by simply appending --ignore-installed six: