[Python-ideas] Migration of /usr/bin/python to python3

Ian Lee ianlee1521 at gmail.com
Wed Mar 11 23:45:15 CET 2015


Sure, and I agree that called "ipython2" / "ipython3" explicitly is better.
I just expected it would default to use whatever "python" is implicitly on
my path. E.g. that "python" and "ipython" would use the same interpreter.

~ Ian Lee
On Mar 11, 2015 3:29 PM, "Andrew Barnert" <abarnert at yahoo.com> wrote:

> On Mar 11, 2015, at 2:52 PM, Ian Lee <ianlee1521 at gmail.com> wrote:
>
> +1
>
> An issue that I've noticed recently (I haven't had the time to fully track
> this one down yet, but I suspect it's a setuptools issue) takes a "last one
> wins" approach to scripts that get written into the same bin directory
> (e.g. --user installs).
>
>
> Many packages will install spamX and spamX.Y scripts as well as plain
> spam, so you can deal with this the same way you deal with Python
> instead--run ipython3 or ipython3.4 instead of just ipython. (Not to
> mention ipython_pypy3!) Also, sometimes python2 and python3 will install to
> different directories (/usr for the one that's part of the system,
> /usr/local for others, or /Library/Framework/Python/Versions/X.Y/bin...),
> so "last one wins" isn't even predictable cross-platform; you have to be
> able to deal with either "last one wins" or "controlled by PATH" when you
> want to just run "ipython". But really, since these scripts don't need to
> be run by a shbang or other automated mechanism, and the user who
> intentionally installs IPython for both 2.7 and 3.4 is going to need some
> way to manually select the one they want to run each time anyway. So I
> think this solution isn't too bad: 90% of the time, a script is only
> installed for one Python version so "last one wins" works trivially; most
> of the rest of the time, the user has two or more and needs to use
> "ipython2" vs. "ipython3" rather than just "ipython" because how else could
> be use both as desired, so "last one wins" is irrelevant.The thing is, I
> don't think you get this script versioning automatically from setuptools.
> If you don't, maybe you should?
>
>
> $ python2.7 -m pip install --user ipython
>>
>> $ head -n1 ~/.local/bin/ipython*
>> ==> /home/ianlee1521/.local/bin/ipython <==
>> #!/usr/bin/python2.7
>>
>> ==> /home/ianlee1521/.local/bin/ipython2 <==
>> #!/usr/bin/python2.7
>>
>> $ python3.4 -m pip install --user ipython
>>
>> $ head -n1 ~/.local/bin/ipython*
>> ==> /home/ianlee1521/.local/bin/ipython <==
>> #!/usr/bin/python3.4
>>
>> ==> /home/ianlee1521/.local/bin/ipython2 <==
>> #!/usr/bin/python2.7
>>
>> ==> /home/ianlee1521/.local/bin/ipython3 <==
>> #!/usr/bin/python3.4
>
>
> So the packages end up in the separate, versioned directories
> (~/.local/lib/pythonX.Y/site-packages), but with the scripts ending up in
> the same bin directory, the implicit script "~/.local/bin/ipython" ends up
> changing to use the hashbang of the Python version which last installed the
> package (see highlighted above).
>
> I would expect that the implicit script ("~/.local/bin/ipython") should
> use the implicit python version, e.g. "#!/usr/bin/python".
>
> Alternatively, maybe I just shouldn't ever be installing user versions of
> both Python 2 and Python 3 versions of a package.
>
>
>
> ~ Ian Lee
>
> On Wed, Mar 11, 2015 at 1:38 PM, M.-A. Lemburg <mal at egenix.com> wrote:
>
>> On 11.03.2015 21:03, David Mertz wrote:
>> > https://www.python.org/dev/peps/pep-0394/
>>
>> I think the migration should start with modifying scripts to use
>>
>> #!/usr/bin/env python2
>>
>> when they are Python 2 only (*) and
>>
>> #!/usr/bin/env python3
>>
>> when they are Python 3 only and
>>
>> #!/usr/bin/env python
>>
>> only when they support both Python 2 and 3.
>>
>> "Explicit is better than implicit" and all that Zen :-)
>>
>> Once that's done, switching the symlink is really a no-brainer.
>>
>> The recipe for this is easy too:
>>
>> 1. replace all "#!/usr/bin/env python" with "#!/usr/bin/env python2"
>> 2. migrate your scripts one by one to either Python 3.x or
>>    to Python 2.7 + 3.4+
>> 3. after migration replace "#!/usr/bin/env python2" with
>>    "#!/usr/bin/env python3" or "#!/usr/bin/env python" resp.
>>
>> (*) Some OSes may require to use python2.7, if they don't come
>> with a symlink from python2 -> python2.7.
>>
>> --
>> Marc-Andre Lemburg
>> eGenix.com
>>
>> Professional Python Services directly from the Source  (#1, Mar 11 2015)
>> >>> Python Projects, Coaching and Consulting ...  http://www.egenix.com/
>> >>> mxODBC Plone/Zope Database Adapter ...       http://zope.egenix.com/
>> >>> mxODBC, mxDateTime, mxTextTools ...        http://python.egenix.com/
>> ________________________________________________________________________
>>
>> ::::: Try our mxODBC.Connect Python Database Interface for free ! ::::::
>>
>>    eGenix.com Software, Skills and Services GmbH  Pastor-Loeh-Str.48
>>     D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg
>>            Registered at Amtsgericht Duesseldorf: HRB 46611
>>                http://www.egenix.com/company/contact/
>> _______________________________________________
>> Python-ideas mailing list
>> Python-ideas at python.org
>> https://mail.python.org/mailman/listinfo/python-ideas
>> Code of Conduct: http://python.org/psf/codeofconduct/
>>
>
> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org
> https://mail.python.org/mailman/listinfo/python-ideas
> Code of Conduct: http://python.org/psf/codeofconduct/
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20150311/bef420ff/attachment-0001.html>


More information about the Python-ideas mailing list