问题是 - 我有 tcllib 中一些软件包的本地副本,并且我在 /usr/lib/tcllib2.0 中全局安装了 tcllib。如何确保我的程序加载本地包而不是来自 /usr/lib/tcllib2.0 的包?目前检查这一点的唯一方法是从系统中删除 tcllib 并将 auto_path 附加到我的本地路径(或更改 auto_path)。 但也许有办法检查加载的包实际上是从我的本地文件夹加载的。 提前谢谢你,乔治。
更新。我发现的唯一方法是手动检查加载库的位置: [lindex [split [package ifneeded math 1.2.6]] 1]
如果您不想使用全局安装的软件包,请在启动 Tcl 之前设置
TCLLIBPATH
环境,或者在执行第一个 auto_path
之前更改 package require
全局变量(有一些直接内置于 Tcl 中的例外情况) )。该环境变量用于初始化该全局变量。
Tcl 没有特别偏爱一条路径而不是另一条路径的策略,除了在搜索包索引文件时线性行走
auto_path
之外。 (索引文件发布了如何加载包的特定版本的描述)。
或者,使用您知道在其他地方从未使用过的特殊版本号在本地发布您的替代版本,然后
package require -exact
该特定版本。如果你是具体的,你就会得到你所期望的。语言运行时假设,如果您那么具体,您就知道自己在做什么,并且可以处理任何后果。