文章目录
标题:解决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