While discussion the issue, Donald Stufft (@dstufft) and I realized the
simplest solution is to simply add an alias per vendored dependency. The
resulting changes are simple and effective. It prevents the issue in
2.5.2 and 2.5.3 where the following would work:
from requests.packages import webbrowser
This now appropriately raises an ImportError.
Closes #2465
class VendorAlias(object):
- def __init__(self):
+ def __init__(self, package_name):
+ self._package_name = package_name
self._vendor_name = __name__
- self._vendor_pkg = self._vendor_name + "."
+ self._vendor_pkg = self._vendor_name + "." + self._package_name
def find_module(self, fullname, path=None):
if fullname.startswith(self._vendor_pkg):
return module
-sys.meta_path.append(VendorAlias())
+sys.meta_path.extend([VendorAlias("urllib3"), VendorAlias("chardet")])