解决Ubuntu中`apt-get install`指令失效报错的问题

标题:解决Ubuntu中apt-get install指令失效报错的问题

前言

本文旨在解决:
由于在Ubuntu中配置python 3.6,从而导致apt-get install指令失效报错的问题。

关键原因就在于:Ubuntu 14.04 默认的python版本是2.7,如果系统当前的python版本给换成了3.6,那么apt-get (我估计这个指令是依赖了python的某些模块)这些就都会失效了。

1 错误信息

关键错误信息是:

SyntaxError: invalid syntax
dpkg: error while cleaning up:
E: Sub-process /usr/bin/dpkg returned an error code (1)

以下为详细错误信息:

dale@deheng:/home$ sudo apt-get install cifs-utils
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  keyutils python-samba samba-common samba-common-bin samba-libs
Suggested packages:
  smbclient winbind heimdal-clients
The following NEW packages will be installed:
  cifs-utils keyutils samba-common samba-common-bin
The following packages will be upgraded:
  python-samba samba-libs
2 upgraded, 4 newly installed, 0 to remove and 48 not upgraded.
3 not fully installed or removed.
Need to get 6,790 kB/6,911 kB of archives.
After this operation, 2,344 kB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://mirrors.cloud.aliyuncs.com/ubuntu/ trusty-updates/main samba-common all 2:4.3.11+dfsg-0ubuntu0.14.04.20 [84.1 kB]
Get:2 http://mirrors.cloud.aliyuncs.com/ubuntu/ trusty-updates/main python-samba amd64 2:4.3.11+dfsg-0ubuntu0.14.04.20 [1,070 kB]
Get:3 http://mirrors.cloud.aliyuncs.com/ubuntu/ trusty-updates/main samba-libs amd64 2:4.3.11+dfsg-0ubuntu0.14.04.20 [5,129 kB]
Get:4 http://mirrors.cloud.aliyuncs.com/ubuntu/ trusty-updates/main samba-common-bin amd64 2:4.3.11+dfsg-0ubuntu0.14.04.20 [508 kB]
Fetched 6,790 kB in 0s (35.1 MB/s)    
Preconfiguring packages ...
Selecting previously unselected package samba-common.
(Reading database ... 128705 files and directories currently installed.)
Preparing to unpack .../samba-common_2%3a4.3.11+dfsg-0ubuntu0.14.04.20_all.deb ...
Unpacking samba-common (2:4.3.11+dfsg-0ubuntu0.14.04.20) ...
Preparing to unpack .../python-samba_2%3a4.3.11+dfsg-0ubuntu0.14.04.20_amd64.deb ...
  File "/usr/bin/pyclean", line 63
    except (IOError, OSError), e:
                             ^
SyntaxError: invalid syntax
Error in sys.excepthook:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 145, in apport_excepthook
    os.O_WRONLY | os.O_CREAT | os.O_EXCL, 0o640), 'wb') as f:
FileNotFoundError: [Errno 2] No such file or directory: '/var/crash/_usr_bin_pyclean.0.crash'

Original exception was:
  File "/usr/bin/pyclean", line 63
    except (IOError, OSError), e:
                             ^
SyntaxError: invalid syntax
dpkg: warning: subprocess old pre-removal script returned error exit status 1
dpkg: trying script from the new package instead ...
  File "/usr/bin/pyclean", line 63
    except (IOError, OSError), e:
                             ^
SyntaxError: invalid syntax
Error in sys.excepthook:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 145, in apport_excepthook
    os.O_WRONLY | os.O_CREAT | os.O_EXCL, 0o640), 'wb') as f:
FileNotFoundError: [Errno 2] No such file or directory: '/var/crash/_usr_bin_pyclean.0.crash'

Original exception was:
  File "/usr/bin/pyclean", line 63
    except (IOError, OSError), e:
                             ^
SyntaxError: invalid syntax
dpkg: error processing archive /var/cache/apt/archives/python-samba_2%3a4.3.11+dfsg-0ubuntu0.14.04.20_amd64.deb (--unpack):
 subprocess new 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
ModuleNotFoundError: No module named 'ConfigParser'
Error in sys.excepthook:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 145, in apport_excepthook
    os.O_WRONLY | os.O_CREAT | os.O_EXCL, 0o640), 'wb') as f:
FileNotFoundError: [Errno 2] No such file or directory: '/var/crash/_usr_bin_pycompile.0.crash'

Original exception was:
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
ModuleNotFoundError: No module named 'ConfigParser'
dpkg: error while cleaning up:
 subprocess installed post-installation script returned error exit status 1
Preparing to unpack .../samba-libs_2%3a4.3.11+dfsg-0ubuntu0.14.04.20_amd64.deb ...
Unpacking samba-libs:amd64 (2:4.3.11+dfsg-0ubuntu0.14.04.20) over (2:4.3.11+dfsg-0ubuntu0.14.04.19) ...
Selecting previously unselected package cifs-utils.
Preparing to unpack .../cifs-utils_2%3a6.0-1ubuntu2_amd64.deb ...
Unpacking cifs-utils (2:6.0-1ubuntu2) ...
Selecting previously unselected package keyutils.
Preparing to unpack .../keyutils_1.5.6-1_amd64.deb ...
Unpacking keyutils (1.5.6-1) ...
Selecting previously unselected package samba-common-bin.
Preparing to unpack .../samba-common-bin_2%3a4.3.11+dfsg-0ubuntu0.14.04.20_amd64.deb ...
Unpacking samba-common-bin (2:4.3.11+dfsg-0ubuntu0.14.04.20) ...
Processing triggers for man-db (2.6.7.1-1ubuntu1) ...
Errors were encountered while processing:
 /var/cache/apt/archives/python-samba_2%3a4.3.11+dfsg-0ubuntu0.14.04.20_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

2 解决方案

1)先查看我系统的当前版本,使用以下三个指令即可 [1]:
cat /proc/version 
cat /etc/issue    (简单的系统版本信息)
cat /etc/lsb-release  (详细的版本信息)
uname -a (内核信息)

dale@deheng:~$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION=“Ubuntu 14.04.5 LTS”

以上,发现我的系统为Ubuntu 14.04 。

2)查看我当前的python版本,使用python --version即可。

dale@deheng:/home$ python --version
Python 3.6.3

3)第一次尝试(失败)

先参考 [2],看看当前的python都有哪些版本:ls /usr/bin/python*

dale@deheng:/home$ ls /usr/bin/python*
/usr/bin/python /usr/bin/python2.7 /usr/bin/python2-config /usr/bin/python3.4 /usr/bin/python3.6 /usr/bin/python3m
/usr/bin/python2 /usr/bin/python2.7-config /usr/bin/python3 /usr/bin/python3.4m /usr/bin/python3.6m /usr/bin/python-config

然后通过 [3],发现Ubuntu 14.04 的默认python版本是 2.7.所以需要把当前的3.6版本改成2.7.

然后根据 [2],修改 ~/.bashrc文件(使用 nano ~/.bashrc命令),即往文件末尾加上:alias python='/usr/bin/python2.7'即可。

然后输入. ~/.bashrc来使修改生效。

然后输入 python --version,发现已经变为 2.7版本。

然后输入 sudo apt-get install cifs-utils,看是不是能正常下载。

结果,下载失败,依旧报同样的错误。为什么呢?

我开始找原因,通过输入ll /usr/bin/python,我发现原来我之前的python版本切换是通过 update-alternatives 这个工具来管理的。如下:

dale@deheng:/home$ ll /usr/bin/python
lrwxrwxrwx 1 root root 24 Feb 18 07:59 /usr/bin/python -> /etc/alternatives/python*

所以开始第二种尝试。

4) 第二次尝试(成功)

找准原因,即可对症下药。我先是把原先的修改给删了:即nano ~/.bashrc给之前加的alias那一行给删了,然后输入. ~/.bashrc使修改立即生效。

然后,先输入update-alternatives --list python [4],发现当前版本指向 3.6. (怪不得之前的alias修改无效)

然后输入update-alternatives --config python,如下,选1修改版本为2.7:

在这里插入图片描述
然后重新输入:sudo apt-get install cifs-utils,即可顺利安装。

如下:
在这里插入图片描述

总结

之所以记录这个,是因为中间经历了一些波折,感觉还是有意义的,所以在此记录。

(这也表明Ubuntu 14还是存在值得改进的空间的,或者说我感觉对用户的要求还是比较高的,如果乱改容易把系统搞崩。)

参考文献

[1] ubuntu版本查看命令 https://blog.csdn.net/weixin_39876223/article/details/81782397

[2] 更改Ubuntu默认python版本的方法 https://www.cnblogs.com/yifugui/p/8649864.html

[3] ubuntu 14.04修改默认python版本 https://blog.csdn.net/l297969586/article/details/77881312

[4] 更改Ubuntu默认python版本的两种方法 https://blog.csdn.net/fang_chuan/article/details/60958329

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值