首先看看遇到的什么错误,这是在从Ubuntu 13.04升级到13.10的过程中遇到的,如下:
Traceback (most recent call last):
File "/usr/lib/python2.7/runpy.py", line 162, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "/usr/lib/python2.7/runpy.py", line 72, in _run_code
exec code in run_globals
File "/usr/lib/python2.7/py_compile.py", line 183, in <module>
sys.exit(main())
File "/usr/lib/python2.7/py_compile.py", line 165, in main
compile(filename, doraise=True)
File "/usr/lib/python2.7/py_compile.py", line 136, in compile
os.rename(path_tmp, cfile)
OSError: [Errno 21] Is a directory
dpkg: error processing scons (--configure):
子进程 已安装 post-installation 脚本 返回了错误号 101
在处理时有错误发生:
scons
看了上面信息,首先想到的就是google一下,看有没有解决方案,找了一会儿感觉希望不大,所以就开始想办法自己解决,还好是python脚步,而且有详细的traceback,至于什么scons,网上找找很多的,反正就是一个自动化生成编译工程的工具。
下面详细描述一下自己解决这个问题的过程和思路:
通过上面的traceback定位到文件/usr/lib/python2.7/py_compile.py的行数,我的是136.对应出错的函数是 os.rename(path_tmp, cfile),而且给出了很详细的出错信息,说是一个目录,python的rename函数要求两个都是文件。知道这一点,我在源码中os.rename函数之前加入了两行代码,分别是print path_tmp 和print cfile。最终通过这两句代码输出了错误的文件名路径,然后进入路径查看果然对应的重命名文件是一个目录(目标文件名已经存在,而且是一个目录),所以就报错了。其中还有两个,当然自己也不知道这两个空目录是怎么来的,找到问题了就简单多了涩,把对应的空目录删除掉,重新安装一切就ok了。
解决问题关键是找对思路,不然浪费很多时间还不一定能够有效的解决问题,随便在说一下自己升级ubuntu软件经常遇到的一个错误和解决方案,
问题是:失败的下载某一个升级的软件包(deb包),失败信息会把具体的url连接给出。
解决方案:手动下载,通过wget url,基本上都不会失败。然后把所有下载的包拷贝到/var/cache/apt/archives/目录下,然后重新运行升级命令即可。