classification
Title: Idle, 2.7, backport idlelib.__main__, enable py -m idlelib
Type: behavior Stage: resolved
Components: IDLE Versions: Python 2.7
process
Status: closed Resolution: wont fix
Dependencies: Superseder:
Assigned To: terry.reedy Nosy List: Arfrever, python-dev, serhiy.storchaka, terry.reedy
Priority: normal Keywords:

Created on 2015-05-16 21:46 by terry.reedy, last changed 2017-09-01 12:26 by terry.reedy. This issue is now closed.

Messages (7)
msg243369 - (view) Author: Terry J. Reedy (terry.reedy) * (Python committer) Date: 2015-05-16 21:46
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.

1. 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_extensions
    self.load_extension(name)
  File "C:\Programs\Python27\lib\idlelib\EditorWindow.py", line 1083, in load_extension
    cls = 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.

2. 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.)
msg243373 - (view) Author: Roundup Robot (python-dev) (Python triager) Date: 2015-05-16 22:31
New changeset 44fc6db34b69 by Terry Jan Reedy in branch '3.4':
Issue #24212: Put reference in idle.__main__ to issue with explanation.
https://hg.python.org/cpython/rev/44fc6db34b69
msg243385 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2015-05-17 05:30
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.
msg243409 - (view) Author: Terry J. Reedy (terry.reedy) * (Python committer) Date: 2015-05-17 15:36
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.
msg296379 - (view) Author: Terry J. Reedy (terry.reedy) * (Python committer) Date: 2017-06-19 21:42
I am no longer patching IDLE for 2.7.
msg296384 - (view) Author: Terry J. Reedy (terry.reedy) * (Python committer) Date: 2017-06-19 22:22
I wanted this for the same reason you backported test.__main__ in #30223, but I'm not going to fix the problems.
msg301095 - (view) Author: Terry J. Reedy (terry.reedy) * (Python committer) Date: 2017-09-01 12:26
#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.
History
Date User Action Args
2017-09-01 14:00:34terry.reedyunlinkissue31319 superseder
2017-09-01 12:26:22terry.reedysetmessages: + msg301095
2017-09-01 07:11:42serhiy.storchakalinkissue31319 superseder
2017-06-19 22:22:37terry.reedysetmessages: + msg296384
2017-06-19 21:42:32terry.reedysetstatus: open -> closed
messages: + msg296379

assignee: terry.reedy
components: + IDLE
resolution: wont fix
stage: needs patch -> resolved
2015-05-19 08:09:15Arfreversetnosy: + Arfrever
2015-05-17 15:36:12terry.reedysetmessages: + msg243409
2015-05-17 05:30:58serhiy.storchakasetnosy: + serhiy.storchaka
messages: + msg243385
2015-05-16 22:31:57python-devsetnosy: + python-dev
messages: + msg243373
2015-05-16 21:46:53terry.reedycreate