Repository: ipython/ipython

Issue:
Suggestion: 'undeprecate' extensions
I can't think of a single reason why it is deprecated. Python package management is really bad to rely on pip, packing small personal customization extensions is a massive overkill and can lead to potential pip conflicts in the future and publishing it is a horrendous waste of time (and might not even be possible in some cases). Extensions folder was perfect for very simple personal extensions and now using it constantly shows warnings that can't be disabled. Startup scripts aren't a good alternative because they clutter globals space and trying to do something without putting anything into globals leads to extremely ugly code in startup scripts.


Discussion:
Also your own documentation recommends using extensions folder, so just following documentation you will end up with deprecation warnings.

(I'm not talking about *installing* extensions into that folder, I'm talking about *loading* extensions from it. Deprecating/removing first makes total sense, deprecating second doesn't make any sense whatsoever and just complicates things for no reason).
I think it's pretty easy even locally to create/install a package without publishing it.
For example using https://flit.pypa.io/en/latest/. You don't even have to use pip for that. 

We'll try to do better with the docs, and better deprecation with `install_ext`
All this does is overcomplicates something that doesn't need to be this complicated. I do NOT want to publish my extension, it's just some personal customizations. I do not want to make local package either because package boilerplate takes probably about as much as extension itself and it would still have to interact with pip even if I do local package and pip is a terrible package _manager_. It's an ok package installer and I understand reasoning for deprecating **_installing_** extensions through other means - that simplifies things. There is no reason to deprecate loading extension from extensions folder. It already works, it's perfect for purpose of simple extensions for personal customization, there is nothing to be implemented, it just doesn't need a deprecation message to appear every time. Why complicate things when there is no need? The only alternative that is not deprecated is to use startup scripts but it litters the globals and if I want to avoid it - I have wrap everything in the class and then delete all globals I introduced manually (which is still better than interacting with pip for anything other than installing published extensions).

Resolving patch:
diff --git a/IPython/core/extensions.py b/IPython/core/extensions.py
--- a/IPython/core/extensions.py
+++ b/IPython/core/extensions.py
@@ -88,13 +88,7 @@ def _load_extension(self, module_str: str):
 
         with self.shell.builtin_trap:
             if module_str not in sys.modules:
-                with prepended_to_syspath(self.ipython_extension_dir):
-                    mod = import_module(module_str)
-                    if mod.__file__.startswith(self.ipython_extension_dir):
-                        print(("Loading extensions from {dir} is deprecated. "
-                               "We recommend managing extensions like any "
-                               "other Python packages, in site-packages.").format(
-                              dir=compress_user(self.ipython_extension_dir)))
+                mod = import_module(module_str)
             mod = sys.modules[module_str]
             if self._call_load_ipython_extension(mod):
                 self.loaded.add(module_str)
@@ -155,13 +149,3 @@ def _call_unload_ipython_extension(self, mod):
         if hasattr(mod, 'unload_ipython_extension'):
             mod.unload_ipython_extension(self.shell)
             return True
-
-    @undoc
-    def install_extension(self, url, filename=None):
-        """
-        Deprecated.
-        """
-        # Ensure the extension directory exists
-        raise DeprecationWarning(
-            '`install_extension` and the `install_ext` magic have been deprecated since IPython 4.0'
-            'Use pip or other package managers to manage ipython extensions.')


Test patch: