在Suse Linux Server 11.3上安装Python 2.7.2时找不到tkinter依赖项
我花了好几个小时在这个问题上。感觉在Linux上我们的工作就是调试那些在不同版本中不兼容的脚本,而不是完成实际的工作。
setup.py会尝试找到它需要的东西,并构建一些C语言模块来包装特定的依赖项,如果它能找到所需的东西的话。这让这个脚本在路径和文件名上变得非常脆弱。
虽然从.py源代码中很难看出,但对于tkinter来说,我们需要tcl、tk和tix。这些最新版本的库都已经安装好了。我可以确认这一点,因为SUSE发行版自带的Python 2.6能够正确导入_tkinter和Tkinter模块,并且可以运行测试脚本。
这个脚本似乎需要找到这些库。我同时安装了32位和64位的库。所以,这些库是存在的: 32位 64位 libtk8.5.so /usr/lib /usr/lib64 libtcl8.5.so " "
这两个路径都包含在setup.py的搜索列表中。但是,我觉得setup.py没有搜索正确的文件名。它似乎在寻找以tk和tcl开头的文件,并且拼接了不同版本的文件(包括'8.5')。但是,文件名并不是以'lib'开头的。在我进一步尝试之前,Python.org的人真的把这个搞得这么糟糕吗?这似乎不太可能。SUSE Linux真的是个奇怪的发行版吗?这也不太可能。
我觉得setup.py不会去寻找二进制文件(这在运行时似乎很重要...),但它们确实存在于usr/lib和usr/lib64中。
我能找到的唯一包含文件是tclextend。它是tclextend.h,位于usr/include。我找不到其他tcl或tk的.h文件。当然,Python 2.7下载时会提供Python C包装所需的包含文件。
所以,我有点无计可施。这真是浪费时间。有没有办法跳过构建过程,直接构建tcl/tk支持?我在ssl上也遇到了同样的问题:它无法构建。一步一步来吧。
谢谢你的帮助。
1 个回答
我找到了很多可以下载rpm包的地方。这让我可以单独安装一些包,比如tcl的头文件。但是,这种做法并不好,因为要让Python支持tkinter,所需的依赖包大约有60个。
我发现OpenSuSE 11.3版本的系统库里包含了我需要的所有东西。我的Novell系统自带的库几乎不包含任何开发包。
问题解决了。Python的构建过程找到了所有tkinter所需的前置条件。
抱歉发了这样一个新手问题。