On Sunday, October 29, 2017, Paul Moore
On 29 October 2017 at 10:40, Stephan Houben
javascript:;> wrote: Perhaps slightly off-topic, but I have sometimes wondered if pip could not be made somewhat friendlier for the absolute newbie and the classroom context.
Some concrete proposals.
1. Add a function `pip` to the interactive interpreter (similar to how `help` is available).
def pip(args): import sys import subprocess subprocess.check_call([sys.executable, "-m", "pip"] + args.split())
This allows people to install something using pip as long as they have a Python prompt open, and avoids instructors to have to deal with platform-specific instructions for various shells. Also avoids confusion when multiple Python interpreters are available (it operates in the context of the current interpreter.)
There are subtle issues around whether newly installed/upgraded packages are visible in a running Python interpreter.
If the package is already imported, reload() isn't sufficient; but deepreload from IPython may be. IPython also supports shell commands prefixed with '!': ! pip install -U requests regex IPython ! pip install -U --user psfblessedset1 %run pip install -U --user psfblessedset1 %run? % autoreload? # http://ipython.readthedocs.io/en/stable/config/extensions/autoreload.html This:
It's possible that this would result in *more* confusion than the current situation.
Why isn't it upgrading over top of the preinstalled set? At least with bash, the shell command history is logged to .bash_history by default. IMO, it's easier to assume that environment-modifying commands are logged in the shell log; and that running a ``%logstart -o logged-cmds.py`` won't change the versions of packages it builds upon. Is it bad form to put ``! pip install -U requests `` at the top of every jupyter notebook? ``! pip install requests==version `` is definitely more reproducible. (seeAlso: binder, jupyter/docker-stacks) I'll just include these here unnecessarily from the other curated package set discussions: https://github.com/jupyter/docker-stacks https://github.com/Kaggle/docker-python/blob/master/Dockerfile https://binderhub.readthedocs.io/en/latest/ I can see the appeal of something like this, but it's not as simple as
it looks. If you want to discuss this further, I'd definitely suggest making it a thread of its own.
Personally, as a pip maintainer, I'm -0 on this (possibly even -1).
Same.