This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2012年05月13日 16:32 by brett.cannon, last changed 2022年04月11日 14:57 by admin. This issue is now closed.
| Messages (8) | |||
|---|---|---|---|
| msg160522 - (view) | Author: Brett Cannon (brett.cannon) * (Python committer) | Date: 2012年05月13日 16:32 | |
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(). |
|||
| msg160525 - (view) | Author: Brett Cannon (brett.cannon) * (Python committer) | Date: 2012年05月13日 17:07 | |
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. |
|||
| msg160526 - (view) | Author: Brett Cannon (brett.cannon) * (Python committer) | Date: 2012年05月13日 17:07 | |
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. |
|||
| msg183180 - (view) | Author: Brett Cannon (brett.cannon) * (Python committer) | Date: 2013年02月27日 20:04 | |
Assuming issue #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) |
|||
| msg183181 - (view) | Author: Brett Cannon (brett.cannon) * (Python committer) | Date: 2013年02月27日 20:05 | |
The remaining uses of imp.load_module() after issue #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) |
|||
| msg190763 - (view) | Author: Brett Cannon (brett.cannon) * (Python committer) | Date: 2013年06月07日 17:29 | |
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) |
|||
| msg190764 - (view) | Author: Brett Cannon (brett.cannon) * (Python committer) | Date: 2013年06月07日 17:40 | |
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. |
|||
| msg190813 - (view) | Author: Thomas Heller (theller) * (Python committer) | Date: 2013年06月08日 18:02 | |
> 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 |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:57:30 | admin | set | github: 59002 |
| 2013年06月11日 21:13:25 | brett.cannon | set | status: open -> closed resolution: fixed stage: needs patch -> resolved |
| 2013年06月08日 18:02:04 | theller | set | messages: + msg190813 |
| 2013年06月07日 17:44:14 | brett.cannon | set | dependencies: + remove usage of imp.load_module() from pydoc |
| 2013年06月07日 17:43:36 | brett.cannon | set | dependencies: + Delete test_importhooks |
| 2013年06月07日 17:40:55 | brett.cannon | set | nosy:
+ theller messages: + msg190764 |
| 2013年06月07日 17:29:00 | brett.cannon | set | messages:
+ msg190763 versions: + Python 3.4, - Python 3.3 |
| 2013年05月25日 15:40:26 | brett.cannon | set | dependencies: + Stop using imp in IDLE |
| 2013年02月27日 20:06:35 | brett.cannon | set | assignee: brett.cannon |
| 2013年02月27日 20:05:34 | brett.cannon | set | messages: + msg183181 |
| 2013年02月27日 20:04:26 | brett.cannon | set | messages: + msg183180 |
| 2013年02月27日 20:03:22 | brett.cannon | set | dependencies: + Stop using imp.find_module() in multiprocessing |
| 2013年02月27日 20:03:15 | brett.cannon | link | issue17177 dependencies |
| 2012年07月11日 16:22:17 | flox | set | nosy:
+ flox |
| 2012年07月11日 04:18:42 | eric.araujo | set | nosy:
+ eric.araujo |
| 2012年07月09日 20:10:51 | brett.cannon | unlink | issue13959 dependencies |
| 2012年05月18日 17:54:53 | terry.reedy | set | nosy:
+ terry.reedy |
| 2012年05月13日 19:47:48 | eric.snow | set | nosy:
+ eric.snow |
| 2012年05月13日 18:12:32 | Arfrever | set | nosy:
+ Arfrever |
| 2012年05月13日 17:07:54 | brett.cannon | set | messages: + msg160526 |
| 2012年05月13日 17:07:21 | brett.cannon | set | priority: normal -> low messages: + msg160525 |
| 2012年05月13日 16:35:07 | ezio.melotti | set | nosy:
+ ezio.melotti |
| 2012年05月13日 16:32:23 | brett.cannon | link | issue13959 dependencies |
| 2012年05月13日 16:32:08 | brett.cannon | create | |