Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Deprecate imp.find_module()/load_module() #59002

Closed
brettcannon opened this issue May 13, 2012 · 8 comments
Closed

Deprecate imp.find_module()/load_module() #59002

brettcannon opened this issue May 13, 2012 · 8 comments
Assignees
Labels
stdlib Python modules in the Lib dir type-feature A feature request or enhancement

Comments

@brettcannon
Copy link
Member

BPO 14797
Nosy @brettcannon, @theller, @terryjreedy, @ezio-melotti, @merwok, @florentx, @ericsnowcurrently
Dependencies
  • bpo-17314: Stop using imp.find_module() in multiprocessing
  • bpo-18055: Stop using imp in IDLE
  • bpo-18157: remove usage of imp.load_module() from pydoc
  • bpo-18158: Delete test_importhooks
  • Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

    Show more details

    GitHub fields:

    assignee = 'https://github.com/brettcannon'
    closed_at = <Date 2013-06-11.21:13:25.877>
    created_at = <Date 2012-05-13.16:32:08.442>
    labels = ['type-feature', 'library']
    title = 'Deprecate imp.find_module()/load_module()'
    updated_at = <Date 2013-06-11.21:13:25.876>
    user = 'https://github.com/brettcannon'

    bugs.python.org fields:

    activity = <Date 2013-06-11.21:13:25.876>
    actor = 'brett.cannon'
    assignee = 'brett.cannon'
    closed = True
    closed_date = <Date 2013-06-11.21:13:25.877>
    closer = 'brett.cannon'
    components = ['Library (Lib)']
    creation = <Date 2012-05-13.16:32:08.442>
    creator = 'brett.cannon'
    dependencies = ['17314', '18055', '18157', '18158']
    files = []
    hgrepos = []
    issue_num = 14797
    keywords = []
    message_count = 8.0
    messages = ['160522', '160525', '160526', '183180', '183181', '190763', '190764', '190813']
    nosy_count = 8.0
    nosy_names = ['brett.cannon', 'theller', 'terry.reedy', 'ezio.melotti', 'eric.araujo', 'Arfrever', 'flox', 'eric.snow']
    pr_nums = []
    priority = 'low'
    resolution = 'fixed'
    stage = 'resolved'
    status = 'closed'
    superseder = None
    type = 'enhancement'
    url = 'https://bugs.python.org/issue14797'
    versions = ['Python 3.4']

    @brettcannon
    Copy link
    Member Author

    With importlib.find_loader() now implemented, imp.find_module() (and its companion, imp.load_module()) can go away and stop inflicting their bad API upon the world.

    The trick, though, is fixing code that uses the API. That means pkgutil, multiprocessing.forking, modulefinder, and idlelib.EditorWindow all need to be patched to stop using imp.find_module()/load_module().

    @brettcannon brettcannon added stdlib Python modules in the Lib dir type-feature A feature request or enhancement labels May 13, 2012
    @brettcannon
    Copy link
    Member Author

    http://hg.python.org/lookup/59870239813c documents imp.find_module/load_module as deprecated w/o actually raising the deprecation. The code works fine, but the API is just crap. So in the name of ease of transition (and my own personal sanity), I didn't go full-blown deprecation. The remaining code that uses imp.find_module() in the stdlib uses the API's unique properties (e.g. executing under a different name in multiprocessing) or directly exposes the API (e.g. pkgutil and modulefinder). As for idle, I don't run the tool so I don't feel like editing the code and getting it wrong.

    @brettcannon
    Copy link
    Member Author

    BTW, I'm leaving this issue open in case someone wants to take a stab and removing the uses of imp.find_module()/load_module() from the stdlb.

    @brettcannon
    Copy link
    Member Author

    Assuming issue bpo-17314 gets fixed, that leaves the following uses of imp.find_module():

    Lib/idlelib/EditorWindow.py
    39: """Version of imp.find_module() that handles hierarchical module names"""
    45: (file, filename, descr) = imp.find_module(tgt, path)

    Lib/modulefinder.py
    482: return imp.find_module(name, path)

    Lib/pkgutil.py
    229: file, filename, etc = imp.find_module(subname, path)

    Lib/test/test_imp.py
    59: with imp.find_module('module_' + mod, self.test_path)[0] as fd:
    64: imp.find_module('badsyntax_pep3120', path)
    68: fp, filename, info = imp.find_module('module_' + mod,
    77: fp, filename, info = imp.find_module("tokenize")
    91: file, filename, info = imp.find_module(temp_mod_name)
    147: file, filename, info = imp.find_module(temp_mod_name)
    187: imp.find_module, "badsyntax_pep3120", [path])
    201: x = imp.find_module("os")
    213: x = imp.find_module(example)
    223: fileobj, pathname, description = imp.find_module(m)

    Lib/test/test_import.py
    128: imp.find_module, TESTFN, ["."])

    Lib/test/test_importhooks.py
    118: file, filename, stuff = imp.find_module(subname, path)

    @brettcannon
    Copy link
    Member Author

    The remaining uses of imp.load_module() after issue bpo-17314 (which will probably all disappear as uses of imp.find_module() is removed):

    Lib/idlelib/EditorWindow.py
    48: module = imp.load_module(tgt, file, filename, descr)

    Lib/pkgutil.py
    291: mod = imp.load_module(fullname, self.file, self.filename, self.etc)

    Lib/pydoc.py
    47:# - imp.load_module() cannot be prevented from clobbering existing
    277: module = imp.load_module(name, file, path, (ext, 'r', kind))

    Lib/test/test_imp.py
    155: mod = imp.load_module(temp_mod_name, file, filename, info)
    203: new_os = imp.load_module("os", *x)
    217: mod = imp.load_module(example, *x)

    Lib/test/test_importhooks.py
    132: mod = imp.load_module(fullname, self.file, self.filename, self.stuff)

    @brettcannon brettcannon self-assigned this Feb 27, 2013
    @brettcannon
    Copy link
    Member Author

    Current status (with test_imp stripped out):

    ack "imp\.(find|load)_module" Lib
    Lib/modulefinder.py
    482: return imp.find_module(name, path)

    Lib/pkgutil.py
    189: file, filename, etc = imp.find_module(subname, path)
    251: mod = imp.load_module(fullname, self.file, self.filename, self.etc)

    Lib/pydoc.py
    47:# - imp.load_module() cannot be prevented from clobbering existing
    280: module = imp.load_module(name, file, path, (ext, 'r', kind))

    Lib/test/test_importhooks.py
    118: file, filename, stuff = imp.find_module(subname, path)
    132: mod = imp.load_module(fullname, self.file, self.filename, self.stuff)

    @brettcannon
    Copy link
    Member Author

    The modulefinder usage is directly exposed in its API as the return value of a find_module method, which makes removal a pain. Adding Thomas Heller to see what he has to say.

    The pkgutil usage is in classes that have been deprecated, so don't care.

    The rest should be workable and I will file separate bugs.

    @theller
    Copy link

    theller commented Jun 8, 2013

    The modulefinder usage is directly exposed in its API as the return
    value of a find_module method, which makes removal a pain. Adding
    Thomas Heller to see what he has to say.

    Some months ago, I have started to implement a brand-new modulefinder,
    which is based on importlib. It has a different API, but the (barely)
    documented API functions remain the same or could be made compatible.
    The advantage against the current modulefinder is that it finds modules
    in zipfiles, for example in zipped eggs.

    IMO it is not yet ready for inclusion into Python 3.4, but given the
    plans for the first alpha release in August I will hopefully find
    time to work on it a little bit more.

    If someone wants to read the code, or try it out:

    Modulefinder:
    http://code.google.com/p/ctypes-stuff/source/browse/trunk/mf/mf4.py

    Test:
    http://code.google.com/p/ctypes-stuff/source/browse/trunk/mf/maketest.py

    Thomas

    @ezio-melotti ezio-melotti transferred this issue from another repository Apr 10, 2022
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Labels
    stdlib Python modules in the Lib dir type-feature A feature request or enhancement
    Projects
    None yet
    Development

    No branches or pull requests

    2 participants