Blame SOURCES/remove-existing-dist-only-if-path-conflicts.patch

c9c56a
diff --git a/pip/req/req_install.py b/pip/req/req_install.py
c9c56a
index 6911fba..8524932 100644
c9c56a
--- a/pip/req/req_install.py
c9c56a
+++ b/pip/req/req_install.py
c9c56a
@@ -34,7 +34,7 @@ from pip.locations import (
c9c56a
 )
c9c56a
 from pip.utils import (
c9c56a
     display_path, rmtree, ask_path_exists, backup_dir, is_installable_dir,
c9c56a
-    dist_in_usersite, dist_in_site_packages, egg_link_path,
c9c56a
+    dist_in_usersite, dist_in_site_packages, dist_in_install_path, egg_link_path,
c9c56a
     call_subprocess, read_text_file, FakeFile, _make_build_dir, ensure_dir,
c9c56a
     get_installed_version, normalize_path, dist_is_local,
c9c56a
 )
c9c56a
@@ -1049,7 +1049,7 @@ class InstallRequirement(object):
c9c56a
                         "lack sys.path precedence to %s in %s" %
c9c56a
                         (existing_dist.project_name, existing_dist.location)
c9c56a
                     )
c9c56a
-            else:
c9c56a
+            elif dist_in_install_path(existing_dist):
c9c56a
                 self.conflicts_with = existing_dist
c9c56a
         return True
c9c56a
 
c9c56a
diff --git a/pip/req/req_set.py b/pip/req/req_set.py
c9c56a
index 76aec06..b93304a 100644
c9c56a
--- a/pip/req/req_set.py
c9c56a
+++ b/pip/req/req_set.py
c9c56a
@@ -18,7 +18,8 @@ from pip.exceptions import (InstallationError, BestVersionAlreadyInstalled,
c9c56a
                             UnsupportedPythonVersion)
c9c56a
 from pip.req.req_install import InstallRequirement
c9c56a
 from pip.utils import (
c9c56a
-    display_path, dist_in_usersite, ensure_dir, normalize_path)
c9c56a
+    display_path, dist_in_usersite, dist_in_install_path, ensure_dir,
c9c56a
+    normalize_path)
c9c56a
 from pip.utils.hashes import MissingHashes
c9c56a
 from pip.utils.logging import indent_log
c9c56a
 from pip.utils.packaging import check_dist_requires_python
c9c56a
@@ -437,10 +438,12 @@ class RequirementSet(object):
c9c56a
 
c9c56a
                 if not best_installed:
c9c56a
                     # don't uninstall conflict if user install and
c9c56a
-                    # conflict is not user install
c9c56a
+                    # conflict is not user install or conflict lives
c9c56a
+                    # in a different path (/usr/lib vs /usr/local/lib/)
c9c56a
                     if not (self.use_user_site and not
c9c56a
-                            dist_in_usersite(req_to_install.satisfied_by)):
c9c56a
-                        req_to_install.conflicts_with = \
c9c56a
+                            dist_in_usersite(req_to_install.satisfied_by) or not
c9c56a
+                            dist_in_install_path(req_to_install.satisfied_by)):
c9c56a
+                        req_to_install.conflicts_with = \
c9c56a
                             req_to_install.satisfied_by
c9c56a
                     req_to_install.satisfied_by = None
c9c56a
 
c9c56a
@@ -644,10 +647,12 @@ class RequirementSet(object):
c9c56a
                 if req_to_install.satisfied_by:
c9c56a
                     if self.upgrade or self.ignore_installed:
c9c56a
                         # don't uninstall conflict if user install and
c9c56a
-                        # conflict is not user install
c9c56a
+                        # conflict is not user install or conflict lives
c9c56a
+                        # in a different path (/usr/lib vs /usr/local/lib/)
c9c56a
                         if not (self.use_user_site and not
c9c56a
                                 dist_in_usersite(
c9c56a
-                                    req_to_install.satisfied_by)):
c9c56a
+                                    req_to_install.satisfied_by) or not
c9c56a
+                                dist_in_install_path(req_to_install.satisfied_by)):
c9c56a
                             req_to_install.conflicts_with = \
c9c56a
                                 req_to_install.satisfied_by
c9c56a
                         req_to_install.satisfied_by = None
c9c56a
diff --git a/pip/utils/__init__.py b/pip/utils/__init__.py
c9c56a
index 815bd33..0ed59f7 100644
c9c56a
--- a/pip/utils/__init__.py
c9c56a
+++ b/pip/utils/__init__.py
c9c56a
@@ -22,7 +22,7 @@ from pip.exceptions import InstallationError
c9c56a
 from pip.compat import console_to_str, expanduser, stdlib_pkgs
c9c56a
 from pip.locations import (
c9c56a
     site_packages, user_site, running_under_virtualenv, virtualenv_no_global,
c9c56a
-    write_delete_marker_file,
c9c56a
+    write_delete_marker_file, distutils_scheme,
c9c56a
 )
c9c56a
 from pip._vendor import pkg_resources
c9c56a
 from pip._vendor.six.moves import input
c9c56a
@@ -315,6 +315,16 @@ def dist_in_site_packages(dist):
c9c56a
     ).startswith(normalize_path(site_packages))
c9c56a
 
c9c56a
 
c9c56a
+def dist_in_install_path(dist):
c9c56a
+    """
c9c56a
+    Return True if given Distribution is installed in
c9c56a
+    path matching distutils_scheme layout.
c9c56a
+    """
c9c56a
+    norm_path = normalize_path(dist_location(dist))
c9c56a
+    return norm_path.startswith(normalize_path(
c9c56a
+        distutils_scheme("")['purelib'].split('python')[0]))
c9c56a
+
c9c56a
+
c9c56a
 def dist_is_editable(dist):
c9c56a
     """Is distribution an editable install?"""
c9c56a
     for path_item in sys.path: