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

前端 未结 4 447
忘掉有多难
忘掉有多难 2020-12-01 03:01

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-alternative         


        
相关标签:
4条回答
  • 2020-12-01 03:15

    replace

    [bash:~] $ sudo update-alternatives --install /usr/bin/python python \
    /usr/bin/python2.7 2
    
    [bash:~] $ sudo update-alternatives --install /usr/bin/python python \
    /usr/bin/python3.5 3
    

    with

    [bash:~] $ sudo update-alternatives --install /usr/local/bin/python python \
    /usr/bin/python2.7 2
    
    [bash:~] $ sudo update-alternatives --install /usr/local/bin/python python \
    /usr/bin/python3.5 3
    

    e.g. installing into /usr/local/bin instead of /usr/bin.

    and ensure the /usr/local/bin is before /usr/bin in PATH.

    i.e.

    [bash:~] $ echo $PATH
    /usr/local/bin:/usr/bin:/bin
    

    Ensure this always is the case by adding

    export PATH=/usr/local/bin:$PATH
    

    to the end of your ~/.bashrc file. Prefixing the PATH environment variable with custom bin folder such as /usr/local/bin or /opt/<some install>/bin is generally recommended to ensure that customizations are found before the default system ones.

    0 讨论(0)
  • 2020-12-01 03:23

    As I didn't want to break anything, I did this to be able to use newer versions of Python3 than Python v3.4 :

    $ sudo update-alternatives --install /usr/local/bin/python3 python3 /usr/bin/python3.6 1
    update-alternatives: using /usr/bin/python3.6 to provide /usr/local/bin/python3 (python3) in auto mode
    $ sudo update-alternatives --install /usr/local/bin/python3 python3 /usr/bin/python3.7 2
    update-alternatives: using /usr/bin/python3.7 to provide /usr/local/bin/python3 (python3) in auto mode
    $ update-alternatives --list python3
    /usr/bin/python3.6
    /usr/bin/python3.7
    $ sudo update-alternatives --config python3
    There are 2 choices for the alternative python3 (providing /usr/local/bin/python3).
    
      Selection    Path                Priority   Status
    ------------------------------------------------------------
    * 0            /usr/bin/python3.7   2         auto mode
      1            /usr/bin/python3.6   1         manual mode
      2            /usr/bin/python3.7   2         manual mode
    
    Press enter to keep the current choice[*], or type selection number: 1
    update-alternatives: using /usr/bin/python3.6 to provide /usr/local/bin/python3 (python3) in manual mode
    $ ls -l /usr/local/bin/python3 /etc/alternatives/python3 
    lrwxrwxrwx 1 root root 18 2019-05-03 02:59:03 /etc/alternatives/python3 -> /usr/bin/python3.6*
    lrwxrwxrwx 1 root root 25 2019-05-03 02:58:53 /usr/local/bin/python3 -> /etc/alternatives/python3*
    
    0 讨论(0)
  • 2020-12-01 03:29

    Per Debian policy, python refers to Python 2 and python3 refers to Python 3. Don't try to change this system-wide or you are in for the sort of trouble you already discovered.

    Virtual environments allow you to run an isolated Python installation with whatever version of Python and whatever libraries you need without messing with the system Python install.

    With recent Python 3, venv is part of the standard library; with older versions, you might need to install python3-venv or a similar package.

    $HOME~$ python --version
    Python 2.7.11
    
    $HOME~$ python3 -m venv myenv
    ... stuff happens ...
    
    $HOME~$ . ./myenv/bin/activate
    
    (myenv) $HOME~$ type python   # "type" is preferred over which; see POSIX
    python is /home/you/myenv/bin/python
    
    (myenv) $HOME~$ python --version
    Python 3.5.1
    

    A common practice is to have a separate environment for each project you work on, anyway; but if you want this to look like it's effectively system-wide for your own login, you could add the activation stanza to your .profile or similar.

    0 讨论(0)
  • 2020-12-01 03:34

    Somehow python 3 came back (after some updates?) and is causing big issues with apt updates, so I've decided to remove python 3 completely from the alternatives:

    root:~# python -V
    Python 3.5.2
    
    root:~# 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
    
    
    root:~# update-alternatives --remove python /usr/bin/python3.5
    
    root:~# update-alternatives --config python
    There is 1 choice for the alternative python (providing /usr/bin/python).
    
        Selection    Path                Priority   Status
    ------------------------------------------------------------
      0            /usr/bin/python2.7   2         auto mode
    * 1            /usr/bin/python2.7   2         manual mode
    
    Press <enter> to keep the current choice[*], or type selection number: 0
    
    
    root:~# python -V
    Python 2.7.12
    
    root:~# update-alternatives --config python
    There is only one alternative in link group python (providing /usr/bin/python): /usr/bin/python2.7
    Nothing to configure.
    
    0 讨论(0)
提交回复
热议问题