You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Discussion on another issue suggested that 3.x idlelib.__main__ be backported to 2.7 so 'python -m idlelib would work with 2.7 as with 3.x. The current file:
"""
IDLE main entry point
Run IDLE as python -m idlelib
"""
import idlelib.PyShell
idlelib.PyShell.main()
When I tried this, it failed two ways.
The AutoComplete and CallTips extensions did not import properly. The error messages are printed from the except clause in EditorWindow.load_standard_extensions. I presume this call results from "import EditorWindow" in PyShell.
Failed to load extension 'AutoComplete'
Traceback (most recent call last):
File "C:\Programs\Python27\lib\idlelib\EditorWindow.py", line 1068, in load_standard_extensionsself.load_extension(name)
File "C:\Programs\Python27\lib\idlelib\EditorWindow.py", line 1083, in load_extensioncls=getattr(mod, name)
AttributeError: 'module' object has no attribute 'AutoComplete'
Somehow AutoComplete was imported without an ImportError even though the class AutoComplete statement did not create the class asstribute.
AutoComplete and CallTips are the two extensions containing "import __main__". Adding idlelib.__main__ somehow causes weird behavior in 2.7, though not in 3.x. Commenting out these imports removes the import problem.
Even with 1 temporarily fixed with '#', an unsaved file 'named' C:\users\terry\NNNNN.py is open in an editor window. ("Unsaved' and'named' areusually mutually exclusive.) Two shell windows, instead of one, are opened. One fails to connect to a subprocess. Clicking away the message box raises SystemExit.
Changing __main__.py to ...
from idlelib.PyShell import *
main()
had no effect.
I will add a reference to this issue in the file. (If should be removed if this issue is fixed.)
The idea, obviously, is for python -m idlelib to also work on all systems. When this was requested as part of the discussion on another issue, I thought there was no idlelib.__main__ because __main__ did not work on 2.7. Someone corrected me and the expectation of me and others was that the absence was just an easily corrected oversight. Turns out not so. I wanted to at least document that the backport is not trivial. I am rather curious why the same code behaves so differently on 2.7.
bpo-27099 converts extensions, including autocomplete and calltips, to features. Buggy versions of the patch had similar import problems. After the PR is merged, I may try this again, and perhaps try moving the __main__ import into the functions that use it.
Activity
terryjreedy commentedon May 16, 2015
Discussion on another issue suggested that 3.x idlelib.__main__ be backported to 2.7 so 'python -m idlelib would work with 2.7 as with 3.x. The current file:
"""
IDLE main entry point
Run IDLE as python -m idlelib
"""
import idlelib.PyShell
idlelib.PyShell.main()
When I tried this, it failed two ways.
Somehow AutoComplete was imported without an ImportError even though the class AutoComplete statement did not create the class asstribute.
AutoComplete and CallTips are the two extensions containing "import __main__". Adding idlelib.__main__ somehow causes weird behavior in 2.7, though not in 3.x. Commenting out these imports removes the import problem.
Changing __main__.py to ...
from idlelib.PyShell import *
main()
had no effect.
I will add a reference to this issue in the file. (If should be removed if this issue is fixed.)
python-dev commentedon May 16, 2015
New changeset 44fc6db34b69 by Terry Jan Reedy in branch '3.4':
Issue bpo-24212: Put reference in idle.__main__ to issue with explanation.
https://hg.python.org/cpython/rev/44fc6db34b69
serhiy-storchaka commentedon May 17, 2015
Why idlelib.__main__ should be backported? You can start IDLE as "python -m idlelib.idle" in 2.7 and this works as well in 3.x.
terryjreedy commentedon May 17, 2015
The idea, obviously, is for python -m idlelib to also work on all systems. When this was requested as part of the discussion on another issue, I thought there was no idlelib.__main__ because __main__ did not work on 2.7. Someone corrected me and the expectation of me and others was that the absence was just an easily corrected oversight. Turns out not so. I wanted to at least document that the backport is not trivial. I am rather curious why the same code behaves so differently on 2.7.
terryjreedy commentedon Jun 19, 2017
I am no longer patching IDLE for 2.7.
terryjreedy commentedon Jun 19, 2017
I wanted this for the same reason you backported test.__main__ in bpo-30223, but I'm not going to fix the problems.
terryjreedy commentedon Sep 1, 2017
bpo-27099 converts extensions, including autocomplete and calltips, to features. Buggy versions of the patch had similar import problems. After the PR is merged, I may try this again, and perhaps try moving the __main__ import into the functions that use it.
StanFromIreland commentedon Feb 9, 2025
cpython/Lib/idlelib/__main__.py
Line 8 in 8f9c6fa
Should this be updated to the github issue no #68400? Or this comment can just be removed as 2.7 is long gone.
terryjreedy commentedon Feb 9, 2025
Remove comment.
StanFromIreland commentedon Feb 9, 2025
Complete.
gh-68400: Remove outdated 2.7 comment (#129919)
pythongh-68400: Remove outdated 2.7 comment (pythonGH-129919)
pythongh-68400: Remove outdated 2.7 comment (pythonGH-129919)
[3.12] gh-68400: Remove outdated 2.7 comment (GH-129919) (#129938)
[3.13] gh-68400: Remove outdated 2.7 comment (GH-129919) (#129937)