[Python-ideas] install pip packages from Python prompt

Terry Reedy tjreedy at udel.edu
Tue Oct 31 18:50:10 EDT 2017

On 10/31/2017 12:21 PM, Ivan Levkivskyi wrote:
> I think it was proposed several times before, but I just wanted to 
> revive the idea that we could add
> a GUI interface to install/update packages from IDLE (maybe even with 
> some package browser).

https://bugs.python.org/issue23551.  I agreed with and still agree with 
Raymond's opening message in Feb 2015:
"In teaching Python, I find that many Windows users are command-line 
challenged and have difficulties using and accessing PIP. ... I would 
love to be able to start a class with a fresh Python download from 
python.org and effortlessly install requests and other tools without 
users having to fire-up a terminal window and wrestle with the various 

The one change I made in Raymond's proposal is that instead of having 
multiple IDLE menu entries tied to multiple IDLE functions invoking 
multiple pip functions, there would be one IDLE menu entry, perhaps 
'Help => Install packages' (plural intentional), that would invoke a 
standalone tkinter based gui front-end to pip.  'Standalone' means no 
dependency on IDLE code.  I don't think every IDE or app should *have 
to* write its own gui.  Plus, a standalone tkinter module could be 
invoked from a command line with 'python -m pipgui' or invoked from 
interactive python with 'import pipgui; pipgui.main()'.

In April 2016, after posting the idea to pydev list and getting 'go 
ahead's from Nick Coughlin and someone else, with no negatives, I 
approved Upendra Kumar's GSOC proposal to write a pip gui.  This was 
https://bugs.python.org/issue27051.  On June 20, Ned Deily and Nick 
Coughlin vetoed adding a pip gui anywhere in the stdlib since it 
depended on something not in the stdlib, and perhaps for other reasons I 
don't fully understand.

Looking back, I can see that I made two mistakes.

The first was proposing to use the public-looking pip.main after 
importing pip.  It is actually intended to be private (and should have 
been named '_main' to make that clearer).  As it turns out, the extra 
work of accessing pip through the intended command line interface (via
subprocess) is necessary anyway since running pip makes changes to the 
in-memory modules that are not reset when .main is called again.  So it 
might as well be used for every access.

The second was not requiring an approved PEP before proceeding to actual 

Terry Jan Reedy

More information about the Python-ideas mailing list