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

Aaron Meurer asmeurer at gmail.com
Sun Aug 4 19:34:58 EDT 2013

I'm sending this email to the lists of three projects that I am
involved with that have this issue. Please reply-all to all the lists
you are on. Feel free to add in any other lists that have the same

As many of you may know, SymPy recently converted its codebase to a
single code base for Python 2 and Python 3. This, along with some of
the work I've done at Continuum with the conda package manager this
summer, has gotten me thinking about how we treat Python 3 when we
install our software.

In particular, we tend to install entry points that have a 3 suffix.
So for example, IPython installs ipython3. PuDB installs pudb3 (this
one was entirely my contribution, but I didn't know any better at the
time). SymPy is considering installing an isympy3.

I think this is bad for anyone who wants to use Python 3, because if
they install IPython (for example), they won't get "ipython", but
rather "ipython3". This makes Python 3, and anything installed in it,
a second class citizen, because the default "ipython" is always
pointing to Python 2.

Now, the reason that this was done is that the typical installation
uses a shared bin directory (generally /usr/bin/), so if you wanted to
install both Python 2 and Python 3 versions of the software, the entry
point in bin would be whatever was installed most recently.

If you use something like conda environments or virtualenvs, this
issue doesn't present itself, because you can only have one Python
installed in an environment at a time. In that situation, it is really
annoying to install IPython and not have "ipython" (it can also be
confusing, because if you prepend the environment to your PATH, typing
"ipython" will still point to some other Python 2 IPython installed
somewhere else). It's also annoying if you want to use only Python 3.

So I'm wondering what people think we should do about this. I
definitely think that it should be possible to install "ipython",
"pudb", and "isympy" entry points that point to Python 3. But should
that be the default? Should we keep the 3 suffixed versions for
backwards compatibility?

Aaron Meurer

More information about the IPython-dev mailing list