解决centos中"ImportError: No module named
时间:2016-12-31 20:36 来源:linux.it.net.cn 作者:IT
今天想要用Metasploit的时候出现了"ImportError: No module named _tkinter"的错误,_tkinter是被Tkinter模块引用的,因为对Tkinter不太熟悉所以也不知道为什么会有这个错误。
我本身是在centos中,而且系统中存在不同的账号分别使用了不同版本的Python,所以我先在root账号下试了一下import Tkinter是OK的,接着用命令import _tkinter;_tkinter;打印了一下_tkinter的文件路径,发现是在”/usr/lib64/python2.7/lib-dynload/”目录下面,而且是so文件。
首先我想到直接把root下面的_tkinter.so直接拷贝到xxuser账号的Python lib-dynload中,但是我发现会有undefined symbol: PyUnicodeUCS4_AsUTF8String的错误,也就是因为root、xxuser两者之间的Python编译参数不同导致的,看来这种方式是不可行了。
接着网上找了一圈没有发现能直接安装_tkinter的命令,后来我想到这个_tkinter.so是不是在编译Python的时候生成的呢?所以我下载了一个跟xxuser当前Python版本一致的Python源码,编译的时候选择--enable-unicode=ucs2,重新./configure、make以后在build/lib.linux-x86_64-2.7目录下面确实生成了_tkinter.so,然后把_tkinter.so拷贝到xxuser账号的Python lib-dynload中,运行import Tkinter就OK了。 (责任编辑:IT)
今天想要用Metasploit的时候出现了"ImportError: No module named _tkinter"的错误,_tkinter是被Tkinter模块引用的,因为对Tkinter不太熟悉所以也不知道为什么会有这个错误。 我本身是在centos中,而且系统中存在不同的账号分别使用了不同版本的Python,所以我先在root账号下试了一下import Tkinter是OK的,接着用命令import _tkinter;_tkinter;打印了一下_tkinter的文件路径,发现是在”/usr/lib64/python2.7/lib-dynload/”目录下面,而且是so文件。 首先我想到直接把root下面的_tkinter.so直接拷贝到xxuser账号的Python lib-dynload中,但是我发现会有undefined symbol: PyUnicodeUCS4_AsUTF8String的错误,也就是因为root、xxuser两者之间的Python编译参数不同导致的,看来这种方式是不可行了。 接着网上找了一圈没有发现能直接安装_tkinter的命令,后来我想到这个_tkinter.so是不是在编译Python的时候生成的呢?所以我下载了一个跟xxuser当前Python版本一致的Python源码,编译的时候选择--enable-unicode=ucs2,重新./configure、make以后在build/lib.linux-x86_64-2.7目录下面确实生成了_tkinter.so,然后把_tkinter.so拷贝到xxuser账号的Python lib-dynload中,运行import Tkinter就OK了。 (责任编辑:IT) |