如何让tkinter寻找其他位置的Tcl/Tk库(以避免重新安装损坏的库)

4 投票
1 回答
1413 浏览
提问于 2025-04-15 12:34

我写了一个使用Tkinter的Python脚本。现在我想把这个脚本放到几台运行Mac OS 10.4.11的电脑上。但是这个版本的Mac OS X似乎有问题,TCL/TK的安装坏了。即使加载这个包也会出错:

Traceback (most recent call last):
File "<stdin>", line 1, in ?
ImportError: dlopen(/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/lib-dynload/_tkinter.so   2): Symbol not found: _tclStubsPtr
Referenced from: /System/Library/Frameworks/Tk.framework/Versions/8.4/Tk
Expected in: /System/Library/Frameworks/Tcl.framework/Versions/8.4/Tcl

重新安装TCL/TK不太可能,因为我们在办公室,需要IT人员到每台电脑上去,这样会让大家不愿意使用这个脚本。

有没有简单的方法可以让Tkinter去别的地方找TCL/TK框架?我下载了一个独立版本的Tcl/Tk Aqua,但我不知道怎么控制Tkinter使用哪个框架……

谢谢你的帮助。

亚当

1 个回答

1

你可以通过修改环境变量 DYLD_LIBRARY_PATH 来改变系统查找动态/共享库的位置,这样在启动 Python 之前,系统就会去你指定的地方找库文件。你可以在终端里这样做:

$ DYLD_LIBRARY_PATH=<insert path here>:$DYLD_LIBRARY_PATH python

... 或者你可以创建一个包装器:

#!/bin/sh
export DYLD_LIBRARY_PATH=<insert path here>:$DYLD_LIBRARY_PATH
exec python "$@"

关于 DYLD_LIBRARY_PATH 的详细说明可以在 dyld 手册页面 找到。

不要在你的 .bashrc 文件或其他任何全局设置中设置这个变量,因为这样可能会引发一些麻烦的问题。

撰写回答