Benjamin sent me this message separately(*) privately and I responded privately. Here is my response.
(*) or his mailer did On Sun, 22 Jul 2012 20:22:50 +0100, Oscar Benjamin <oscar.benja...@bristol.ac.uk> wrote: > On 22 July 2012 14:08, R. David Murray <rdmur...@bitdance.com> wrote: > > > On Sun, 22 Jul 2012 11:21:38 +0300, anatoly techtonik <techto...@gmail.com> > > wrote: > > > http://docs.python.org/py3k/howto/pyporting.html#during-installation > > > > > > What's the point in making implicit Python 3 check here: > > > try: # Python 3 > > > from distutils.command.build_py import build_py_2to3 as build_py > > > except ImportError: # Python 2 > > > from distutils.command.build_py import build_py > > > > > > instead of explicit check like: > > > import sys > > > if sys.version_info[0] >= 3: > > > from distutils.command.build_py import build_py_2to3 as build_py > > > > It's called testing for the thing that actually matters, rather than > > testing a constant with a much broader meaning. Yes, in this case the > > results are the same, but IMO it is better programming practice to test > > the thing that actually matters when you can. > > > I recently changed a setup.py from try/ImportError to an explicit > sys.version_info check. I'm not totally sure how to reproduce this but I > had a problem where I was installing into a 2.x virtualenv and it was > running 2to3 during install and subsequently failing to import the 3.x code > (the problem didn't occur when using the same python that generated the > virtualenv). > > I may be wrong but I imagined that sometimes build_py_2to3 is importable on > 2.x, perhaps for cross-building or something. In any case 'testing the > thing that matters' means testing what version of Python you are about to > install into not whether the python version supports running 2to3. I'm not familiar with distutils, really, so you could be right about what it is important to test. I was commenting based on the code snippet presented, which just deciding which "build" object to use. If build_py_2to3 can be imported by python2 and subsequently screws up the build, then yes the logic is incorrect. But I have to defer to the packaging people on that. (I wish I had time to help with packaging because it is important, but it doesn't seem like a sensible place for me personally to spend my currently available time.) --David _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com