[IPython-dev] [sympy] Treating Python 3 as a first-class citizen

Ondřej Čertík ondrej.certik at gmail.com
Mon Aug 5 14:32:03 EDT 2013

On Mon, Aug 5, 2013 at 4:04 AM, Thomas Kluyver <takowl at gmail.com> wrote:
> On 5 August 2013 06:51, Matthias Bussonnier <bussonniermatthias at gmail.com>
> wrote:
>> For what it is worth, I've already came into question on stackoverflow
>> where ipython was launching python3 and ipython2 was use to launch
>> ipython+python2.x.
> I'm guessing that would be Arch? They have the 'python' symlink pointing to
> Python 3, and a separate python2 executable.

I just found this very relevant PEP:


> Ondrej:
>> The standard way that Python is installed in Debian/Ubuntu is that
>> you have python3.2, python2.7, python2.6, python2.5, ..., and then you
>> have
>> "python", which is just a symlink, on my system it is:
> And a 'python3' symlink. On Debian based systems, the plan is to keep
> 'python' pointing to the latest Python 2 version ~forever, and python3 is
> being treated as a wholly separate thing.

I didn't know that. But it looks like you are right:


Though the PEP above says that eventually "python" should point to python 3.

>> As such, I think the "setup.py" install should simply install just one
>> ipython (or isympy, pudb),
> I think it's valuable to be able to start ipython for Python 3 or Python 2
> on the same system without having to specify paths or activate some kind of
> environment. Fixing the names to 'ipython' and 'ipython3' admittedly isn't
> ideal, but it's simple and mostly seems to work well.
> I think the biggest practical issue is that a Python 3 environment where you
> can start Python 3 with 'python' still gets 'ipython3' rather than
> 'ipython'. We could solve that by checking at installation whether
> sys.executable matches 'python(\d)', and copying the trailing digit. But
> that could also lead to confusion if you have a Python 3 environment with
> 'ipython' inside the environment and 'ipython3' outside it on the system
> (but still on PATH).

What is confusing to me is what is fundamentally different in Python 3.2,
as opposed to Python 2.5 or 2.6, when you have a single code base.
E.g. we do not bother with creating ipython2.5 and ipython2.6, so that they
can be run side by side, and people simply use virtualenv to run them
side by side.
So why cannot the same approach be used for Python 3.2?


More information about the IPython-dev mailing list