运行 Ubuntu 12.04,我使用了常用的 python 2.7。
我需要 python 2.6,所以我下载了源代码并执行
./configure
make
sudo make install
这是一个错误,因为我不想替换整个系统的 python 。现在有些程序停止工作了,例如 update-manager 和
ImportError: No module named gi.repository
我使用 update-alternatives 将 python 2.7 再次设为默认,但由于缺少一些模块,许多 python 应用程序仍然无法启动。
有人可以提示一下发生了什么以及解决这个问题的最佳方法是什么吗?
提前致谢。
编辑 :
我可以通过设置我自己的硬链接从 /etc/python 到 /etc/python2.7 来使 apt-get 的一些功能正常工作。(所以我猜使用 update-alternatives 也没什么用。)我做了一个 dist-upgrade ,它基本上起作用了,但很多通过 apt-get 管理的包仍然有问题。特别是,python-minimal 的问题阻止了我想要安装的许多其他软件包。
Setting up python-minimal (2.7.3-0ubuntu7) ...
Traceback (most recent call last):
File "/usr/local/lib/python2.7/runpy.py", line 162, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "/usr/local/lib/python2.7/runpy.py", line 72, in _run_code
exec code in run_globals
File "/usr/local/lib/python2.7/compileall.py", line 16, in <module>
import struct
File "/usr/local/lib/python2.7/struct.py", line 1, in <module>
from _struct import *
ImportError: No module named _struct
dpkg: error processing python-minimal (--configure):
subprocess installed post-installation script returned error exit status 255
附言: 从源代码构建 2.7总是退出(在 dist-ugprade 或 update-alternatives 之前也退出)
make: *** [libinstall] Error 1
目前,在 make 上,存在更多问题(“Python 构建已完成,但未找到构建这些模块所需的位:_bsddb bsddb185 bz2
dl imageop sunaudiodev
要找到所需的位,请在 setup.py 中的 detect_modules() 中查找模块的名称。”)
因为这有点超出我的理解范围,所以我想我最好从头开始全新安装。
答案1
我最近从 debian/Testing 降级到 debian/Stable 时也遇到了类似的问题。我猜是在这个过程中,python 模块被破坏了。正如有人指出的那样,清除并重新安装 python 有点过于苛刻。幸运的是,我遇到了以下问题 http://ubuntuforums.org/showthread.php?t=735693
根据这个建议,我尝试了命令
for pkg in `dpkg --get-selections | egrep -v 'deinstall' | egrep python | awk '{print $1}'`; do apt-get -y --force-yes install --reinstall $pkg ; done
重新安装名称中包含 python 的所有内容,这样就解决了问题。
答案2
您的 python 2.6 安装可能已经改变了很多设置和路径。
最好的办法是重新安装默认的 Python 解释器
sudo apt-get --reinstall install python python-support
我无法测试它,但我希望它能起作用。祝你好运。
如果它不起作用,我唯一的另一个想法就是从源代码安装 python 2.7,然后尝试重新安装默认的。
答案3
我遇到了基本上相同的问题,但针对的是 python-minimal 2.7.11-1。
cat /var/lib/dpkg/info/python-minimal.postinst
你应该得到如下结果:
#! /bin/sh
set -e
python2.7 -m compileall /usr/share/python/ >/dev/null
运行命令而不重定向到 >/dev/null(编辑文件,或:)sudo python2.7 -m compileall /usr/share/python/
。这将向您显示安装后配置失败的位置。
前任:
Listing /usr/share/python/penemue/lib/python2.7/site-packages/gevent
Compiling /usr/share/python/penemue/lib/python2.7/site-packages/gevent/_socket3.py ...
File "/usr/share/python/penemue/lib/python2.7/site-packages/gevent/_socket3.py", line 183
def makefile(self, mode="r", buffering=None, *,
^
SyntaxError: invalid syntax
就我而言,它是一个自定义的 python 包(使用 dh-virtualenv 构建),位于 /usr/share/python 下。我必须运行dpkg -P penemue
并最终删除该/usr/share/python/penemue
目录。我可能只需将/usr/share/python/penemue
目录移开即可。
一旦我摆脱了错误的代码,运行sudo apt-get install -f
就解决了问题。
答案4
我的猜测是,你意外地覆盖了默认的 python 目录(不知何故),并且 2.6 与更新管理器/应用程序所需的不兼容。
sudo apt-get purge python2
然后尝试sudo apt-get install python2
。这应该会从你的系统中清除 Python,然后重新安装它,并使其再次成为默认 Python。
唯一的其他想法是,你得到的 2.6 版本源代码是错误的,因此导致了错误的安装,但这并不坏足够的被 make 检测到???