几天前我将我的机器从 15.10 更新到了 16.04。
现在我必须面对这个奇怪的问题:rhythmbox
告诉我,它无法导入站点模块并崩溃,因为python3.5
缺少模块_sysconfigdata_m
。
我有一个来自 的源安装python3.5.1
,但似乎发布升级删除了此安装。
旧python3.5.1
文件位于 下/usr/lib/python3.5.1/
。
我已经尝试重新安装python3.5
并rhythmbox
。
完整的回溯:
me@my_machine:~$ rhythmbox
Failed to import the site module
Traceback (most recent call last):
File "/usr/lib/python3.5/site.py", line 580, in <module>
main()
File "/usr/lib/python3.5/site.py", line 566, in main
known_paths = addusersitepackages(known_paths)
File "/usr/lib/python3.5/site.py", line 287, in addusersitepackages
user_site = getusersitepackages()
File "/usr/lib/python3.5/site.py", line 263, in getusersitepackages
user_base = getuserbase() # this will also set USER_BASE
File "/usr/lib/python3.5/site.py", line 253, in getuserbase
USER_BASE = get_config_var('userbase')
File "/usr/lib/python3.5/sysconfig.py", line 595, in get_config_var
return get_config_vars().get(name)
File "/usr/lib/python3.5/sysconfig.py", line 538, in get_config_vars
_init_posix(_CONFIG_VARS)
File "/usr/lib/python3.5/sysconfig.py", line 410, in _init_posix
from _sysconfigdata import build_time_vars
File "/usr/lib/python3.5/_sysconfigdata.py", line 6, in <module>
from _sysconfigdata_m import *
ImportError: No module named '_sysconfigdata_m'
顺便提一句:
好像 16.04 删除了python3.4
(我的默认python3
)并用 替换了它python3.2
。
链接/usr/bin/python3.2
到/usr/bin/python3
只会导致其他python3
程序(如 gnome-termial)崩溃。
其他论坛上说,出现这个错误,如果python2
用而不是python3
那么我就有点卡住了。
更新:我添加了一些调试输出/usr/lib/python3.5/_sysconfigdata.py
:
print(sys.version)
输出为
3.5.1 (default, Feb 10 2016, 15:13:13)
[GCC 5.2.1 20151010]
但它应该是
3.5.1+ (default, Mar 30 2016, 22:46:26)
[GCC 5.3.1 20160330]
我有python3
我的机器上没有这样的安装!我已经搜索过了几次对于这样的安装。
编辑:
我尝试python3
通过运行完全重新安装
sudo apt autoremove --purge python3
不要在家尝试做这个!
这将删除几乎所有程序在你的机器上。我花了 6 小时才重建了我的基础系统!我只有一 gnome-terminal
留下来,因为它被加载到内存中。
但这并不能解决我的问题。
答案1
这不是一个解决方案,而是一个修复
我补充道
for p in sys.path:
print(p)
至/usr/lib/python3.5/_sysconfigdata.py
。路径/usr/lib/python3.5/plat-x86_64-linux-gnu
被替换为/usr/lib/python3.5/plat-gnu
。
修复它
我通过在文件中添加以下解决方法来修复此问题:
plat_path = "/usr/lib/python3.5/plat-x86_64-linux-gnu"
if(not plat_path in sys.path):
sys.path.append(plat_path)
我还是不知道为什么会发生这种情况。