LMSouq
general-dev Open

How to update-alternatives to Python 3 without breaking apt?

WI
Will
1 month ago
3 views
Problem Description
The other day I decided that I wanted the command python to default to firing up python3 instead of python2. So I did this: $ sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 2 $ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.5 3 $ sudo update-alternatives --config python $ sudo update-alternatives --config python There are 2 choices for the alternative python (providing /usr/bin/python). Selection Path Priority Status ------------------------------------------------------------ * 0 /usr/bin/python3.5 3 auto mode 1 /usr/bin/python2.7 2 manual mode 2 /usr/bin/python3.5 3 manual mode Press <enter> to keep the current choice[*], or type selection number: 0 And that all worked. Great! :) $ python -V Python 3.5.2 But it wasn't long before I realised I had broken apt/aptitude when it comes to installing and removing python packages because apt was expecting python2 it transpired. This is what happened. $ sudo apt remove python-samba Reading package lists... Done Building dependency tree Reading state information... Done The following package was automatically installed and is no longer required: samba-libs Use 'sudo apt autoremove' to remove it. The following packages will be REMOVED: python-samba 0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded. After this operation, 5,790 kB disk space will be freed. Do you want to continue? [Y/n] (Reading database ... 187285 files and directories currently installed.) Removing python-samba (2:4.3.11+dfsg-0ubuntu0.16.04.5) ... File "/usr/bin/pyclean", line 63 except (IOError, OSError), e: ^ SyntaxError: invalid syntax dpkg: error processing package python-samba (--remove): subprocess installed pre-removal script returned error exit status 1 Traceback (most recent call last): File "/usr/bin/pycompile", line 35, in <module> from debpython.version import SUPPORTED, debsorted, vrepr, \ File "/usr/share/python/debpython/version.py", line 24, in <module> from ConfigParser import SafeConfigParser ImportError: No module named 'ConfigParser' dpkg: error while cleaning up: subprocess installed post-installation script returned error exit status 1 Errors were encountered while processing: python-samba E: Sub-process /usr/bin/dpkg returned an error code (1) Eventually I guessed it wanted python2 as the default, so I undid my changes as follows: $ sudo update-alternatives --config python There are 2 choices for the alternative python (providing /usr/bin/python)....

AI-Generated Solution

Powered by LMSouq AI · GPT-4.1-mini

✓ Solution Ready
Analyzing problem and generating solution…
Was this solution helpful?
Back to Knowledge Base