On November 9, 2015 at 6:17:41 AM, Oscar Benjamin (oscar.j.benja...@gmail.com) wrote: > On 9 November 2015 at 10:44, Wolfgang Maier > wrote: > > > > Something I miss in all the discussions taking place here is the fact that > > python -m pip is the officially documented way of invoking pip at > > https://docs.python.org/3/installing/index.html#basic-usage and it is not > > particularly helpful if that recommendation keeps changing back and forth. > > > > I know some people don't like the wordy invocation, but other people > > (including me) use and teach it because it works reliably. Just because a > > pip executable based invocation pattern looks better, I don't think it > > justifies the change. > > I also teach this invocation. Somehow you have to select the Python > version you're interested in and I really don't see why > > $ pip -p ./foo/bar/python ... > > is better than > > $ ./foo/bar/python -m pip ... > > I already need to explain to students how to ensure that their Python > executable is on PATH. Needing pip to be on PATH as well is just > another possible source of confusion (even if there's only one Python > installation). >
The primary difference is one of verbosity, particularly in common cases. You’ll have situations like: * I don’t care what version of Python something is being installed into, I just want to install it to use the CLI of some project that just happens to be written in python. ``pip install`` vs ``python -m pip install``. * I’ve already selected which version of Python should be used either via virtual environment, conda environment, or some other environment manager. ``pip install`` vs ``python -m pip install``. * I just want to install into the same thing as ``python3`` or ``python2`` or ``python3.3``. ``pip -3 install`` vs ``python3 -m pip install`` or ``pip -2 install`` vs ``python2 -m pip install`` or ``pip -3.3 install`` vs ``python3.3 -m pip install``. * I want to install into ``pypy``. ``pip -p peppy install`` vs ``pypy -m pip install``. * I want to install into ``./foo/bar/python``. ``pip -p ./foo/bar/python install`` vs ./foo/bar/python -m pip install``. I think the main thing this illustrates is that the ``pip -p`` version is nicer in the common scenarios like not caring what version of Python you’re installing into, having pre-selected the version of Python, or just wanting to install into a particular CPython of X or X.Y version [1]. It only really degrades into an equivalent invocation in the less common cases where you need to install into a non CPython interpreter or your interpreter isn’t one of ``pythonX`` or ``pythonX.Y`` on your path. Of course, the main benefit of ``python -m`` is that it’s a standard (within Python) interface and it already works and doesn’t require any backwards incompatibilities (except to possibly remove the ``pip`` or ``pipX.Y`` commands due to their footman-ish nature). It also delays the need to ensure that the distutils bindir is on $PATH (though you’ll quickly need to ensure it’s there anyways if you install anything that doesn’t use ``-m`` to be invoked). [1] This could be made better by shipping a ``py`` launcher on *nix too, which brings it down to ``py -3 -m pip`` which is still a bit longer than ``pip -3`` but is better than ``python3 -m pip``. ----------------- Donald Stufft PGP: 0x6E3CBCE93372DCFA // 7C6B 7C5D 5E2B 6356 A926 F04F 6E3C BCE9 3372 DCFA _______________________________________________ Distutils-SIG maillist - Distutils-SIG@python.org https://mail.python.org/mailman/listinfo/distutils-sig