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年09月10日 19:48 by exarkun, last changed 2022年04月11日 14:57 by admin. This issue is now closed.
| Files | ||||
|---|---|---|---|---|
| File name | Uploaded | Description | Edit | |
| test_broken_import_minimal.py | exarkun, 2012年09月10日 19:48 | |||
| Messages (5) | |||
|---|---|---|---|
| msg170225 - (view) | Author: Jean-Paul Calderone (exarkun) * (Python committer) | Date: 2012年09月10日 19:48 | |
The attached unit test fails with an ImportError... sometimes. Here's a little blob of shell that seems to make the failure come up more quickly: while ~/Projects/cpython/3.3/python -m unittest -v test_broken_import; do rm -rf test_broken_import; rm -rf __pycache__/; done An example of the output when I run it: exarkun@top:/tmp$ while ~/Projects/cpython/3.3/python -m unittest -v test_broken_import_minimal; do rm -rf test_broken_import; rm -rf __pycache__/; done test_renamedSource (test_broken_import_minimal.BrokenTests) ... ok ---------------------------------------------------------------------- Ran 1 test in 0.004s OK test_renamedSource (test_broken_import_minimal.BrokenTests) ... ok ---------------------------------------------------------------------- Ran 1 test in 0.005s OK test_renamedSource (test_broken_import_minimal.BrokenTests) ... > /tmp/test_broken_import_minimal.py(53)test_renamedSource() -> print(e) (Pdb) c No module named 'twisted_renamed_helper' ERROR ====================================================================== ERROR: test_renamedSource (test_broken_import_minimal.BrokenTests) ---------------------------------------------------------------------- Traceback (most recent call last): File "./test_broken_import_minimal.py", line 50, in test_renamedSource from twisted_renamed_helper import module ImportError: No module named 'twisted_renamed_helper' ---------------------------------------------------------------------- Ran 1 test in 0.759s FAILED (errors=1) |
|||
| msg170231 - (view) | Author: Eric Snow (eric.snow) * (Python committer) | Date: 2012年09月10日 20:28 | |
The FileFinder class (a "path entry finder") uses a cache to efficiently track changes to files. You can manually clear this cache by calling importlib.invalidate_caches(). The Python test suite has several examples of clearing the FileFinder cache in this way. I've verified the failure as described. Using importlib.invalidate_caches() at the spot where the script cleans up sys.modules, the failure goes away. Depending on OS filesystem timestamp resolution, you could see the behavior just as you've described it. Since normally you wouldn't remove and re-add modules like this, it isn't normally an issue. |
|||
| msg170254 - (view) | Author: Eric Snow (eric.snow) * (Python committer) | Date: 2012年09月11日 00:39 | |
Thinking about it, it may be worth adding a note to the docs for sys.modules making it clear about importlib.invalidate_caches(). I'll see about writing up a patch when I get a chance. |
|||
| msg170300 - (view) | Author: Brett Cannon (brett.cannon) * (Python committer) | Date: 2012年09月11日 12:50 | |
I don't think sys.modules is the right place about a warning regarding importlib.invalidate_caches(); this has nothing to do with sys.modules but instead import itself. Probably something more along those lines would be more fitting. This is also mentioned the 3.3 What's New on how to port your code, so at least that's covered. |
|||
| msg170310 - (view) | Author: Eric Snow (eric.snow) * (Python committer) | Date: 2012年09月11日 14:42 | |
The relationship between invalidate_caches() and sys.modules is definitely tenuous. However, my rationale was that people would look for an explanation on why modifying sys.modules was not working as expected. The sys.modules doc entry was the one that seemed to make the most sense. However, this is a pretty uncommon case and you're right that the What's New entry should be enough. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:57:35 | admin | set | github: 60116 |
| 2012年09月11日 14:42:38 | eric.snow | set | status: open -> closed resolution: rejected messages: + msg170310 |
| 2012年09月11日 12:50:28 | brett.cannon | set | nosy:
+ brett.cannon messages: + msg170300 |
| 2012年09月11日 00:39:05 | eric.snow | set | status: pending -> open messages: + msg170254 |
| 2012年09月10日 21:02:08 | eric.snow | set | status: open -> pending |
| 2012年09月10日 20:28:15 | eric.snow | set | nosy:
+ eric.snow messages: + msg170231 type: behavior stage: test needed |
| 2012年09月10日 19:48:07 | exarkun | create | |