[Python-modules-team] Bug#815631: sphinx: Use alternatives to provide scripts under /usr/bin

Kevin Murray kevin at kdmurray.id.au
Tue Feb 23 12:24:40 UTC 2016


Hi Dmitry,

Thanks for your advice.

On 10:19 23/02, Dmitry Shachnev wrote:
> Hi Kevin,
> 
> On Tue, Feb 23, 2016 at 02:34:11PM +1100, Kevin Murray wrote:
> > I have recently needed to use a python3-only sphinx build process on a
> > system with both python-sphinx & python3-sphinx co-installed. IMHO
> > co-installation could be a little cleaner and easier if sphinx:
> > 
> > - Used update-alternatives to provide /usr/bin/sphinx-* in a
> >   configurable way. (e.g similar to how docutils handles this problem). This
> >   could use the current script installation path under
> >   /usr/share/sphinx/scripts/python*/
> 
> Let me quote Jakub Wilk, who wrote the current implementation:
> 
>   The alternatives mechanism is only suitable if both commands are compatible,
>   i.e. their behavior doesn't vary with Python version. This is the case for
>   rst2html and friends, but no so much for sphinx-build. The problem is that
>   sphinx-build can import 3rd-party Python code, which is not necessarily
>   compatible with both Python 2 and 3.
> 

Ah, that's something I didn't consider. Good point.

> > - Or, installed binaries under /usr/bin with the suffix '3', i.e. install
> >   /usr/bin/sphinx-build3. (modelled after pip/pip3 & nosetests/nosetests3
> >   and other similar examples)
> 
> The name of sphinx-build command is hardcoded in too many places (i.e. the
> Makefiles generated by Sphinx use it). Also, I don't much like the foo/foo3
> naming because there is a better way: pythonX[.Y] -m sphinx allows one to
> call sphinx-build with *any* Python version (not necessarily the default one).
> 

Ah yes, that's true about hardcoding. This is actually why I need this:
hardcoded occurrences of sphinx-build in makefiles that aren't in python
projects but use (and only work with) python3 packages. And thanks for the tip
about python -m sphinx, I hadn't considered that. Though for the current use
case still means patching a makefile, in which case I'll just include the full
path to the installed script under /usr/share/sphinx.

> > - Or, a combination of both these, where python-sphinx and
> >   python3-sphinx install /usr/bin/sphinx-*{2,3} respectively, and
> >   update-alternatives is used to provide /usr/bin/sphinx-* without
> >   prefix.
> 
> See above.
> 
> > P.S., I know one can always do /usr/share/sphinx/scripts/python3/sphinx-build
> > as a workaround.
> 
> What is exactly your problem? Does Python 2 sphinx not work with your code?
> Can you use python3 -m sphinx there? Or maybe use setuptools' build_sphinx
> command?

The problem was to use python3-sphinx from a Makefile (not an auto-generated
sphinx-quickstart one) without patching the makefile. Given your descriptions
above, I think that there are better ways of solving this problem than what I
proposed.

*However*, there is a supplementary issue: AFAICT, which package provides the
/usr/bin/sphinx-* scripts depends on the order of installation. To me this
sounds a little off, but I'm not sure. What is your opinion of this?


Cheers,
K


---
Kevin Murray
0xA4B4EE6A
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.alioth.debian.org/pipermail/python-modules-team/attachments/20160223/fc4a6b2f/attachment.sig>


More information about the Python-modules-team mailing list