Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"Proper way" to manage multiple versions of Python on archlinux

Tags:

So I have read this - https://wiki.archlinux.org/index.php/Python

And it is clear from this wiki that I can install Python 2.7.2 via

pacman -S python2 

Is it reasonable for me to create a symlink to python2

ln -s python2 /usr/bin/python 

if I don't forsee myself switching to python 3.0 any time soon? Or is there a better way of managing multiple python versions like what I usually use on a debian system (update-alternatives --config python) or on a mac os x system (python select)?

CLARIFICATION:

  • What I am trying to find out is - what is the "best practice" of managing various python versions on an archlinux system?
  • I am new to archlinux but familiar with ubuntu, debian and mac os x
like image 582
Calvin Cheng Avatar asked Sep 04 '11 02:09

Calvin Cheng


People also ask

How do I manage multiple versions of Python in Linux?

Install that version using "make install". Install all other versions using "make altinstall". For example, if you want to install Python 2.5, 2.6 and 3.0 with 2.6 being the primary version, you would execute "make install" in your 2.6 build directory and "make altinstall" in the others.

Can I have several versions of Python?

If you wish to use multiple versions of Python on a single machine, then pyenv is a commonly used tool to install and switch between versions. This is not to be confused with the previously mentioned depreciated pyvenv script. It does not come bundled with Python and must be installed separately.

How do I switch between Python versions?

Yes, you should be able to switch between python versions. As a standard, it is recommended to use the python3 command or python3. 7 to select a specific version. The py.exe launcher will automatically select the most recent version of Python you've installed.


2 Answers

I would argue you shouldn't create any symlinks like this at all. Especially if you are going to distribute some of your python code, you should not assume a user has python2 or python3 at /usr/bin/python.

If your script requires python2, just use:

#!/usr/bin/env python2 

If your script requires python3, use:

#!/usr/bin/env python3 

This way your scripts will work fine even through updates to Python. It will also be much more clear what version your script actually needs.

like image 72
houbysoft Avatar answered Oct 22 '22 22:10

houbysoft


Most unices already have a /usr/bin/python. Overwriting that one is a bad idea, as this is the Python version used by all packages in the system, and changing that one may break them. When installing the Python 2.7 package the executable should be installed as /usr/bin/python2.7 (if not I would claim Archlinux is broken) and it's better to use that when you want to run Python 2.7.

Archlinux is a bit special, since it will use /usr/bin/python for Python 3, despite the default executable name for Python 3 being /usr/bin/python3. This is confusing and can be seen as a bug, but it does mean you can't use that symlink for Python 2, as any other Archlinux script that uses Python 3 will almost certainly break if you do.

So where on other Unices, symlinking /usr/bin/python to Python 2.7 is a bad idea, on Archlinux it is a terrible idea. Instead just install all version you need and call them with /usr/bin/pythonX.X.

like image 32
Lennart Regebro Avatar answered Oct 22 '22 22:10

Lennart Regebro