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 2008年10月30日 00:57 by amaury.forgeotdarc, last changed 2022年04月11日 14:56 by admin. This issue is now closed.
| Files | ||||
|---|---|---|---|---|
| File name | Uploaded | Description | Edit | |
| interactive_cleanup.patch | vstinner, 2008年10月31日 01:24 | |||
| pymodule_create2.patch | vstinner, 2008年10月31日 01:44 | Remove Py_IsInitialized() from PyModule_Create2() | ||
| clarify___del__.diff | brett.cannon, 2008年11月19日 22:27 | Clarify that imports are not guaranteed to work in __del__ | ||
| a.py | loewis, 2008年11月20日 15:48 | |||
| check-import-machinery-only.diff | hodgestar, 2010年11月20日 11:34 | Relax check in PyModule_Create2 to only check that import machinery is still available. | ||
| check-import-machinery-only-with-test.diff | r.david.murray, 2010年12月14日 17:50 | |||
| Messages (21) | |||
|---|---|---|---|
| msg75344 - (view) | Author: Amaury Forgeot d'Arc (amaury.forgeotdarc) * (Python committer) | Date: 2008年10月30日 00:57 | |
The following interactive session crashes the interpreter on shutdown: >>> class C: ... def __del__(self): ... import warnings ... >>> C() <__main__.C object at 0x00C29D58> >>> ^Z Fatal Python error: Interpreter not initialized (version mismatch?) This problem actually happens with the file object, which can call PyErr_WarnEx when it is deallocated and closed, see example in issue4226. This "Fatal" message is new in 3.0. If I ignore it all seems correct, and the module is correctly imported. |
|||
| msg75347 - (view) | Author: Christian Heimes (christian.heimes) * (Python committer) | Date: 2008年10月30日 01:03 | |
I can reproduce the same output with CTRL+D on Linux.
$ python3.0
Python 3.0rc1+ (py3k:67029M, Oct 26 2008, 23:48:21)
[GCC 4.2.4 (Ubuntu 4.2.4-1ubuntu3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> class C:
... def __del__(self):
... print("del")
... import warnings
...
[33876 refs]
>>> C()
<__main__.C object at 0x7f4740a98d80>
[33893 refs]
>>> exit()
[33900 refs]
del
Fatal Python error: Interpreter not initialized (version mismatch?)
Aborted
|
|||
| msg75402 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2008年10月31日 01:10 | |
The problem occurs in PyImport_Cleanup() on this line:
PyDict_SetItemString(dict, "_", Py_None);
So the problem is that "_" (special variable in the Python
interpreter) is removed too late, or that a destructor loads a module
when Python is exiting.
Call trace:
Py_Finalize() -> PyImport_Cleanup() ->
builtin___import__("warnings") -> builtin___import__("_warnings") ->
_PyWarnings_Init() -> PyModule_Create2()
Full backtrace:
(gdb) where
#0 0xffffe410 in __kernel_vsyscall ()
#1 0xb7d68875 in raise () from /lib/tls/i686/cmov/libc.so.6
#2 0xb7d6a201 in abort () from /lib/tls/i686/cmov/libc.so.6
#3 0x080ba54b in Py_FatalError (msg=0x8163ad0 "Interpreter not
initialized (version mismatch?)") at Python/pythonrun.c:1922
#4 0x081248e2 in PyModule_Create2 (module=0x8174e20,
module_api_version=1013) at Objects/moduleobject.c:71
#5 0x080882d7 in _PyWarnings_Init () at Python/_warnings.c:879
#6 0x080abcb0 in init_builtin (name=0xbf8627a3 "_warnings") at
Python/import.c:1867
#7 0x080aba9f in load_module (name=0xbf8627a3 "_warnings", fp=0x0,
buf=0xbf8627a3 "_warnings", type=6, loader=0x0) at
Python/import.c:1795
#8 0x080ad54f in import_submodule (mod=0x81695a4,
subname=0xbf863833 "_warnings", fullname=0xbf863833 "_warnings") at
Python/import.c:2567
#9 0x080acd21 in load_next (mod=0x81695a4, altmod=0x81695a4,
p_name=0xbf863814, buf=0xbf863833 "_warnings", p_buflen=0xbf86381c)
at Python/import.c:2372
#10 0x080ac26e in import_module_level (name=0x0, globals=0xb7b2802c,
locals=0xb7b2802c, fromlist=0xb7b208fc, level=0) at
Python/import.c:2089
#11 0x080ac5b2 in PyImport_ImportModuleLevel
(name=0xb7b2c650 "_warnings", globals=0xb7b2802c, locals=0xb7b2802c,
fromlist=0xb7b208fc,
level=0) at Python/import.c:2140
#12 0x08088b0d in builtin___import__ (self=0xb7be8eac,
args=0xb7b2098c, kwds=0x0) at Python/bltinmodule.c:173
#13 0x081241c6 in PyCFunction_Call (func=0xb7be8f6c, arg=0xb7b2098c,
kw=0x0) at Objects/methodobject.c:84
#14 0x080ec5b8 in PyObject_Call (func=0xb7be8f6c, arg=0xb7b2098c,
kw=0x0) at Objects/abstract.c:2184
#15 0x08094bae in PyEval_CallObjectWithKeywords (func=0xb7be8f6c,
arg=0xb7b2098c, kw=0x0) at Python/ceval.c:3278
#16 0x080916dd in PyEval_EvalFrameEx (f=0x826661c, throwflag=0) at
Python/ceval.c:1985
#17 0x08093d64 in PyEval_EvalCodeEx (co=0xb7b25608,
globals=0xb7b2802c, locals=0xb7b2802c, args=0x0, argcount=0, kws=0x0,
kwcount=0,
defs=0x0, defcount=0, kwdefs=0x0, closure=0x0) at
Python/ceval.c:2835
#18 0x0808d2b4 in PyEval_EvalCode (co=0xb7b25608, globals=0xb7b2802c,
locals=0xb7b2802c) at Python/ceval.c:519
#19 0x080a9be8 in PyImport_ExecCodeModuleEx
(name=0xbf866dd3 "warnings", co=0xb7b25608,
pathname=0xbf864ca3 "/home/haypo/prog/py3k/Lib/warnings.pyc") at
Python/import.c:729
#20 0x080aa41e in load_source_module (name=0xbf866dd3 "warnings",
pathname=0xbf864ca3 "/home/haypo/prog/py3k/Lib/warnings.pyc",
fp=0x82650f8)
at Python/import.c:1020
#21 0x080aba14 in load_module (name=0xbf866dd3 "warnings",
fp=0x82650f8, buf=0xbf865d43 "/home/haypo/prog/py3k/Lib/warnings.py",
type=1,
loader=0x0) at Python/import.c:1773
#22 0x080ad54f in import_submodule (mod=0x81695a4,
subname=0xbf866dd3 "warnings", fullname=0xbf866dd3 "warnings") at
Python/import.c:2567
#23 0x080acd21 in load_next (mod=0x81695a4, altmod=0x81695a4,
p_name=0xbf866db4, buf=0xbf866dd3 "warnings", p_buflen=0xbf866dbc)
at Python/import.c:2372
#24 0x080ac26e in import_module_level (name=0x0, globals=0xb7c0402c,
locals=0x81695a4, fromlist=0x81695a4, level=0) at Python/import.c:2089
#25 0x080ac5b2 in PyImport_ImportModuleLevel
(name=0xb7b1f850 "warnings", globals=0xb7c0402c, locals=0x81695a4,
fromlist=0x81695a4, level=0)
at Python/import.c:2140
#26 0x08088b0d in builtin___import__ (self=0xb7be8eac,
args=0xb7b87e6c, kwds=0x0) at Python/bltinmodule.c:173
#27 0x081241c6 in PyCFunction_Call (func=0xb7be8f6c, arg=0xb7b87e6c,
kw=0x0) at Objects/methodobject.c:84
#28 0x080ec5b8 in PyObject_Call (func=0xb7be8f6c, arg=0xb7b87e6c,
kw=0x0) at Objects/abstract.c:2184
#29 0x08094bae in PyEval_CallObjectWithKeywords (func=0xb7be8f6c,
arg=0xb7b87e6c, kw=0x0) at Python/ceval.c:3278
#30 0x080916dd in PyEval_EvalFrameEx (f=0x8264fa4, throwflag=0) at
Python/ceval.c:1985
#31 0x08093d64 in PyEval_EvalCodeEx (co=0xb7b62c80,
globals=0xb7c0402c, locals=0x0, args=0xb7b1f4d8, argcount=1, kws=0x0,
kwcount=0,
defs=0x0, defcount=0, kwdefs=0x0, closure=0x0) at
Python/ceval.c:2835
---Type <return> to continue, or q <return> to quit---
#32 0x08111b1e in function_call (func=0xb7b2626c, arg=0xb7b1f4cc,
kw=0x0) at Objects/funcobject.c:628
#33 0x080ec5b8 in PyObject_Call (func=0xb7b2626c, arg=0xb7b1f4cc,
kw=0x0) at Objects/abstract.c:2184
#34 0x080fe956 in method_call (func=0xb7b2626c, arg=0xb7b1f4cc,
kw=0x0) at Objects/classobject.c:323
#35 0x080ec5b8 in PyObject_Call (func=0xb7b1f6cc, arg=0xb7bde02c,
kw=0x0) at Objects/abstract.c:2184
#36 0x08094bae in PyEval_CallObjectWithKeywords (func=0xb7b1f6cc,
arg=0xb7bde02c, kw=0x0) at Python/ceval.c:3278
#37 0x0806bf2d in slot_tp_del (self=0xb7b2906c) at
Objects/typeobject.c:5230
#38 0x080613eb in subtype_dealloc (self=0xb7b2906c) at
Objects/typeobject.c:922
#39 0x0811eb64 in insertdict (mp=0xb7be0acc, key=0xb7c03ac0,
hash=-724865314, value=0x81695a4) at Objects/dictobject.c:461
#40 0x0811f20d in PyDict_SetItem (op=0xb7be0acc, key=0xb7c03ac0,
value=0x81695a4) at Objects/dictobject.c:730
#41 0x081218a4 in PyDict_SetItemString (v=0xb7be0acc,
key=0x8153c82 "_", item=0x81695a4) at Objects/dictobject.c:2092
#42 0x080a902b in PyImport_Cleanup () at Python/import.c:419
#43 0x080b7518 in Py_Finalize () at Python/pythonrun.c:408
#44 0x080c80ad in Py_Main (argc=1, argv=0x81af008) at
Modules/main.c:639
#45 0x0805a2ab in main (argc=1, argv=0xbf869624)
at ./Modules/python.c:70
|
|||
| msg75403 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2008年10月31日 01:24 | |
Here is a patch fixing this issue: set builtins._=None at exit. The new introduced function, PyRun_InteractiveCleanup(), might also be called at the end of other functions like PyRun_InteractiveOne() or PyRun_InteractiveOneFlags(). If not, PyRun_InteractiveCleanup() should be exported. |
|||
| msg75404 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2008年10月31日 01:44 | |
Another solution: just remove the initialization test from PyModule_Create2(). I don't know if it's a safety test or something like that. |
|||
| msg75405 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2008年10月31日 01:46 | |
Python2 is not affected because the bug comes from PyModule_Create2() which was introduced in Python3. |
|||
| msg75409 - (view) | Author: Amaury Forgeot d'Arc (amaury.forgeotdarc) * (Python committer) | Date: 2008年10月31日 08:37 | |
Setting builtins._=None is not enough. My example is very simple, but the crash I had initially was during the deletion of sys.last_tb: the C() object may be stored anywhere. I agree that the test in PyModule_Create2 is too strong: the import machinery is still functional at this point. It could be replaced by something that becomes true on _PyImport_Init(), and false on _PyImport_Fini(). |
|||
| msg75482 - (view) | Author: Barry A. Warsaw (barry) * (Python committer) | Date: 2008年11月04日 00:10 | |
Can you add some tests for this problem? |
|||
| msg75542 - (view) | Author: Barry A. Warsaw (barry) * (Python committer) | Date: 2008年11月06日 03:14 | |
This seems like a corner case to me. We should fix it before the final release, but I don't think it's worth holding up 3.0rc2 for it. Deferring. |
|||
| msg75576 - (view) | Author: Martin v. Löwis (loewis) * (Python committer) | Date: 2008年11月06日 18:21 | |
PyModule_Create2 might be new, but the warning certainly is not - for 2.x, it lives in Py_InitModule4. Indeed, I can reproduce the problem with 2.7a0, replacing the import of warnings with an import of imp. |
|||
| msg75589 - (view) | Author: Christian Heimes (christian.heimes) * (Python committer) | Date: 2008年11月07日 01:48 | |
Strange, I can't reproduce the problem with any Python version. Even
py3k doesn't crash with either "import imp" and "import warnings".
$ cat ../issue4236.py
class Crasher(object):
def __del__(self):
print("__del__ called")
import imp
crasher = Crasher()
$ python2.4 issue4236.py
__del__ called
Exception exceptions.ImportError: 'No module named imp' in <bound method
Crasher.__del__ of <__main__.Crasher object at 0x7f0e6c4e44d0>> ignored
$ python2.5 issue4236.py
__del__ called
Exception exceptions.ImportError: 'No module named imp' in <bound method
Crasher.__del__ of <__main__.Crasher object at 0x7fbbde5ef1d0>> ignored
$ python2.6 issue4236.py
__del__ called
Exception ImportError: 'No module named imp' in <bound method
Crasher.__del__ of <__main__.Crasher object at 0x7f3d810dbf90>> ignored
$ py3k/python issue4236.py
__del__ called
Exception ImportError: 'No module named imp' in <bound method
Crasher.__del__ of <__main__.Crasher object at 0x9ab3e0>> ignored
|
|||
| msg75600 - (view) | Author: Amaury Forgeot d'Arc (amaury.forgeotdarc) * (Python committer) | Date: 2008年11月07日 09:12 | |
Christian, The initial example only works in interactive mode. To make your script crash, you have to set __builtins__._ = Crasher() There are several other places where Crasher() will crash on shutdown: sys.argv.insert(0, Crasher()) sys.ps1 = Crasher() sys.last_type = Crasher() sys.path_hooks.append(Crasher()) sys.path_importer_cache[''] = Crasher() But sys.meta_path.append(Crasher()) does not crash. |
|||
| msg76075 - (view) | Author: Brett Cannon (brett.cannon) * (Python committer) | Date: 2008年11月19日 22:08 | |
So if you look at Python/pythonrun.c, there is a comment from Tim Peters (from r34776) where he explicitly points out that this is possibility but that it has never been reported before. Oops. =) |
|||
| msg76076 - (view) | Author: Brett Cannon (brett.cannon) * (Python committer) | Date: 2008年11月19日 22:27 | |
I don't think there is anything to fix here beyond the docs for __del__. You should never expect anything to be working in __del__, and that includes the import machinery. It should be bare-bones, not trying to pull in new code! I have attached a patch which tries to clarify this fact in the language docs for __del__. |
|||
| msg76110 - (view) | Author: Martin v. Löwis (loewis) * (Python committer) | Date: 2008年11月20日 15:48 | |
Here is a test case (a.py) which produces a FatalError back to Python 2.4 at least) |
|||
| msg76113 - (view) | Author: Barry A. Warsaw (barry) * (Python committer) | Date: 2008年11月20日 16:02 | |
After consultation with MvL and Crys_ on irc, we've agreed that this should be fixed someday but it's a pathological case that shouldn't hold up the release. I'm lowering to critical because I don't think it should even hold up the final release. |
|||
| msg110208 - (view) | Author: Alexander Belopolsky (belopolsky) * (Python committer) | Date: 2010年07月13日 15:49 | |
The bug is still present in 2.7, and 3.2. |
|||
| msg121615 - (view) | Author: Simon Cross (hodgestar) | Date: 2010年11月20日 11:34 | |
I'm attaching a patch to relax the check in PyModule_Create2 as suggested by the Amaury (http://bugs.python.org/issue4236#msg75409). The patch uses "PyThreadState_Get()->interp->modules == NULL" to determine whether the import machinery has been cleaned up yet. The test suite still appears to pass. |
|||
| msg123962 - (view) | Author: R. David Murray (r.david.murray) * (Python committer) | Date: 2010年12月14日 17:50 | |
Brett applied his doc patch in r69092. Attached is a patch that combines Simon's patch with Martin's test program turned into a unit test. I confirm that the test suite passes with the patch applied (and fails with just the test applied). From the text of the original error message, I wonder if there is some way to trigger this error at interpreter startup, and if so whether or not that is tested by the test suite. Otherwise, is there any reason not to apply this patch? |
|||
| msg123978 - (view) | Author: Brett Cannon (brett.cannon) * (Python committer) | Date: 2010年12月14日 21:21 | |
Nothing jumps to my mind. |
|||
| msg123998 - (view) | Author: R. David Murray (r.david.murray) * (Python committer) | Date: 2010年12月15日 01:36 | |
Committed to py3k in r87251, 3.1 in r87252, and 2.7 in r87255. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:56:40 | admin | set | github: 48486 |
| 2010年12月15日 01:36:41 | r.david.murray | set | status: open -> closed nosy: loewis, barry, brett.cannon, amaury.forgeotdarc, belopolsky, vstinner, christian.heimes, hodgestar, r.david.murray messages: + msg123998 resolution: fixed stage: patch review -> resolved |
| 2010年12月14日 21:21:07 | brett.cannon | set | messages: + msg123978 |
| 2010年12月14日 17:50:33 | r.david.murray | set | files:
+ check-import-machinery-only-with-test.diff nosy: + r.david.murray messages: + msg123962 stage: needs patch -> patch review |
| 2010年11月20日 11:34:29 | hodgestar | set | files:
+ check-import-machinery-only.diff nosy: + hodgestar messages: + msg121615 |
| 2010年08月08日 23:08:34 | terry.reedy | set | versions: - Python 2.6, Python 3.0 |
| 2010年07月13日 15:49:44 | belopolsky | set | nosy:
+ belopolsky messages: + msg110208 |
| 2009年05月29日 22:24:45 | r.david.murray | set | nosy:
loewis, barry, brett.cannon, amaury.forgeotdarc, vstinner, christian.heimes versions: + Python 2.6, Python 3.1, Python 2.7, Python 3.2 type: crash components: + Interpreter Core stage: needs patch |
| 2008年11月24日 18:13:44 | brett.cannon | set | assignee: brett.cannon -> |
| 2008年11月20日 16:02:55 | barry | set | priority: release blocker -> critical assignee: brett.cannon messages: + msg76113 |
| 2008年11月20日 15:48:13 | loewis | set | files:
+ a.py messages: + msg76110 |
| 2008年11月19日 22:27:23 | brett.cannon | set | files:
+ clarify___del__.diff messages: + msg76076 |
| 2008年11月19日 22:08:17 | brett.cannon | set | nosy:
+ brett.cannon messages: + msg76075 |
| 2008年11月07日 13:31:21 | barry | set | priority: deferred blocker -> release blocker |
| 2008年11月07日 09:12:15 | amaury.forgeotdarc | set | messages: + msg75600 |
| 2008年11月07日 01:48:24 | christian.heimes | set | messages: + msg75589 |
| 2008年11月06日 18:21:04 | loewis | set | messages: + msg75576 |
| 2008年11月06日 03:14:12 | barry | set | priority: release blocker -> deferred blocker messages: + msg75542 |
| 2008年11月04日 00:10:15 | barry | set | nosy:
+ barry messages: + msg75482 |
| 2008年10月31日 08:37:41 | amaury.forgeotdarc | set | nosy:
+ loewis messages: + msg75409 |
| 2008年10月31日 01:46:41 | vstinner | set | messages: + msg75405 |
| 2008年10月31日 01:44:40 | vstinner | set | files:
+ pymodule_create2.patch messages: + msg75404 |
| 2008年10月31日 01:24:26 | vstinner | set | files:
+ interactive_cleanup.patch keywords: + patch messages: + msg75403 |
| 2008年10月31日 01:10:25 | vstinner | set | nosy:
+ vstinner messages: + msg75402 |
| 2008年10月30日 01:03:51 | christian.heimes | set | nosy:
+ christian.heimes messages: + msg75347 |
| 2008年10月30日 00:59:13 | benjamin.peterson | link | issue4226 superseder |
| 2008年10月30日 00:57:45 | amaury.forgeotdarc | create | |