<div dir="auto"><div><div class="gmail_extra"><div class="gmail_quote">On Oct 30, 2017 8:57 PM, "Alex Walters" <<a href="mailto:tritium-list@sdamon.com">tritium-list@sdamon.com</a>> wrote:<br type="attribution"><blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="quoted-text"><br>
<br>
> -----Original Message-----<br>
> From: Python-ideas [mailto:<a href="mailto:python-ideas-bounces%2Btritium-">python-ideas-bounces+<wbr>tritium-</a><br>
> list=<a href="mailto:sdamon.com@python.org">sdamon.com@python.org</a>] On Behalf Of Erik Bray<br>
> Sent: Monday, October 30, 2017 6:28 AM<br>
> To: Python-Ideas <<a href="mailto:python-ideas@python.org">python-ideas@python.org</a>><br>
> Subject: Re: [Python-ideas] install pip packages from Python prompt<br>
><br>
</div><div class="quoted-text">> On Sun, Oct 29, 2017 at 8:45 PM, Alex Walters <<a href="mailto:tritium-list@sdamon.com">tritium-list@sdamon.com</a>><br>
> wrote:<br>
> > Then those users have more fundamental problems.  There is a minimum<br>
> level<br>
> > of computer knowledge needed to be successful in programming.<br>
> Insulating<br>
> > users from the reality of the situation is not preparing them to be<br>
> > successful.  Pretending that there is no system command prompt, or shell,<br>
> or<br>
> > whatever platform specific term applies, only hurts new programmers.<br>
> Give<br>
> > users an error message they can google, and they will be better off in the<br>
> > long run than they would be if we just ran pip for them.<br>
><br>
> While I completely agree with this in principle, I think you<br>
> overestimate the average beginner.<br>
<br>
</div>Nope.  I totally get that they don’t know what a shell or command prompt is.  THEY. NEED. TO. LEARN.  Hiding it is not a good idea for anyone.  If this is an insurmountable problem for the newbie, maybe they really shouldn’t be attempting to program.  This field is not for everyone.</blockquote></div></div></div><div dir="auto"><br></div><div dir="auto">Reading this I get the impression, and correct me if I'm wrong, that you've never taught beginners programming. Of course long term (heck in fact fairly early on) they need to learn these nitty-gritty and sometimes frustrating lessons, but not in a 2 hour intro to programming for total beginners. </div><div dir="auto"><br></div><div dir="auto">And I beg to differ--this field is for everyone, and increasingly moreso every day. Doesn't mean it's easy, but it is and can be for everyone. </div><div dir="auto"><br></div><div dir="auto">Whether this specific proposal is technically feasible in a cross-platform manner with the state of the Python interpreter and import system is another question. But that's a discussion worth having. "Some people aren't cut out for programming" isn't. </div><div dir="auto"><br></div><div dir="auto"><br></div><div dir="auto"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="elided-text">
>  Many beginners I've taught or<br>
> helped, even if they can manage to get to the correct command prompt,<br>
> often don't even know how to run the correct Python.  They might often<br>
> have multiple Pythons installed on their system--maybe they have<br>
> Anaconda, maybe Python installed by homebrew, or a Python that came<br>
> with an IDE like Spyder.  If they're on OSX often running "python"<br>
> from the command prompt gives the system's crippled Python 2.6 and<br>
> they don't know the difference.<br>
><br>
> One thing that has been a step in the right direction is moving more<br>
> documentation toward preferring running `python -m pip` over just<br>
> `pip`, since this often has a better guarantee of running `pip` in the<br>
> Python interpreter you intended.  But that still requires one to know<br>
> how to run the correct Python interpreter from the command-line (which<br>
> the newbie double-clicking on IDLE may not even have a concept of...).<br>
><br>
> While I agree this is something that is important for beginners to<br>
> learn (e.g. print(sys.executable) if in doubt), it *is* a high bar for<br>
> many newbies just to install one or two packages from pip, which they<br>
> often might need/want to do for whatever educational pursuit they're<br>
> following (heck, it's pretty common even just to want to install the<br>
> `requests` module, as I would never throw `urllib` at a beginner).<br>
><br>
> So while I don't think anything proposed here will work technically, I<br>
> am in favor of an in-interpreter pip install functionality.  Perhaps<br>
> it could work something like this:<br>
><br>
> a) Allow it *only* in interactive mode:  running `pip(...)` (or<br>
> whatever this looks like) outside of interactive mode raises a<br>
> `RuntimeError` with the appropriate documentation<br>
> b) When running `pip(...)` the user is supplied with an interactive<br>
> prompt explaining that since installing packages with `pip()` can<br>
> result in changes to the interpreter, it is necessary to restart the<br>
> interpreter after installation--give them an opportunity to cancel the<br>
> action in case they have any work they need to save.  If they proceed,<br>
> install the new package then restart the interpreter for them.  This<br>
> avoids any ambiguity as to states of loaded modules before/after pip<br>
> install.<br>
> > From: Stephan Houben [mailto:<a href="mailto:stephanh42@gmail.com">stephanh42@gmail.com</a>]<br>
> > Sent: Sunday, October 29, 2017 3:43 PM<br>
> > To: Alex Walters <<a href="mailto:tritium-list@sdamon.com">tritium-list@sdamon.com</a>><br>
> > Cc: Python-Ideas <<a href="mailto:python-ideas@python.org">python-ideas@python.org</a>><br>
> > Subject: Re: [Python-ideas] install pip packages from Python prompt<br>
> ><br>
> ><br>
> ><br>
> > Hi Alex,<br>
> ><br>
> ><br>
> ><br>
> > 2017-10-29 20:26 GMT+01:00 Alex Walters <<a href="mailto:tritium-list@sdamon.com">tritium-list@sdamon.com</a>>:<br>
> ><br>
> >         return “Please run pip from your system command prompt”<br>
> ><br>
> ><br>
> ><br>
> ><br>
> ><br>
> > The target audience for my proposal are people who do not know<br>
> ><br>
> > which part of the sheep the "system command prompt" is.<br>
> ><br>
> > Stephan<br>
> ><br>
> ><br>
> ><br>
> ><br>
> ><br>
> > From: Python-ideas<br>
> > [mailto:<a href="mailto:python-ideas-bounces%2Btritium-list">python-ideas-bounces+<wbr>tritium-list</a>=<a href="mailto:sdamon.com@python.org">sdamon.com@<wbr>python.org</a>] On<br>
> Behalf<br>
> > Of Stephan Houben<br>
> > Sent: Sunday, October 29, 2017 3:19 PM<br>
> > To: Python-Ideas <<a href="mailto:python-ideas@python.org">python-ideas@python.org</a>><br>
> > Subject: [Python-ideas] install pip packages from Python prompt<br>
> ><br>
> ><br>
> ><br>
> > Hi all,<br>
> ><br>
> > Here is in somewhat more detail my earlier proposal for<br>
> ><br>
> > having in the interactive Python interpreter a `pip` function to<br>
> ><br>
> > install packages from Pypi.<br>
> ><br>
> > Motivation: it appears to me that there is a category of newbies<br>
> ><br>
> > for which "open a shell and do `pip whatever`" is a bit too much.<br>
> ><br>
> > It would, in my opinion, simplify things a bit if they could just<br>
> ><br>
> > copy-and-paste some text into the Python interpreter and have<br>
> ><br>
> > some packages from pip installed.<br>
> ><br>
> > That would simplify instructions on how to install package xyz,<br>
> ><br>
> > without going into the vagaries of how to open a shell on various<br>
> ><br>
> > platforms, and how to get to the right pip executable.<br>
> ><br>
> > I think this could be as simple as:<br>
> ><br>
> >   def pip(args):<br>
> >       import sys<br>
> >       import subprocess<br>
> >       subprocess.check_call([sys.<wbr>executable, "-m", "pip"] + args.split())<br>
> ><br>
> >       print("Please re-start Python now to use installed or upgraded<br>
> > packages.")<br>
> ><br>
> > Note that I added the final message about restarting the interpreter<br>
> ><br>
> > as a low-tech solution to the problem of packages being already<br>
> ><br>
> > imported in the current Python session.<br>
> ><br>
> > I would imagine that the author of package xyz would then put on<br>
> ><br>
> > their webpage something like:<br>
> ><br>
> >   To use, enter in your Python interpreter:<br>
> ><br>
> >      pip("install xyz --user")<br>
> ><br>
> > As another example, consider prof. Baldwin from Woolamaloo university<br>
> ><br>
> > who teaches a course "Introductory Python programming for Sheep<br>
> Shavers".<br>
> ><br>
> > In his course material, he instructs his students to execute the<br>
> ><br>
> > following line in their Python interpreter.<br>
> ><br>
> >    pip("install woolamaloo-sheepshavers-<wbr>goodies --user")<br>
> ><br>
> > which will install a package which will in turn, as dependencies,<br>
> ><br>
> > pull in a number of packages which are relevant for sheep shaving but<br>
> ><br>
> > which have nevertheless irresponsibly been left outside the stdlib.<br>
> ><br>
> > Stephan<br>
> ><br>
> ><br>
> ><br>
> ><br>
> ><br>
> ><br>
> ><br>
> ><br>
> > ______________________________<wbr>_________________<br>
> > Python-ideas mailing list<br>
> > <a href="mailto:Python-ideas@python.org">Python-ideas@python.org</a><br>
> > <a href="https://mail.python.org/mailman/listinfo/python-ideas" rel="noreferrer" target="_blank">https://mail.python.org/<wbr>mailman/listinfo/python-ideas</a><br>
> > Code of Conduct: <a href="http://python.org/psf/codeofconduct/" rel="noreferrer" target="_blank">http://python.org/psf/<wbr>codeofconduct/</a><br>
> ><br>
> ______________________________<wbr>_________________<br>
> Python-ideas mailing list<br>
> <a href="mailto:Python-ideas@python.org">Python-ideas@python.org</a><br>
> <a href="https://mail.python.org/mailman/listinfo/python-ideas" rel="noreferrer" target="_blank">https://mail.python.org/<wbr>mailman/listinfo/python-ideas</a><br>
> Code of Conduct: <a href="http://python.org/psf/codeofconduct/" rel="noreferrer" target="_blank">http://python.org/psf/<wbr>codeofconduct/</a><br>
<br>
</div></blockquote></div><br></div></div></div>