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 2011年03月25日 21:40 by Dave Peck, last changed 2022年04月11日 14:57 by admin. This issue is now closed.
| Repositories containing patches | |||
|---|---|---|---|
| https://davepeck@bitbucket.org/davepeck/pybug | |||
| Messages (6) | |||
|---|---|---|---|
| msg132162 - (view) | Author: Dave Peck (Dave Peck) | Date: 2011年03月25日 21:40 | |
If you use `import` to load a package and subpackage: import package import package.subpackage Then the `package` module instance will contain a `subpackage` attribute: assert "subpackage" in dir(sys.modules['package']), "This works." But if you use Python's `imp` module to import these packages instead, the same assertion will fail. Is this a python documentation oversight, or a bug with the `imp` module? To reproduce, clone the associated hg repro and follow the instructions in the README file. Thanks! |
|||
| msg132416 - (view) | Author: Brett Cannon (brett.cannon) * (Python committer) | Date: 2011年03月28日 20:09 | |
I say it's a documentation bug. |
|||
| msg132443 - (view) | Author: Dave Peck (Dave Peck) | Date: 2011年03月28日 22:52 | |
Definitely could agree with this assessment, but it is surprising given the lack of parallel behavior between 'import' and 'imp'. Note that imp.load_module(subpackage) _does_ modify the parent module's attributes -- but it will never put the subpackage attribute itself on parent. That's the part that made me think it shouldn't work this way and that its more bug than documentation. (That, and the specific use of the imp module in Google's dev_appserver.py which indicates that others have the same expectation of load_module() that I did.) |
|||
| msg132490 - (view) | Author: Brett Cannon (brett.cannon) * (Python committer) | Date: 2011年03月29日 17:07 | |
It's actually not surprising that imp works this way: it predates packages. Because the semantics (I assume) have been like this for ages I say we document the current behavior (it's easy to work around) and simply continue to replace imp functionality with importlib ones that are more modern and reasonable. |
|||
| msg132779 - (view) | Author: Terry J. Reedy (terry.reedy) * (Python committer) | Date: 2011年04月01日 23:39 | |
I verified this for 3.2 (and IDLE) with
import sys, tkinter
"ttk" in dir(sys.modules['tkinter']) # False
import tkinter.ttk
"ttk" in dir(sys.modules['tkinter']) # True
====reload========
import sys,imp
imp.load_module('tkinter',*imp.find_module('tkinter'))
imp.load_module('tkinter.ttk',*imp.find_module('ttk',
sys.modules["tkinter"].__path__))
"ttk" in dir(sys.modules['tkinter']) # False
from tkinter import ttk # ImportError
Given that 'ttk' is only added to the tkinter entry when ttk is imported via tkinter, I am not surprised that the direct import with imp fails to affect the tkinter entry. Imp would have to notice that ttk is in a directory with __init__, get the name of the parent directory, and then check to see whether or not that parent had already been imported. Unlike import
import ttk #fails
imp does not require such a previous import:
imp.load_module('ttk',*imp.find_module('ttk',
["C:/programs/python32/Lib/tkinter"]))
succeeds, which shows again that import and imp act differently.
Dave, can you suggest added text and a location to put it?
Hmmm. How about after "If the load ...", add "A successful load does not affect previously loaded package modules as this function operates independently of package structure."
|
|||
| msg180614 - (view) | Author: Brett Cannon (brett.cannon) * (Python committer) | Date: 2013年01月25日 19:32 | |
imp.find_module() is now deprecated, so not worrying about adding more details to the docs for the function. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:57:15 | admin | set | github: 55885 |
| 2013年01月25日 19:32:38 | brett.cannon | set | status: open -> closed resolution: out of date messages: + msg180614 |
| 2011年09月25日 21:14:07 | Arfrever | set | nosy:
+ Arfrever |
| 2011年04月01日 23:39:28 | terry.reedy | set | nosy:
+ terry.reedy title: imp.load_module and submodules - doc issue, or bug? -> Improve imp.load_module and submodules doc messages: + msg132779 versions: + Python 3.1, Python 3.2, Python 3.3, - Python 2.6, Python 2.5 |
| 2011年03月29日 17:07:39 | brett.cannon | set | messages: + msg132490 |
| 2011年03月29日 03:53:11 | Trundle | set | nosy:
+ Trundle |
| 2011年03月28日 22:52:04 | Dave Peck | set | messages: + msg132443 |
| 2011年03月28日 20:09:29 | brett.cannon | set | nosy:
+ docs@python, brett.cannon messages: + msg132416 assignee: docs@python components: + Documentation, - Interpreter Core, Library (Lib) stage: needs patch |
| 2011年03月25日 21:40:26 | Dave Peck | create | |